J'ai un problème pour trouver la cartographie correcte des poids afin de transformer une couche dense en une couche convolutionnelle.Python keras comment transformer une couche dense en une couche convolutionnelle
Ceci est un extrait d'un ConvNet que je travaille sur:
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
Après la MaxPooling, l'entrée est de la forme (512,7,7). Je voudrais transformer la couche dense en une couche convolutionnel pour la faire ressembler à ceci:
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Convolution2D(4096, 7, 7, activation='relu'))
Cependant, je ne sais pas comment je dois remodeler les poids afin de cartographier correctement les poids aplaties à la (4096,512,7,7) structure nécessaire pour la couche convolutionnelle? À l'heure actuelle, les poids de la couche dense sont de dimension (25088,4096). Je dois en quelque sorte mapper ces 25088 éléments à une dimension de (512,7,7) tout en conservant la cartographie correcte des poids aux neurones. Jusqu'à présent, j'ai essayé plusieurs façons de refaçonner et de transposer, mais je n'ai pas réussi à trouver le mapping correct.
Un exemple de ce que j'ai essayé ce serait:
weights[0] = np.transpose(np.reshape(weights[0],(512,7,7,4096)),(3,0,1,2))
mais il ne correspond pas les poids correctement. J'ai vérifié si le mappage est correct en comparant la sortie pour les deux modèles. Si c'est fait correctement, je m'attends à ce que la sortie soit la même.