如何初始化现有 Keras 模型的变量?

我想从头开始重新训练 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


牛魔王的故事
浏览 317回答 1
1回答

哆啦的时光机

为什么不简单地不要求重量?model = Inception_V3(..., weights=None,...)https://github.com/keras-team/keras-applications/blob/master/keras_applications/inception_v3.py/#L100
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python