使用torch.nn包来构建神经网络
张量:向量的一种多维拓展
nn
包依赖autograd
包来定义模型并求导。 一个nn.Module
包含各个层和一个forward(input)
方法,该方法返回output
- 定义包含一些可学习的参数(或者叫权重)神经网络模型;
- 在数据集上迭代;
- 通过神经网络处理输入;
- 计算损失(输出结果和正确值的差值大小);
- 将梯度反向传播回网络的参数;
- 更新网络的参数,主要使用如下简单的更新原则:
weight = weight - learning_rate * gradient
torch.Tensor
:一个用过自动调用 backward()
实现支持自动梯度计算的 多维数组 , 并且保存关于这个向量的梯度 w.r.t.
nn.Module
:神经网络模块。封装参数、移动到GPU上运行、导出、加载等
https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/
nn.Linear
class torch.nn.Linear(in_features, out_features, bias=True)
对输入数据做线性变换:y=Ax+b
Tensor.view() : 相当于reshape,改变张量形状
autograd.Function
:实现一个自动求导操作的前向和反向定义,每个变量操作至少创建一个函数节点,每一个Tensor
的操作都回创建一个接到创建Tensor
和 编码其历史 的函数的Function
节点。
F.softmax(a,b) : a是数据,b是指定维度
torch.max():返回一个远足,分别是最大值和对应的index
torch.squeeze(): 将数据中所有的1去掉,如果指定维度,则只去掉指定维度的。
torch.save()
:保存序列化的对象到磁盘,使用了Python
的pickle
进行序列化,模型、张量、所有对象的字典。
torch.load()
:使用了pickle
的unpacking将pickled的对象反序列化到内存中。
torch.nn.Module.load_state_dict()
:使用反序列化的state_dict
加载模型的参数字典。
nn.Module.train():将module
设置为 training mode,
仅仅当模型中有Dropout
和BatchNorm
是才会有影响
nn.Module.eval():将模型设置成evaluation
模式,仅仅当模型中有Dropout
和BatchNorm
是才会有影响。
训练集数据和测试集数据分布不一样,为了在eval的时候不改变模型的参数(在有BN和Dropout层时)而设置的。