'''
pytorch 中神经网络模块化接口的了解
1, torch.nn是专门为设计的模块化接口,nn构建位于autograd之上,可以定义和运行神经网络
2, nn.Module是nn中十分重要的类,包含网络各层的定义以及forward方法
'''
'''
定义自己的网络:
1, 需要继承nn.Module类,并实现forward方法
2, 一般把网络中具有可学习参数的层放在构造函数中
3,不具有可学习参数的层可放在构造函数中,也可不放在构造函数中
4,只要在nn.Module的子类中定义了forward函数,backward函数就会被自动实现
5,forward函数可以使用任何Variable支持函数
pytorch中基于nn.Module的构建模型中,只支持mini-batch的Variab的输入方式
比如,只有一张输入图片,也需要变成NxCxHxW的形式:
input_image = torch.FloatTensor(1,28,28)
input_image = Variable(input_image)
input_image = input_image.unsqueeze(0)
'''
对于所有的接口函数都在:pytorch中文文档中
https://ptorch.com/docs/1/torch-nn
所以接下来模型撰写就,以LeNet为例:
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
class LeNet(nn.Module):
def __init__(self):
# nn.Module的子类函数必须在构造函数中执行父类的构造函数
super(LeNet, self).__init__() # 等价与nn.Module.__init__()
# nn.Conv2d返回的是一个Conv2d class的一个对象,该类中包含forward函数的实现
# 当调用self.conv1(input)的时候,就会调用该类的forward函数
self.conv1 = nn.Conv2d(1, 6, (5, 5)) # output (N, C_{out}, H_{out}, W_{out})`
self.conv2 = nn.Conv2d(6, 16, (5, 5))
self.fc1 = nn.Linear(256, 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)) # F.max_pool2d的返回值是一个Variable
x = F.max_pool2d(F.relu(self.conv2(x)), (2, 2))
x = x.view(x.size()[0], -1)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = F.relu(self.fc3(x))
# 返回值也是一个Variable对象
return x
def output_name_and_params(net):
for name, parameters in net.named_parameters():
print('name: {}, param: {}'.format(name, parameters))
if __name__ == '__main__':
net = LeNet()
print('net: {}'.format(net))
params = net.parameters() # generator object
print('params: {}'.format(params))
output_name_and_params(net)
input_image = torch.FloatTensor(1, 1, 28, 28)
# 和tensorflow不一样,pytorch中模型的输入是一个Variable,而且是Variable在图中流动,不是Tensor。
# 这可以从forward中每一步的执行结果可以看出
input_image = Variable(input_image)
output = net(input_image)
# print('output: {}'.format(output))
# print('output.size: {}'.format(output.size()))
参考:https://blog.csdn.net/u012609509/article/details/81203436