2017-07-05 13 views
2

4クラスタスクと10クラスタスクの予測を行う同じネットワークによって生成される2つの出力を結合しようとしています。次に、これらの出力を組み合わせて、私が最終目標として使用する長さ14の配列を与えます。Keras - 1つのニューラルネットワークから2つの予測を作成

これは積極的に働いているようですが、予測は常に1つのクラスのため、2の代わりに14のオプションのうち1つを選択することに関連する確率distを生成します。実際には2予測、各クラスに1つ。私はこのすべてが同じモデルによって生産されることを望みます。

input = Input(shape=(100, 100), name='input') 
lstm = LSTM(128, input_shape=(100, 100)))(input) 

output1 = Dense(len(4), activation='softmax', name='output1')(lstm) 
output2 = Dense(len(10), activation='softmax', name='output2')(lstm) 

output3 = concatenate([output1, output2]) 

model = Model(inputs=[input], outputs=[output3]) 

私の問題は、適切な損失機能と予測方法を決定することです。予測のために、softmaxの後に各レイヤーの出力を単純に取り込むことができますが、これらの訓練を行うためにどのように損失関数を設定するかはわかりません。

アイデア?

どうもありがとう

答えて

5

あなたは出力を連結する必要はありません、あなたのモデルは、2つの出力持つことができます。このモデルを訓練するためにその後

input = Input(shape=(100, 100), name='input') 
lstm = LSTM(128, input_shape=(100, 100)))(input) 

output1 = Dense(len(4), activation='softmax', name='output1')(lstm) 
output2 = Dense(len(10), activation='softmax', name='output2')(lstm) 

model = Model(inputs=[input], outputs=[output1, output2]) 

を、あなたは一般的に加重されている2つの損失を使います

model.compile(optimizer='sgd', loss=['categorical_crossentropy', 
       'categorical_crossentropy'], loss_weights=[0.2, 0.8]) 

各入力サンプルは2つの出力ラベル付きサンプルに対応するので、データを正しくフォーマットするようにしてください。詳細については、Functional API Guideを参照してください。

+0

Ah!ありがとうございました。私はこれを行うためのかなり簡単な方法がなければならないと考えました。だから私はmodel.predictを実行すると、これらのそれぞれの出力が得られるはずですか? – tryingtolearn

+0

@tryingtolearnはい、それぞれの入力に対して2つの出力が得られます。 –

関連する問題