《dive into deep learning》chapter 3.3 Concise Implementation of Linear Regression中对于简单线性回归问题用torch API编写中,一个简单的线性最小二乘回归等价于一个全连接网络,在其中关于网络模型构件中使用的是:
trainer = torch.optim.SGD(net.parameters(), lr=0.03)
其中优化器的第一个输入是net.parameters(),此时查看已创建的net有
Input:net
Out[128]:
Sequential(
(0): Linear(in_features=2, out_features=1, bias=True)
)
这里因为net只有这一层linear,所以net.parameters()就是指全连接层的weight和bias,也即
Input:net[0].weight
Out[148]:
Parameter containing:
tensor([[ 0.0112, -0.0049]], requires_grad=True)
这里如果拓展开来,应该是如下代码所给出的样子。
import torch.nn as nn
from collections import OrderedDict
# hyper parameters
in_dim=1
n_hidden_1=1
n_hidden_2=1
out_dim=1
class Net(nn.Module):
def __init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):
super(Net,self).__init__()
self.layer = nn.Sequential(OrderedDict([
('linear1',nn.Linear(in_dim,n_hidden_1)),
('relu1',nn.ReLU(True)),
('linear2',nn.Linear(n_hidden_1,n_hidden_2)),
('relu2',nn.ReLU(True)),
('linear3',nn.Linear(n_hidden_2,out_dim))
]))
def forward(self,x):
x = self.layer(x)
return x
net = Net(in_dim,n_hidden_1,n_hidden_2,out_dim)
print(net.modules)
# 如何读取其中一步的参数,注意如果使用了ordereddict,则需要net.layer(层定义).linear1(这一步对应的名称)
print(net.layer.linear1.weight)
# 如果直接使用Sequential,会默认对每一步对应的字典的key处给与从0开始的值,此时具体到第i步就是
# net[i]
net1 = nn.Sequential(nn.Conv1d(20,10,3),
nn.ReLU(True),
nn.Linear(10,5))
print(net1.modules)
print(net1[2].weight)
# 遍历所有参数
for param in net1.parameters():
print(param)
上当了,第四章专门有讲这个。。。
参考:pytorch系列7 -----nn.Sequential讲解_墨流觞的博客-CSDN博客_nn.sequential