重新初始化神经网络权重时,Google colab找不到keras.engine

时间:2019-03-20 01:07:48

标签: python tensorflow keras neural-network google-colaboratory

我需要创建一个具有少量节点的简单神经网络模型,对其进行训练,然后评估结果中已经训练好的网络中的某些参数。

我需要重复几次(> 100)。因此,我只想重新初始化权重,而不是每次都创建一个新模型。

这是我的代码中有问题的部分:

 import tensorflow as tf
 from tensorflow import keras
 from keras import backend as K

 def reinitLayers(model):
     session = K.get_session()
     for layer in model.layers: 
         if isinstance(layer,keras.engine.network.Network):
             reinitLayers(layer)
....

这就是我得到的:

 "module 'tensorflow._api.v1.keras' has no attribute 'engine'"

但是存在keras.engine: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python/keras/engine

这个问题非常相似: AttributeError: module 'keras.engine' has no attribute 'input_layer' 但是,那里的答案对我没有帮助。

这里描述了相同的问题,但是那里的线程也没有帮助: https://github.com/keras-team/keras/issues/341

2 个答案:

答案 0 :(得分:0)

您是否可以重新调整权重并使用它们而不是像https://github.com/keras-team/keras/issues/341中所述重新初始化?这是什么问题?

更新

我运行了以下代码

def reinitLayers(model):
    session = K.get_session()
    for layer in model.layers: 
        if isinstance(layer, keras.engine.network.Network):
            reinitLayers(layer)
            continue
        print("LAYER::", layer.name)
        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=session)
                print('reinitializing layer {}.{}'.format(layer.name, v))

(在https://github.com/keras-team/keras/issues/341#issuecomment-423637768提供)在Google colab。无论有没有GPU,它都可以工作,而且我能够重新初始化网络。换句话说,我无法重现您的错误。仔细检查您是否使用了此代码,然后尝试再次运行它。

答案 1 :(得分:0)

重新启动colab并再次运行对我有用