我注意到,在层内分配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
如果仍然失败,请在此处发布完整的错误堆栈和版本信息。