Jusqu'à présent, j'ai écrit mon MLP, RNN et CNN à Keras, mais maintenant PyTorch gagne en popularité au sein des communautés d'apprentissage en profondeur, et j'ai donc également commencé à apprendre ce cadre. Je suis un grand fan de modèles séquentiels à Keras, ce qui nous permet de faire des modèles simples très rapidement. J'ai également vu que PyTorch a cette fonctionnalité, mais je ne sais pas comment en coder une. J'ai essayé de cette façon
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)
mais il donne cette erreur
AttributeError: l'objet 'Sequential' n'a pas d'attribut 'add'
Aussi, si possible, pouvez-vous donner des exemples simples pour les modèles RNN et CNN dans le modèle séquentiel PyTorch?
Sequential
n'a pas de méthode add
pour le moment, bien qu'il y ait débat sur l'ajout de cette fonctionnalité.
Comme vous pouvez le lire dans la documentationnn.Sequential
prend comme argument les couches séparées comme une séquence d'arguments ou un OrderedDict
.
Si vous avez un modèle avec beaucoup de couches, vous pouvez d'abord créer une liste, puis utiliser le *
opérateur pour développer la liste en arguments positionnels, comme ceci:
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)
Cela se traduira par une structure similaire de votre code, comme l'ajout direct.
Comme décrit par la bonne réponse, voici à quoi cela ressemblerait comme une séquence d'arguments:
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()
)
Comme l'a dit McLawrence nn.Sequential
n'a pas la méthode add
. Je pense que peut-être les codes dans lesquels vous avez trouvé l'utilisation de add
pourraient avoir des lignes qui ont modifié le torch.nn.Module.add
à une fonction comme celle-ci:
def add_module(self,module):
self.add_module(str(len(self) + 1 ), module)
torch.nn.Module.add = add_module
après cela, vous pouvez ajouter un torch.nn.Module
à un Sequential
comme vous l'avez publié dans la question.