2016-11-06 9 views
2

私は多くの出力を持つKerasにネットワークを持っていますが、私のトレーニングデータは一度に1つの出力についての情報しか提供しません。Kerasでネットワークの出力を1つだけトレーニング

私の訓練の方法は、問題の入力に対して予測を実行することでした。私が訓練している出力の値を変更してから、一度のバッチ更新を行いました。私が正しいとすれば、これは、私が鍛えようとしているものを除いて、すべてのアウトプットの損失をゼロに設定することと同じです。

良い方法がありますか?私はクラスウェイトを試しましたが、私はトレーニング以外にもすべてのウェイトウェイトを設定しましたが、私が期待した結果は得られませんでしたか?

私はTheanoバックエンドを使用しています。

+0

。いくつかのサンプルデータを表示し、この設定が得られた理由を説明してください。 – sascha

+0

Deep Q-Learningに使用しています。入力は状態であり、各出力はアクションのスコアです。アクションを選択し、そのアクションの結果に基づいてネットワークを更新します。ただし、他のアクションの結果がわからないので、1つの出力を更新するだけです... – simeon

+1

私は参照してください。これは別の方法で処理されます。 [これらの情報源](https://gist.github.com/EderSantana/c7222daa328f0e885093#file-qlearn-py-L98)を見てください(リンクの行に印を付けました)。あなたは他のアクションの現在の値を保持します! – sascha

答えて

0

これを達成するために、私は 'Functional API'を使用しました。基本的には、入力レイヤーと非表示レイヤーは同じレイヤーで、出力レイヤーは異なる複数のモデルを作成します。例えば

:監督・学習のための珍しい設定だ

https://keras.io/getting-started/functional-api-guide/

from keras.layers import Input, Dense 
from keras.models import Model 

# This returns a tensor 
inputs = Input(shape=(784,)) 

# a layer instance is callable on a tensor, and returns a tensor 
x = Dense(64, activation='relu')(inputs) 
x = Dense(64, activation='relu')(x) 
predictions_A = Dense(1, activation='softmax')(x) 
predictions_B = Dense(1, activation='softmax')(x) 

# This creates a model that includes 
# the Input layer and three Dense layers 
modelA = Model(inputs=inputs, outputs=predictions_A) 
modelA.compile(optimizer='rmsprop', 
       loss='categorical_crossentropy', 
       metrics=['accuracy']) 
modelB = Model(inputs=inputs, outputs=predictions_B) 
modelB.compile(optimizer='rmsprop', 
       loss='categorical_crossentropy', 
       metrics=['accuracy']) 
関連する問題