Posting ini tampaknya menunjukkan bahwa apa yang ingin saya capai tidak mungkin. Namun, saya tidak yakin dengan ini - mengingat apa yang telah saya lakukan, saya tidak melihat mengapa apa yang ingin saya lakukan tidak dapat dicapai ...
Saya memiliki dua dataset gambar di mana satu memiliki gambar bentuk (480, 720, 3) sementara yang lain memiliki gambar bentuk (540, 960, 3).
Saya menginisialisasi model menggunakan kode berikut:
input = Input(shape=(480, 720, 3), name='image_input')
initial_model = VGG16(weights='imagenet', include_top=False)
for layer in initial_model.layers:
layer.trainable = False
x = Flatten()(initial_model(input))
x = Dense(1000, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
x = Dense(1000, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
x = Dense(14, activation='linear')(x)
model = Model(inputs=input, outputs=x)
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
Sekarang saya telah melatih model ini pada dataset sebelumnya, saya ingin mematikan lapisan tensor input dan menambahkan model dengan tensor input baru dengan bentuk yang sesuai dengan dimensi gambar dari dataset yang terakhir.
model = load_model('path/to/my/trained/model.h5')
old_input = model.pop(0)
new_input = Input(shape=(540, 960, 3), name='image_input')
x = model(new_input)
m = Model(inputs=new_input, outputs=x)
m.save('transfer_model.h5')
yang menghasilkan kesalahan ini:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2506, in save
save_model(self, filepath, overwrite, include_optimizer)
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/models.py", line 106, in save_model
'config': model.get_config()
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2322, in get_config
layer_config = layer.get_config()
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2370, in get_config
new_node_index = node_conversion_map[node_key]
KeyError: u'image_input_ib-0'
Dalam posting yang saya tautkan, maz menyatakan bahwa ada ketidakcocokan dimensi yang mencegah perubahan lapisan input model - jika ini yang terjadi, lalu bagaimana saya meletakkan (480, 720, 3) lapisan input di depan dari model VGG16 yang mengharapkan (224, 224, 3) gambar?
Saya pikir masalah yang lebih mungkin adalah bahwa keluaran model lama saya mengharapkan sesuatu yang berbeda dari apa yang saya berikan berdasarkan apa yang dikatakan fchollet dalam posting ini . Saya bingung secara sintaksis, tetapi saya percaya seluruh x = Layer()(x)
segmen sedang membangun sepotong demi sepotong dari input-> output dan hanya melemparkan input yang berbeda di depan adalah merusaknya.
Aku benar-benar tidak tahu ...
Dapatkah seseorang tolong beri tahu saya bagaimana mencapai apa yang saya coba lakukan atau, jika tidak mungkin, jelaskan kepada saya mengapa tidak?