在 Keras 中使用 get_variable 创建自定义初始值设定项时出错
Error in creating custom initializer using get_variable with Keras
我用 Keras 创建了一个自定义初始化器。部分代码为:
def my_init(shape):
P = tf.get_variable("P", shape=shape, initializer = tf.contrib.layers.xavier_initializer())
return P
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),strides=(1, 1), padding='same', input_shape = input_shape, kernel_initializer = my_init))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, kernel_size=(1, 1) , strides=(1, 1) , padding='same' , kernel_initializer = my_init))
当在卷积层中第二次调用 "my_init" 初始化程序时,它会抛出此错误:
Variable P already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:
不允许重复使用变量P。有没有办法在每次调用时创建一个新变量?
您可以尝试使用 Keras 中可用的 Xavier 初始化程序,名称为 glorot_uniform
和 glorot_normal
。
在这里查看:https://keras.io/initializers/
model.add(Conv2D(32, kernel_size=(1, 1) , strides=(1, 1) ,
padding='same' , kernel_initializer =keras.initializers.glorot_uniform())
我用 Keras 创建了一个自定义初始化器。部分代码为:
def my_init(shape):
P = tf.get_variable("P", shape=shape, initializer = tf.contrib.layers.xavier_initializer())
return P
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),strides=(1, 1), padding='same', input_shape = input_shape, kernel_initializer = my_init))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, kernel_size=(1, 1) , strides=(1, 1) , padding='same' , kernel_initializer = my_init))
当在卷积层中第二次调用 "my_init" 初始化程序时,它会抛出此错误:
Variable P already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:
不允许重复使用变量P。有没有办法在每次调用时创建一个新变量?
您可以尝试使用 Keras 中可用的 Xavier 初始化程序,名称为 glorot_uniform
和 glorot_normal
。
在这里查看:https://keras.io/initializers/
model.add(Conv2D(32, kernel_size=(1, 1) , strides=(1, 1) ,
padding='same' , kernel_initializer =keras.initializers.glorot_uniform())