pytorch里面如何方便的建立多层?
题目描述
DNN模型调研,为了方便,隐含层的节点个数写到了数组中,数组长度不定,希望在pytorch中可以实现向tf中,可以把多个网络写在一个数组中。
class LayersNet(torch.nn.Module):
def __init__(self, d_input, hidden_nums, d_output):
super(LayersNet, self).__init__()
self.d_input = d_input
self.hidden_nums = hidden_nums
self.d_output = d_output
self.nets = []
nums = [d_input] + hidden_nums
for i in range(len(nums) - 1):
input_s, output_s = nums[i], nums[i+1]
self.nets.append(nn.Linear(input_s, output_s, bias = False))
self.nets.append(nn.ReLU())
self.output_net = nn.Linear(hidden_nums[-1], d_output)
def forward(self, x):
for net in self.nets:
y = net(x)
x = y
y_pred = self.output_net(x)
return y_pred
不过这种写法明显在运行时有问题。print(model)也只识别出来了最后一层。
>> print(model)
LayersNet(
(output_net): Linear(in_features=16, out_features=1, bias=True)
)
>> for t in model.parameters(): print(t)
Parameter containing:
tensor([[-2.1853e-01, 7.5920e-02, 2.5792e-02, -1.1243e-01, -1.5249e-03,
9.8314e-01, 2.3440e-01, -8.8917e-02, 1.1189e+01, 1.4157e+01,
1.1222e+00, -2.3913e-01, 2.1624e-01, 2.1417e+01, 1.0903e-01,
8.4284e+01]], requires_grad=True)
Parameter containing:
tensor([0.8752], requires_grad=True)
模型layers必须定义成model的这一层吗?
这种层不明确的话,如何在model中自行定义呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Pytorch中支持
Sequential
模块实现可变长度的子模块构建,详情可以参考文档.题主后来回答中的这部分内容也完全可以放在
__init__
方法中实现,不必单独构造一个函数进行。