Ho un problema nel trovare la mappatura corretta dei pesi per trasformare uno strato denso in uno strato convoluzionale.Python keras come trasformare uno strato denso in uno strato convoluzionale
Questo è un estratto di un ConvNet che sto lavorando:
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'))
Dopo la MaxPooling, l'ingresso è di forma (512,7,7). Vorrei trasformare il denso strato in uno strato convoluzionale per farlo sembrare come questo:
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Convolution2D(4096, 7, 7, activation='relu'))
Tuttavia, non so come ho bisogno di ridisegnare i pesi al fine di mappare correttamente i pesi appiattite al (4096,512,7,7) struttura necessaria per lo strato convoluzionale? In questo momento, i pesi dello strato denso sono di dimensione (25088,4096). Ho bisogno di mappare in qualche modo questi 25088 elementi in una dimensione di (512,7,7) pur mantenendo la corretta mappatura dei pesi ai neuroni. Finora, ho provato diversi modi di rimodellare e quindi di trasporre ma non sono stato in grado di trovare la mappatura corretta.
Un esempio di quello che sto provando sarebbe questo:
weights[0] = np.transpose(np.reshape(weights[0],(512,7,7,4096)),(3,0,1,2))
ma non traccia correttamente i pesi. Ho verificato se la mappatura è corretta confrontando l'output per entrambi i modelli. Se fatto correttamente, prevedo che l'output dovrebbe essere lo stesso.