最近在学习Pytorch的官方入门教程,本篇只写了关于神经网络这一小知识点的理解:
附:Pytorch的官方入门60min教程链接
神经网络可以通过 torch.nn 包来构建。
现在对于自动梯度(autograd)有一些了解,神经网络是基于自动梯度 (autograd)来定义一些模型。一个 nn.Module 包括若干层和一个方法 forward(input) ,它会返回输出(output)。
例如,看一下数字图片识别的网络:
理论上对它的理解:
代码实现:
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 卷积核square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 5 * 5, 120) # 6*6 from image dimension
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)),2)
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
print(x.shape)#16*5*5
x = x.view(-1, self.num_flat_features(x))
print(x.shape)
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:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
print(net)
输出结果:
class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
Parameters(参数):
* in_channels(int) – 输入信号的通道
* out_channels(int) – 卷积产生的通道
* kerner_size(int or tuple) - 卷积核的尺寸
* stride(int or tuple, optional) - 卷积步长
* padding (int or tuple, optional)- 输入的每一条边补充0的层数
* dilation(int or tuple, 'optional') – 卷积核元素之间的间距
* groups(int, optional) – 从输入通道到输出通道的阻塞连接数
* bias(bool, optional) - 如果bias=True,添加偏置
class torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
对于输入信号的输入通道,提供1维最大池化(max pooling)操作
如果输入的大小是(N,C,L),那么输出的大小是(N,C,L_out)的计算方式是:
$$out(N_i, C_j,k)=max^{kernel_size-1}{m=0}input(N{i},C_j,stride*k+m)$$
如果padding不是0,会在输入的每一边添加相应数目0
dilation用于控制内核点之间的距离,详细描述在这里
参数:
* kernel_size(int or tuple) - max pooling的窗口大小
* stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size
* padding(int or tuple, optional) - 输入的每一条边补充0的层数
* dilation(int or tuple, optional) – 一个控制窗口中元素步幅的参数
* return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助
* ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作
class torch.nn.Linear(in_features, out_features, bias=True)
对输入数据做线性变换:\(y = Ax + b\)
参数:
* in_features - 每个输入样本的大小
* out_features - 每个输出样本的大小
* bias - 若设置为False,这层不会学习偏置。默认值:True