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

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


回答:

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

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

以上是 pytorch里面如何方便的建立多层? 的全部内容, 来源链接: utcz.com/a/162471.html

回到顶部