奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SVD的。
Pytorch入门实战:训练一个聊天机器人
本文参考 pytorch 官方 tutorial CHATBOT TUTORIAL。
需要掌握的pytorch用法
torch.Tensor
是默认的 tensor 类型torch.FlaotTensor
的简称。32-bit floating point。torch.cat((x, x, x), dim=1)
在给定维度上对输入的张量序列进行连接操作。例如 x shape = (2, 3), 经过上面的变换之后的输出为 shape = (2, 9)torch.topk(input, k, dim)
返回按第dim维最大的 k 个值,以及出现的位置。torch.gather(input, dim, index)
沿给定轴dim,将输入索引张量index指定位置的值进行聚合。1
2
3
4a = torch.tensor([[1, 2, 3], [4, 5, 6]])
index = torch.LongTensor([[0, 1], [2, 0]])
b = torch.gather(a, dim=1, index=index)
# b: [[1, 2], [6, 4]]torch.nn.utils.rnn.pack_padded_sequence(input, lengths, batch_first=False)
在 rnn 中,将一个填充过的变长序列压紧。输入的形状可以是(T×B×*)
。T 是最长序列长度,B 是 batch size,*
代表任意维度(可以是0)。如果 batch_first=True 的话,那么相应的 input size 就是(B×T×*)
。
输入的序列,应该按序列长度的长短排序,长的在前,短的在后。即input[:,0]
代表的是最长的序列,input[:, B-1]
保存的是最短的序列。lengths
表示每个序列的长度。torch.nn.utils.rnn.pad_packed_sequence(sequence, batch_first=False)
这个操作和pack_padded_sequence()
是相反的。把压紧的序列再填充回来。
返回的 tensor 的 size 是T×B×*
, T 是最长序列的长度,B 是 batch_size,如果 batch_first=True, 那么返回值是B×T×*
。Batch 中的元素将会以它们长度的逆序排列。torch.masked_select(input, mask, out=None)
Returns a new 1-D tensor which indexes the input tensor according to the binary mask mask which is a ByteTensor.
The shapes of the mask tensor and the input tensor don’t need to match, but they must be broadcastable.torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2)
梯度裁剪
【转】自适应学习率算法
神经网络研究员早就意识到学习率肯定是难以设置的超参数之一,因为它对模型的性能有显著的影响。损失通常高度敏感于参数空间中的某些方向,而不敏感于其他。动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数。在这种情况下,自然会问有没有其他好的方法。如果我们相信方向敏感度在某种程度上是轴对齐的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率便是有道理的。本节将简要说明这些自适应参数学习率的算法。
C++ Prime:类
本文是《C++ Primer》一书第七章的读书笔记。本文将通过构造SalesData
、Screen
和WindowMgr
三个类来说明C++类的特性。
岭回归、Lasso回归与稀疏性
Ridge Regression其实就是带了L2正则化的线性回归。Lasso Regression其实就是带了L1正则项的线性回归。
Pip错误:module 'pip' has no attribute 'main'
一开始想用conda
安装一个包,但conda
上找不到,然后就像用pip
试试,但输入命令pip install cupy
,却报错如下:1
2
3
4Traceback (most recent call last):
File "/home/pengfei/anaconda3/envs/pytorch/bin/pip", line 6, in <module>
sys.exit(pip.main())
AttributeError: module 'pip' has no attribute 'main
解决方法,升级pip到最新版本。但使用conda
的升级命令没用,pip
又不好使,所以只能先找到可安装的pip
,然后从网站下载安装:1
2
3
4
5
6
7
8# 先搜索可用的pip
anaconda search -t conda pip
# 会出来很多的pip,选择conda-forge/pip
anaconda show conda-forge/pip
# 然后出现如下信息
# To install this package with conda run: conda install --channel https://conda.anaconda.org/conda-forge pip
# 根据提示安装即可
conda install --channel https://conda.anaconda.org/conda-forge pip
Pytorch与Mxnet/Gluon炼丹对比
mxnet的gluon接口是模仿pytorch的接口设计的,所以两者有很多共通之处。总结一下两者接口的对比。
Pytorch入门实战:训练ImageNet数据集
ImageNet是图像图像领域不可不调的一个数据集。本文记录自己的训练脚本,参考自Pytorch官方的example。