2017-09-14 8 views
1

各エポック後にKerasでConv2Dレイヤのすべてのフィルタ(32,64など)のウェイトを取得するにはどうすればよいですか?初期の重みはランダムであるため、最適化後に変更されるため、これについて言及します。Conv2Dレイヤーフィルタウェイトを取得する方法

this answerを確認しましたが、わかりませんでした。すべてのフィルターの重み付けを、すべてのエポック後に解決する方法を見つけてください。

さらにもう1つの質問は、Conv2Dレイヤの入力シェイプが(サンプル、チャンネル、行、列)であることです。正確にはsamplesとは何ですか?それは私たちが持っている入力の総数ですか(MNISTデータセットでは60.000トレーニングイメージです)か、バッチサイズ(128など)ですか?

+1

あなたは正確に何を理解できませんでしたか?あなたは具体的にする必要があります。そうでなければ、重複した質問です。 –

+0

Conv2D(64、(3,3)、activation = 'relu')のようなレイヤーを持つkerasのモデルを作成しているとします。これはフィルターが64で、各フィルターのサイズが3 * 3であることを意味します。これらの64 * 3 * 3の値は、glorot_uniform initializerとし、次にmodel.compileでsgd optimizersを使用して初期化します。それでは、これらの64ファイルは新しい価値を達成するでしょう。私はこれらの新しい価値観を見たい。 – Hitesh

+1

私はそれを知っています。あなたがリンクした質問が答えを提供します。あなたは他の質問からあなたが理解していないことを説明していません。 –

答えて

2

サンプル=バッチサイズ=画像の数バッチ

Kerasでは、多くの場合、それは変わることができることを意味し、このディメンションにNoneを使用すると、あなたはそれを設定する必要はありません。この寸法は、実際にあなたがレイヤーを作成するとき、あなたはそれなしinput_shapeを渡し、存在するが

は:

Conv2D(64,(3,3), input_shape=(channels,rows,cols)) 
#the standard it (rows,cols,channels), depending on your data_format 

各エポック(またはバッチ)の後に行われたアクションを持っているために、あなたはLambdaCallbackを使用することができ、

#the function to call back 
def get_weights(epoch,logs): 
    wsAndBs = model.layers[indexOfTheConvLayer].get_weights() 
    #or model.get_layer("layerName").get_weights() 

    weights = wsAndBs[0] 
    biases = wsAndBs[1] 
    #do what you need to do with them 
    #you can see the epoch and the logs too: 
    print("end of epoch: " + str(epoch)) for instance 

#the callback 
from keras.callbacks import LambdaCallback 
myCallback = LambdaCallback(on_epoch_end=get_weights) 

峠トレーニング機能にこのコールバック:

機能を渡します
model.fit(...,...,... , callbacks=[myCallback]) 
+0

私はバッチサイズ= 128を使用しました。データセットは – Hitesh

+1

です。そうです。しかし、この次元で私たちは心配してはいけません。自動的に計算され、レイヤーに配置する必要はありません。 'Conv2D(filer、kernel_size、input_shape =(side1、side2、channels))'と ' –

関連する問題