神经网络可以使用torch.nn
包构建。它提供了几乎所有与神经网络相关的功能,例如:
nn.Linear,nn.Bilinear
nn.Conv1d,nn.Conv2d,nn.Conv3d,nn.ConvTranspose2d
nn.Sigmoid,nn.Tanh,nn.ReLU,nn.LeakyReLU
nn.MaxPool1d,nn.AveragePool2d
nn.LSTM,nn.GRU
nn.BatchNorm2d
Dropout nn.Dropout,nn.Dropout2d
Embedding - nn.Embedding
nn.MSELoss,nn.CrossEntropyLoss,nn.NLLLoss
这些类的实例将具有一个内置的__call__函数,可通过图层运行输入。
本关任务:
本关要求利用nn.Linear()声明一个线性模型 l,并构建一个变量 net 由三个l序列构成。
torch.nn.Module是所有神经网络模块的基类,用户自定义的神经网络模型同样继承自这个类。它定义了训练神经网络需要的所有基础方法,并且是可以序列化的抽象类。
torch.nn.Module模块还可以包含其他模块,允许将它们嵌套在树形结构中。
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv2 = nn.Conv2d(20, 20, 5)
def forward(self, x):
x = F.relu(self.conv1(x))
return F.relu(self.conv2(x))
以这种方式分配的子模块将被注册,并且在调用.cuda()等时也将转换它们的参数。
train(mode=True)
将模型设置为训练状态
这只对诸如Dropout或BatchNorm等模块有影响
返回值:self
返回类型 :Module
- eval()
将模型设置为测试状态
这只对诸如Dropout或BatchNorm等模块有影响
float()
将所有的参数转化为float的数据类型
forward(*input)
定义每次调用时执行的计算
应该被所有的子类重写
zero_grad()
将所有模型参数的梯度设置为0
- modules()
返回网络中所有模块的迭代器
重复的模块只返回一次。在下面的例子中,l只会被返回一次
应用示例:
l = nn.Linear(2, 2)
net = nn.Sequential(l, l)
print(l)
print(net)
for idx, m in enumerate(net.modules()):
print(idx, '->', m)
输出结果:
Linear(in_features=2, out_features=2)
Sequential(
(0): Linear(in_features=2, out_features=2)
(1): Linear(in_features=2, out_features=2)
)
0 -> Sequential(
(0): Linear(in_features=2, out_features=2)
(1): Linear(in_features=2, out_features=2)
)
1 -> Linear(in_features=2, out_features=2)
具体语义说明:
torch.nn.Sequential
,一个序列化的模块。模块将按照它们在构造函数中传递的顺序添加到其中。或者,也可以传入模块的有序字典。
编程要求
本关涉及的代码文件为 module.py,本次的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:
声明一个`in_features=2`,`out_features=3`的线性模型 l并输出;
变量 net 由三个l 序列构成,并输出 net。
具体请参见后续测试样例。
测试过程:
以下是测试样例:
测试输入:
预期输出:
Linear(in_features=2, out_features=3)
Sequential(
(0): Linear(in_features=2, out_features=3)
(1): Linear(in_features=2, out_features=3)
(2): Linear(in_features=2, out_features=3)
)
Congratulation!
真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克
开始你的任务吧,祝你成功!
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
import torch
import torch.nn as nn
from torch.autograd import Variable
#/********** Begin *********/
#声明一个in_features=2,out_features=3的线性模型 l并输出
l = nn.Linear(2,2)
print(l)
#变量 net 由三个l 序列构成,并输出 net
net = nn.Sequential(l,l)
print(net)
"\
Linear(in_features=2, out_features=2, bias=True)\n\
Sequential(\n\
(0): Linear(in_features=2, out_features=2, bias=True)\n\
(1): Linear(in_features=2, out_features=2, bias=True)\n\
)\n"
#/********** End *********/