动手学深度学习-Task1,Task2

view函数

把原先tensor中的数据按照行优先的顺序排成一个一维的数组,然后按照view函数中的参数组合成其它维度的tensor。
例子

import torch 
a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(2,3))
print(a.view(2,-1))

输出:
tensor([[1., 2., 3.],
[4., 5., 6.]])
tensor([[1., 2., 3.],
[4., 5., 6.]])
其中参数-1就是动态计算tensor的维度。
参考
PyTorch中view的用法

gather函数

torch.gather(input, dim, index, out=None)

Gathers values along an axis specified by dim.

For a 3-D tensor the output is specified by:

out[i][j][k] = input[index[i][j][k]][j][k]  # dim=0
out[i][j][k] = input[i][index[i][j][k]][k]  # dim=1
out[i][j][k] = input[i][j][index[i][j][k]]  # dim=2

Parameters: 

    input (Tensor) – The source tensor
    dim (int) – The axis along which to index
    index (LongTensor) – The indices of elements to gather
    out (Tensor, optional) – Destination tensor
import torch 
b = torch.Tensor([[1,2,3],[4,5,6]])
print(b)
index_1 = torch.LongTensor([[0,1],[2,0]])
index_2 = torch.LongTensor([[0,1,1],[0,0,0]])
print(torch.gather(b, dim=1, index=index_1))
print(torch.gather(b, dim=0, index=index_2))

输出:
tensor([[1., 2., 3.],
[4., 5., 6.]])
tensor([[1., 2.],
[6., 4.]])
tensor([[1., 5., 6.],
[1., 2., 3.]])

如何理解:
由于:index_1[0][0]=0
index_1[0][1]=1
index_1[1][0]=2
index_1[1][1]=0
所以第一个输出:i=0,j=0时b[i=0][index_1[0][0]=0]=b[0][0]=1
i =0,j=1时 b[i=0][index_1[0][1]=1]=b[0][1]=2
i=1,j=0时 b[i=1][index_1[1][0]=2]=b[1][2]=6
i=1,j=1时 b[i=1][index_1[1][1]=0]=b[1][0]=4
从结果中也可以看出输出的维度和index矩阵维度相同
参考
利用pytorch中的gather函数取出矩阵中的元素

softmax公式

参考别人的回答
softmax公式大概可以解释为:
首先假设样本与理论标准函数的误差(类似于线性回归那一章中生成数据时叠加上的高斯误差)服从正态分布(高斯分布),并且不同样本之间独立同分布,通过贝叶斯公式计算各个分类的概率,将高斯分布的公式带入公式之后化简得到。在一些地方softmax函数又被称为归一化指数(normalized exponential)
以上说明方法来自书籍pattern recognition and machine learning中的一种线性分类概率生成式模型,原文中softmax函数形式为:
p ( C k ∣ x ) = p ( x ∣ C k ) p ( C k ) ∑ j p ( x ∣ C j ) p ( C j ) = exp ⁡ ( a k ) ∑ j exp ⁡ ( a j ) p(C_{k}|x) = \frac{p(x|C_{k})p(C_{k})}{\sum_{j}p(x|C_{j})p(C_{j})}=\frac{\exp(a_{k})}{\sum_{j}\exp(a_{j})} p(Ckx)=jp(xCj)p(Cj)p(xCk)p(Ck)=jexp(aj)exp(ak)
其中
a k = ln ⁡ p ( x ∣ C k ) p ( C k ) a_{k}=\ln p(x|C_{k})p(C_{k}) ak=lnp(xCk)p(Ck)
k为当前计算类别,j代表所有类别的索引
softmax函数处理的是经过处理之后已经生成的概率,另有证明多项式分布属于指数分布族后推导softmax函数的方法,处理的数据也是概率数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值