Linear
- 现在先定义一些东西:
in_features:输入特征集
out_features:输出特征集
input_hang:输入的tensor的行
input_lie:输入的tensor的列
现在列举一个表格给你看看:
我就列举了两个feature,我们把这些features组成一个二维的tensor,用他们后面的数字代表:
[1,2,3
4,5,6]
我们就发现,列是代表:我们每个种类的特征集。所以不管在分类问题还是预测回归问题上,我们都经常考虑tensor的列,而行的数量只表示你的特征多不多,越多我模型train出来就可能越精确,当然也可能会坏掉,比如两个类的东西越多,他们两个种类可能越相似,哪就可能无法判断出来哪个是哪个。
- 上面我们就知道了:tensor的列就是代表:特征集。
我们看下图,就知道。
- 我们Linear(输入特征集,输出特征集)。又因为输入 特征集=输入tensor的列。
然后把你tensor的列丢进去做linear就好了。要记住的是:我的out_features是可以大于in_features的。
对于他的bias,我们train模型的时候都需要的。
Conv2d
Conv2d就也很难理解,个人觉得:
nn.Conv2d(
self, in_channels,out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True**
)
参数:
in_channel: 输入数据的通道数,例RGB图片通道数为3;(一般为深度)
out_channel: 输出数据的通道数,这个根据模型调整;
kennel_size: 卷积核大小;kennel_size=2,意味着卷积大小2, kennel_size=(2,3),意味着卷积在第一维度大小为2,在第二维度大小为3;
stride:步长,默认为1 padding: 在边缘补零
难理解的点就是在通道、kennel、还有filter上的联系。推荐一篇博客给大家:
一般怎么考虑tensor的维度:
我们可以把我们熟知的三维:长宽高。换成我们现在tensor的维度
在tensor里面呢? 有:
宽(width) 、高(high)、深度(depth)
深度越深,我们的通道也就会越多。当然,我们的卷积核也可以有深度,这就可以把原始的depth,通过卷积核,变换成另外一个depth(深度)。