pytorch里面如何方便的建立多层?

发布于 2022-09-12 23:03:40 字数 1492 浏览 41 评论 0

题目描述

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不奢求什么 2022-09-19 23:03:40

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文