Supposons que je veuille avoir l'architecture générale du réseau de neurones:
Input1 --> CNNLayer
\
---> FCLayer ---> Output
/
Input2 --> FCLayer
Input1 est une donnée d'image, input2 est une donnée non d'image. J'ai implémenté cette architecture dans Tensorflow.
Tous les exemples de pytorch que j'ai trouvés sont une entrée à travers chaque couche. Comment puis-je définir la fonction directe pour traiter 2 entrées séparément, puis les combiner dans une couche intermédiaire?
Par "les combiner", je suppose que vous entendez concaténer les deux entrées.
En supposant que vous concatriez le long de la deuxième dimension:
import torch
from torch import nn
class TwoInputsNet(nn.Module):
def __init__(self):
super(TwoInputsNet, self).__init__()
self.conv = nn.Conv2d( ... ) # set up your layer here
self.fc1 = nn.Linear( ... ) # set up first FC layer
self.fc2 = nn.Linear( ... ) # set up the other FC layer
def forward(self, input1, input2):
c = self.conv(input1)
f = self.fc1(input2)
# now we can reshape `c` and `f` to 2D and concat them
combined = torch.cat((c.view(c.size(0), -1),
f.view(f.size(0), -1)), dim=1)
out = self.fc2(combined)
return out
Notez que lorsque vous définissez le nombre d'entrées à self.fc2
vous devez prendre en compte les deux out_channels
de self.conv
ainsi que les dimensions spatiales de sortie de c
.