web-dev-qa-db-ja.com

PyTorchシーケンシャルモデルを書く方法は?

これまで、MLS、RNN、およびCNNをKerasで作成しましたが、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モデルの簡単な例を挙げることができますか?

8
Eka

Sequentialには現時点ではaddメソッドがありませんが、この機能の追加について 議論 があります。

ドキュメント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)

これにより、直接追加する場合と同様のコード構造が作成されます。

16
McLawrence

正解で説明されているように、これは一連の引数として表示されるものです。

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()
  )
9
Chris Palmer

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.ModuleSequentialに追加できます。

1
yrd241