1

Je voudrais comparer deux images avec un réseau convolutif et un réseau récurrent. Je veux d'abord passer ma première image à travers une pile de type VGG, puis l'introduire dans une première entrée RNN. Ensuite, la deuxième image devrait passer LE MÊME VGG et ensuite entrer dans une deuxième entrée du RNN. Comment implémenter cette topologie avec Keras?Comment passer une paire d'images d'abord à travers un réseau de conv, puis à travers un réseau récurrent dans Keras?

Le réseau récurrent doit se souvenir de la première image lors du traitement de la seconde.

MISE À JOUR

Supposons que j'ai deux entrées:

input1 = layers.Input(...) 
input2 = layers.Input(...) 

Actuellement, j'ai deux branches VGG

x1 = vgg_stack(...)(x1) 
x2 = vgg_stack(...)(x2) 

x = layers.concatenate([x1, x2]) 

x = final_MLP(...)(x) 

Comment puis-je remplacer par signle vgg_stack appliquée aux deux entrées, puis ces résultats sont passés à RNN?

Répondre

1

Vous devriez essayer d'utiliser l'encapsuleur TimeDistributed. Vous pouvez trouver the doc here

Il prend fondamentalement la première dimension après le lot comme une «dimension temporelle» et il applique la couche (ou le modèle?) Que vous donnez comme argument à chaque étape temporelle. On doit l'utiliser comme ceci:

from keras.layers import TimeDistributed 

input_layer = Input((num_of_images, image_dims...)) 
# m_cnn is your VGG like model, taking one image as input. 
layer1 = TimeDistributed(m_cnn)(input_layer) 
layer2 = YourRNNLayer(...)(layer1) 

J'espère que cela fait sens pour vous :)

+0

Je ne comprends pas désolé. J'ai 2 entrées: 'input1' et' input2'. Que faire ensuite? – Dims

+0

Je ne peux pas utiliser 'm_cnn' s'il ne s'agit pas d'un' calque' – Dims