1. Pytorch和Numpy的乘法操作汇总
- torch.mul()和乘法符号
torch.mul()实现对应位相乘(和乘法符号相同),要求两个矩阵维度相同,如果第一维不同可以广播 - torch.mm()仅实现简单二维矩阵乘法,它的扩展有matmul()、bmm()等
- torch.matmul()实现矩阵乘法。当输入两个二维矩阵,同torch.mm();当输入是3维和2维,则默认3维的第一维为batch_size,后两维进行矩阵乘,得到batch_size保持不变的三维矩阵;当输入都是3维,第一维广播成一样大,后两维做矩阵乘法。
- np.dot()如果传入两个大小相同的向量,实现向量点积,得到一个数;如果传入两个矩阵,则进行矩阵乘积
import torch
a = torch.tensor([[1, 2]])
b = torch.tensor([[1, 2], [3, 4]])
torch.mul(a, b) #tensor([[1, 4], [3, 8]])
torch.mm(a, b) # tensor([[7, 10]])
2. torch.repeat() https://blog.csdn.net/qq_34806812/article/details/89388210
对张量进行重复扩充。
当参数只有两个时:(列的重复倍数,行的重复倍数)。1表示不重复
当参数有三个时:(通道数的重复倍数,列的重复倍数,行的重复倍数)。
import torch
a= torch.arange(30).reshape(5,6)
print(a)
print('b:',a.repeat(2,2)) # 10x12
print('c:',a.repeat(2,1,1)) # 2x5x6
3. torch.nn.embedding()
从word2vec到现在深度学习,word_embedding都是一个意思。
1.首先我们获得语料大小,每个词的索引从数字0开始递增。
2.将数字转换为one-hot表示。
3.随机生成一个二维矩阵(语料大小x词嵌入维度)
4.任意一个单词的onehot和3中的二维矩阵相乘得到这个单词的embedding,也可以解释为embedding矩阵的每一行都是一个单词的嵌入。深度学习学习的就是这个embedding矩阵。
https://zhuanlan.zhihu.com/p/341176854
4. Dropout的实现
https://www.cnblogs.com/shiliuxinya/p/12266954.html
就是对每一层的输出结果以p的概率置零,如下图做了三次Linear,每次后的结果做一次dropout。

image.png