继续跟着文档学习(Pytorch神经网络官方文档)
1.Conv2d() 关于通道数:
有一篇博客讲的特别清楚,附上链接【CNN】理解卷积神经网络中的通道 channel
这里再附上我自己的理解
图1 神经网络结构图
self.conv1 = nn.Conv2d(1, 6, 5)
如以上代码,输入图像的通道数由输入图像的格式所确定,由于输入的图像是灰度图像,所以通道数为1;
而输出的通道数则是由卷积核的数量所决定,由神经网络的结构图可以看出。第一层卷积核的数量为6,所以输出的通道数为6
self.conv2 = nn.Conv2d(6, 16, 5)
继续看代码,第一层的输出通道数即为第二层的输入通道数,所以输入的通道数为6;
第二层的卷积核为16个,所以输出的通道数为16
2.Linear()函数
self.fc1 = nn.Linear(16 * 5 * 5, 120)
Linear()函数的参数说明:
in_features:输入图像的大小;在图一的结构中,输入的是16个5×5的矩阵,所以参数设置为16×5×5(通道数 _宽_高)
out_features:输出的张量大小;它也代表了该全连接层的神经元个数。
3.池化层(降维操作):
(1)池化层的常见操作包含以下几种:最大值池化,均值池化,随机池化,中值池化,组合池化等。
池化层在forward()函数里面定义,torch.nn.functional提供了:
平均池化avg_pool1d(input, kernel_size, stride=None)、avg_pool12d()、avg_pool13d()
最大值池化max_pool1d()、max_pool2d()、max_pool3d()
还有其他函数不一一列举,贴上一个官方文档链接,torch.nn.functional中的池化函数
(2)代码理解:
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
此处采用的是最大值池化,贴上图示便于理解:
该池化层的输入是卷积层1经过激活函数以后的结果,池化层的窗口大小为2*2
4 .view函数
这个是把一个矩阵重新排列成不同维度但不改变元素的函数,如代码中x.view(-1,self.num_flat_features(x)),这里-1就是把后面的矩阵展成一维数组,以便后面线性变换层操作
eg:
x = torch.zeros((2, 2))
print(x)
x = x.view(-1)
print(x)
输出:
5.num_flat_features
num_flat_features函数是把经过两次池化后的16x5x5的矩阵组降维成二维,便于view函数处理,而其中用乘法也是为了不丢失每一层相关的特性
def num_flat_features(self, x):
size = x.size()[1:]
num_features = 1
for s in size:
num_features *= s
return num_features
附上完整代码:
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:]
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
print(net)
Original: https://blog.csdn.net/weixin_43987546/article/details/123750703
Author: 天下第一菜-
Title: Day2 自学Pytorch—-神经网络
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/692314/
转载文章受原作者版权保护。转载请注明原作者出处!