繁体   English   中英

如何编写 PyTorch 顺序模型?

[英]How to write a PyTorch sequential model?

到目前为止,我在 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)

但它给出了这个错误

AttributeError: 'Sequential' 对象没有属性 'add'

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

Sequential目前没有add方法,尽管关于添加此功能存在一些争论

正如您在文档中所nn.Sequential将作为参数序列或OrderedDict nn.Sequential的层作为参数。

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

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)

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

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

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()
  )

正如nn.Sequential所说nn.Sequential没有add方法。 我想也许你发现使用add的代码可能有将torch.nn.Module.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中。

layerlist = []
for i in layers:
    layerlist.append(nn.Linear(n_in, i))  # n_in input neurons connected to i number of output neurons
    layerlist.append(nn.ReLU(inplace=True))  # Apply activation function - ReLU
    layerlist.append(nn.BatchNorm1d(i))  # Apply batch normalization
    layerlist.append(nn.Dropout(p))  # Apply dropout to prevent overfitting
    n_in = i  # Reassign number of input neurons as the number of neurons from previous last layer

    # Establish the FCC between the last hidden layer and output layer
    layerlist.append(nn.Linear(layers[-1], out_sz))

    self.layers = nn.Sequential(*layerlist)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM