これまで、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モデルの簡単な例を挙げることができますか?
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)
これにより、直接追加する場合と同様のコード構造が作成されます。
正解で説明されているように、これは一連の引数として表示されるものです。
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()
)
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
に追加できます。