主题
线性回归
总结
-
pytorch的本质是计算图+自动求导
-
每个计算节点的结构被定下来需要哪些信息,这些信息作为参数传入
-
loss最终是一个标量,才能反向传播
-
继承
nn.Module
后必须写forward()
-
在
__call__()
中调用forward()
,使得Module是可调用对象,Pythonic风格。把输入数据以Tensor对象形式传入__call__()
,返回输出数据的Tensor对象形式 -
nn.MSELoss
也是一个计算节点,与nn.Linear
一样都是nn.Module
的子类 -
优化器不是
nn.Module
的子类
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
(1)优化器与Loss计算节点都在模型外建立。
(2)在模型外建立Loss计算节点的两个原因,一是要对该节点传入标签信息,二是方便在训练过程中更换Loss计算方式
(3) 在模型外建立优化器是因为要传入模型的优化参数,显然只有当模型实例化之后才能建立
- 更新模型参数的三段式
optimizer.zero_grad()
loss.backward()
optimizer.step()
PyTorch深度学习的步骤
- Prepare dataset
- Desgin model using Class:inherit from nn.Module
- Construct loss and optimizer:using PyTorch API
- Training cycle:forward、backward、update
1. Prepare dataset
- 输入数据的尺寸结构用mini-batch风格,一个维度是样本数n。即n*@,其中@是每个输入数据点的尺寸结构
- 不同维度的矩阵相乘,用广播机制复制数值。比如矩阵X的维度为(a * b * c * d),矩阵Y的维度为(c * d),XY乘积的结果矩阵维度为(a * b )
网友评论