2017-03-06 36 views
1

モデル出力テンソルを分析する必要があるカスタマイズされた正規化器があります。基本的に私はこのように置くことはできません。後でケラス層の属性を設定する

model = Sequential() 
model.add(Dense(128, name="dense_1", W_regularizer=Custom(0.1))) 
model.add(Dense(nb_classes, name='dense_2')) 
model.compile(loss='mse', optimizer='adam') 
model.fit(..) 

カスタム関数がターゲットラベルテンソルを必要とし、残念なことにそのようなテンソルはまだ実装されていません。

私はまた、このような層の属性を設定しよう:私はそれが正しく適用されてきたが、トレーニング中に動作していないようで見るような層の

model.add(Dense(128, name="dense_1")) 
model.get_layer('dense_1').W_regularizer = Custom(0.1) 

get_config()を。または、おそらくこの方法は実装するための賢明な方法ではありません。

答えて

0

このように変更するには、モデルを再コンパイルする必要があります。これは、コンパイルプロセスが後で最小化されるトレーニング関数を生成するためです。トレーニング機能を変更するには、もう一度コンパイルする必要があります。

ちょうどあなたの変更後の

model.compile(...) 

を呼び出し、それはあなたがそれが動作するように期待するように動作しなければなりません。

+0

このように正しいジョブを実行することはできません。ああ..私は編集中です(待つ) –

+0

私の現在の調査結果をコメントに入れてください。手伝ってくれてありがとう! –

0

おかげ@Thomas、私が試み、再コンパイルが、予想通り

iは、以下の方法を試みた(以下に示す最初のもののように)動作しない..
1)直接ワーク(指定)

#put inf number here for testing 
x = Dense(128,name="dense_1", W_regularizer = l2(1E300)) 
model.add(x) 
... 
model.compile(...) 
topology.layerで add_weight(それが動作)を使用して)

x = Dense(128,name="dense_1") 
model.add(x) 
x.W_regularizer = l2(1E300) 
... 
model.compile(...) 

3)その後属性を設定し、コンパイル(動作していない

2) 1のため

x = Dense(128,name="dense_1") 
model.add(x) 
x.W = x.add_weight((x.input_dim, x.output_dim), 
       initializer='zero', 
       name='{}_W'.format(x.name), 
       constraint=x.W_constraint, 
       regularizer=l2(1E300)) 
model.compile(...) 

)3)私は変更が適用され成功し、3)私が欲しいものであることを意味するloss: nanを得ました。もう1つはしません。達成するためには賢明な方法が必要です。

関連する問題