2017-12-09 2 views
1

Ich mache cross_modality_pretrain in keras. I verwenden InceptionResNetv2 vortrainierte Modell, und erhalten Gewichte von conv2d_1, die Form (3 3 3 32) (Höhe, Breite, Kanäle, Ausgänge)Wie cross_modality_protrained in Keras: verschiedene Formgewichte setzen

model_base = InceptionResNetV2(include_top=False, weights='imagenet') 

weight = model_base.get_weights() 
weight_conv2d_1 = weight[0] 
weight_conv2d_1 = np.mean(weight_conv2d_1, axis=2, keepdims=True) 

ich ihn ändern zu (3 3 20 32)

for i in range(20): 
    if i == 0: 
     weight_change = np.concatenate((weight_conv2d_1,), axis=2) 
    else: 
     weight_change = np.concatenate((weight_change, weight_conv2d_1), axis=2) 

Nun möchte ich das neue Gewicht setzen,

weight[0] = weight_change 
model_base.set_weights(weight) 

Aber ich bekomme Fehler:

ValueError: Cannot feed value of shape (3, 3, 10, 32) for Tensor u'Placeholder:0', which has shape '(3, 3, 3, 32)' 

Wie kann ich es lösen? Vielen Dank!

Antwort

0

Zuerst ist der Fehler set_weight Eingang sollte die gleiche Form von get_weight haben, aber sie sind (3 3 3 32) und (3 3 20 32).

Zweitens versuchte ich es zu lösen, indem ich den Modellkonfigurationsparameter model.weights() änderte und den Modellkonfigurationsparameter von (3 3 3 32) auf (3 3 20 32) änderte. model.weights() zurückgeben list[tf.Variable < shape (3 3 3 32)>]. In Python, Typ list ist veränderbar, aber ich scheiterte, ich kann es nicht ändern. Wie kann ich es lösen? Vielen Dank !

Schließlich löse ich das Problem von model.get_config, um Konfigurationsparameter zu erhalten, ändern Sie es und erstellen Sie ein neues Modell von Model.from_config().

Verwandte Themen