Keras kernel_initializer必须封装在init_scope或可调用错误中



我注意到,在层内分配keras.initializer会导致一个错误,声称变量初始化程序必须封装在init_scope中或可调用。然而,我没有看到下面的用例与这里提供的示例有什么不同。有没有解决这个问题的方法,或者我在使用keras初始化程序时犯了一些明显的错误?

以下是我能想到的最简单的例子:

import tensorflow as tf
from keras.models import *
from keras.layers import *
from keras.optimizers import *
from tensorflow.keras import initializers
inputs_test=Input((512,512,3))
initializer_truncated_norm =  initializers.TruncatedNormal(mean=0, stddev=0.02)
deconv_filter = Conv2DTranspose(3, (2, 2), strides=(2, 2), padding='same', kernel_initializer=initializer_truncated_norm)(inputs_test)
model2 = Model(inputs=inputs_test, outputs=deconv_filter)
optimizer = Adam(lr=1e-4)
model2.compile(optimizer=optimizer, loss='mse')
model2.summary()

这是我在运行这样的功能时得到的确切错误

ValueError:张量类型的变量初始值设定项必须被包装在init_scope中或在构建函数时可调用(例如tf.Variable(lambda : tf.truncated_normal([10, 40]))(。请存档如果此限制给您带来不便,请发送功能请求。

我运行了您的示例,没有出现错误。tf==2.3.1, keras==2.4.0。还在Colab中用tf==2.0进行了尝试,结果再次正常。我建议你升级到最新的TF,然后再试一次。

同时将您的导入从from keras更改为from tensorflow.keras

如果仍然失败,请在此处发布完整的错误堆栈和版本信息。

最新更新