【发布时间】:2021-03-10 13:52:46
【问题描述】:
我创建了一个模型并进行了拟合,如下所示。我也跟着Keras official docs 保存和加载了模型。
c1 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(inputs)
c1 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c1)
p1 = tf.keras.layers.MaxPooling2D((2, 2))(c1)
c2 = tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(p1)
c2 = tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c2)
u3 = tf.keras.layers.Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same')(c2)
u3 = tf.keras.layers.concatenate([u3, c1], axis=3)
c3 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(u3)
c3 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c3)
outputs = tf.keras.layers.Conv2D(1, (1, 1), activation='linear')(c3)
model = tf.keras.Model(inputs=[inputs], outputs=[outputs])
model.compile(optimizer='ADAM', loss='mean_squared_error', metrics=['mae'])
model.save('my_model')
model.save_weights('my_model_weights.h5')
history = model.fit(
train_generator,
steps_per_epoch=train_steps,
epochs=epochs,
validation_data=validation_generator,
validation_steps=valid_steps)
我知道保存的模型和权重可以如下加载:
model.load_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5', by_name=True)
如果我想进行迁移学习并将保存的模型和权重应用于相同的架构但使用不同的数据,应该怎么做?
错误:
AttributeError Traceback (most recent call last)
<ipython-input-16-e5ee0aa441fb> in <module>
1 # Loading saved model
----> 2 new_model = tf.keras.load_model('my_model')
3 # New model using the same architecture, but without loading it
4 new_model_bis = tf.keras.Model(inputs=[inputs], outputs=[outputs])
5 new_model_bis.compile(optimizer='ADAM', loss='mean_squared_error', metrics=['mae'])
AttributeError: module 'tensorflow.keras' has no attribute 'load_model'
【问题讨论】:
标签: python tensorflow keras transfer-learning