Pytorch 之torch.nn初探--第1关:torch.nn.Module

文章目录

  • 任务描述
  • 相关知识
    • torch.nn.Module
    • 方法
  • 测试说明
  • 答案代码

神经网络可以使用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
  • Recurrent网络 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模块还可以包含其他模块,允许将它们嵌套在树形结构中。

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。
具体请参见后续测试样例。

测试说明

测试过程:

  • 本关涉及的测试文件为moduleTest.py,运行用户填写后的程序判断正误。
  • 测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错。
  • 请注意输出格式及规范。
  • 注意,在声明变量时请按照提示命名,否则将会报错。

以下是测试样例:

测试输入:
预期输出:

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 *********/

Pytorch 之torch.nn初探--第1关:torch.nn.Module_第1张图片

你可能感兴趣的:(人工智能原理,pytorch,深度学习,神经网络)