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中自行定义呢?

阅读 2.7k
1 个回答
新手上路,请多包涵

Pytorch中支持Sequential模块实现可变长度的子模块构建,详情可以参考文档.

题主后来回答中的这部分内容也完全可以放在__init__方法中实现,不必单独构造一个函数进行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题