如何编写PyTorch序列模型?

时间:2017-09-10 14:16:17

标签: python sequential pytorch

到目前为止,我在Keras写了我的MLP,RNN和CNN,但现在PyTorch在深度学习社区中越来越受欢迎,所以我也开始学习这个框架。我是Keras顺序模型的忠实粉丝,它使我们能够非常快速地制作简单的模型。我也看到PyTorch有这个功能,但我不知道如何编写一个。我试过这种方式

import torch
import torch.nn as nn

net = nn.Sequential()
net.add(nn.Linear(3, 4))
net.add(nn.Sigmoid())
net.add(nn.Linear(4, 1))
net.add(nn.Sigmoid())
net.float()

print(net)

但是它给出了这个错误

  

属性错误:'顺序'对象没有属性'添加'

另外,如果可能,您能否在PyTorch序列模型中给出RNN和CNN模型的简单示例?

4 个答案:

答案 0 :(得分:10)

Sequential目前没有add方法,但有一些关于添加此功能的debate

正如您可以在documentation nn.Sequential中看到的那样,将图层划分为参数序列或OrderedDict

如果您有一个包含大量图层的模型,您可以先创建一个列表,然后使用*运算符将列表展开为位置参数,如下所示:

layers = []
layers.append(nn.Linear(3, 4))
layers.append(nn.Sigmoid())
layers.append(nn.Linear(4, 1))
layers.append(nn.Sigmoid())

net = nn.Sequential(*layers)

这将导致代码的结构类似,直接添加。

答案 1 :(得分:6)

正如正确答案所描述的那样,这就是一系列参数:

device = torch.device('cpu')
if torch.cuda.is_available():
    device = torch.device('cuda')

net = nn.Sequential(
      nn.Linear(3, 4),
      nn.Sigmoid(),
      nn.Linear(4, 1),
      nn.Sigmoid()
      ).to(device)


print(net)

Sequential(
  (0): Linear(in_features=3, out_features=4, bias=True)
  (1): Sigmoid()
  (2): Linear(in_features=4, out_features=1, bias=True)
  (3): Sigmoid()
  )

答案 2 :(得分:1)

正如McLawrence所说,nn.Sequential没有add方法。我认为,也许您发现使用add的代码中可能包含将torch.nn.Module.add修改为如下功能的行:

def add_module(self,module):
    self.add_module(str(len(self) + 1 ), module)

torch.nn.Module.add = add_module

完成此操作后,您可以像在问题中发布的一样,将torch.nn.Module添加到Sequential

答案 3 :(得分:0)

https://pastebin.com/nfdqqV8k