到目前为止,我在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模型的简单示例?
答案 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