यह पोस्ट इंगित करती है कि मैं जो पूरा करना चाहता हूं वह संभव नहीं है। हालाँकि, मैं इस बारे में आश्वस्त नहीं हूँ - जो मैंने पहले ही किया है, उसे देखते हुए, मैं यह नहीं देखता कि मैं जो करना चाहता हूँ उसे हासिल नहीं किया जा सकता ...
मेरे पास दो इमेज डेटासेट हैं जहां एक में आकृति की छवियां हैं (480, 720, 3), जबकि दूसरे में आकृति की छवियां (540, 960, 3) हैं।
मैंने निम्नलिखित कोड का उपयोग करते हुए एक मॉडल शुरू किया:
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'])
अब जब मैंने इस मॉडल को पूर्व डेटासेट पर प्रशिक्षित कर दिया है, तो मैं इनपुट टेनसर लेयर को बंद करना चाहता हूं और नए इनपुट टेंसर के साथ मॉडल को एक आकार के साथ तैयार करना चाहता हूं जो बाद के डेटासेट के छवि आयामों से मेल खाता है।
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')
जो इस त्रुटि को जन्म देता है:
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'
मेरे द्वारा लिंक किए गए पोस्ट में, maz बताता है कि एक आयाम बेमेल है जो एक मॉडल की इनपुट परत को बदलने से रोकता है - यदि यह मामला था, तो यह कैसे है कि मैं एक (480, 720, 3) इनपुट परत को सामने रखता हूं वीजीजी 16 मॉडल से (224, 224, 3) छवियों की उम्मीद है?
मुझे लगता है कि अधिक संभावना मुद्दा यह है कि मेरे पूर्व मॉडल का आउटपुट इस पोस्ट में fchollet क्या कह रहा है, इसके आधार पर मैं जो कुछ दे रहा हूं, उससे कुछ अलग की उम्मीद है । मैं वाक्यात्मक रूप से भ्रमित हूं, लेकिन मेरा मानना है कि पूरा x = Layer()(x)
खंड इनपुट-> आउटपुट से परत के टुकड़े का निर्माण कर रहा है और बस एक अलग इनपुट को सामने फेंक रहा है।
मैं वास्तव में कोई पता नहीं है, हालांकि ...
क्या कोई मुझे बता सकता है कि मैं कैसे पूरा करने की कोशिश कर रहा हूं या नहीं, अगर यह संभव नहीं है, तो मुझे समझाएं कि क्यों नहीं?