问答

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

作者:admin 2021-04-17 我要评论

题目描述 DNN模型调研,为了方便,隐含层的节点个数写到了数组中,数组长度不定,希望在pytorch中可以实现向tf中,可以把多个网络写在一个数组中。 class Layers...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

题目描述

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

###

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器