2017-09-25 7 views
1

Kerasでカスタムイニシャライザを作成しました。コードの一部は次のとおりです。Kerasでget_variableを使用してカスタムイニシャライザを作成する際にエラーが発生しました

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を再利用することができますされていません各呼び出しで新しい変数を作成する方法はありますか?

+0

あなたは 'K.variable(...を)'試みることができます。それは名前を必要としません。 --- 'keras.backend as K'をインポートします。 –

+0

tensorflow(tf.contrib.layers.xavier_initializer())で使用できる "xavier"初期化子を使用する必要がありますが、k.variableはxavier初期化子を呼び出すことができません。 – Darshi

答えて

1

Kerasで利用可能なXavierイニシャライザを、glorot_uniformglorot_normalという名前で試してみることができます。

は、ここではそれらを参照してください:https://keras.io/initializers/

model.add(Conv2D(32, kernel_size=(1, 1) , strides=(1, 1) , 
      padding='same' , kernel_initializer =keras.initializers.glorot_uniform()) 
関連する問題