1.torch.nn
上一篇中我们使用到了variable时,创建的类继承的就是nn中的module,torch.nn包提供了很多神经网络中具体功能相关的类,下面我们使用nn来简化之前的代码
刚开始的参数定义变化不大
import torch
from torch.autograd import Variable
batch_n=100
input_data=1000
hidden_layer=100
output_data=10
x=Variable(torch.randn(batch_n,input_data),requires_grad=False)
y=Variable(torch.randn(hidden_layer,output_data),requires_grad=False)
相比之下定义两层网络的代码被删减了,因为后面会自适应权重网络
model=torch.nn.Sequential(torch.nn.Linear(input_data,hidden_layer),torch.nn.ReLU(),torch.nn.Linear(hidden_layer,output_data))
在这里sequential里的内容就是我们搭建的网络结构,首先通过linear完成输入到隐藏层的线性变换,然后使用ReLU作为激活函数,再使用linear完成隐藏层到输出层的线性变换,其中:
1.1 sequential
torch.nn.Sequential是nn中的一种序列容器,通过在容器中嵌套具体功能的类实现模型网络的搭建,参数会按照我们定义好的序列自动传递下去,如果将容器中的各个部分看作不同的模块的话,这些模块可以自由组合,模块加入有两种方式,一种就是向上面的直接嵌套,另一种就是以orderdict有序字典的方式进行传入,第一种默认用从零开始的数字序列作为代号,而第二种每个模块有我们自己定义的名字