我想从头开始重新训练 Keras 模型 Inception_v3。
该模型在这里定义: https ://github.com/keras-team/keras-applications/blob/master/keras_applications/inception_v3.py
看了一些帖子,
列出的解决方案是:
冻结图层(这不是我想要的......)
for layer in model.layers:
layer.trainable = False
https://stackoverflow.com/a/51727616/7748163
通过检查初始化器来重置所有层:
def reset_weights(model):
session = K.get_session()
for layer in model.layers:
if hasattr(layer, 'kernel_initializer'):
layer.kernel_initializer.run(session=session)
if hasattr(layer, 'bias_initializer'):
layer.bias_initializer.run(session=session)
采用tf.variables_initializer
model = InceptionV3()
for layer in model.layers:
sess.run(tf.variables_initializer(layer.weights))
参考:https ://stackoverflow.com/a/56634827/7748163
我认为最好的一个,但它引发了一个错误。
sess = tf.Session()
for layer in model.layers:
for v in layer.__dict__:
v_arg = getattr(layer,v)
if hasattr(v_arg,'initializer'):
initializer_method = getattr(v_arg, 'initializer')
initializer_method.run(session=sess)
print('reinitializing layer {}.{}'.format(layer.name, v))
但是,它们都不适用于 Inception_v3。
错误信息适用于 BatchNorm 层:
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable batch_normalization_9/moving_mean from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/batch_normalization_9/moving_mean/N10tensorflow3VarE does not exist.
[[{{node batch_normalization_9_1/AssignMovingAvg/ReadVariableOp}}]]
[[metrics_1/categorical_accuracy/Identity/_469]]
那么,如何重新训练现有的 Keras 模型,并初始化变量呢?从 Keras 应用程序重新训练模型的最佳实践是什么?
进一步讨论:
https://github.com/keras-team/keras/issues/341
牛魔王的故事
哆啦的时光机
随时随地看视频慕课网APP
相关分类