2017-08-05 20 views
0

私はtheanoとkeras(theanoバックエンド)の両方でネットワークdense(10)-softmax-crossentropyを構築しました。 それぞれ計算グラフをダンプします。 theanoバージョン(図1では、この計算グラフは私が考えたものだった。 しかしkerasバージョン(図2)の上に、それは損失(crossentropy)の定義の後に計算を追加しているようだ。なぜ?ケラスは、損失機能の定義後に何をしますか?

してください損失計算、サンプルの重みと損失の重み後損失に適用され、Kerasで

Fig.1 Theano version

Fig.2 Keras(backend is Theano) version

答えて

0

..あなたが何をしているかを理解している人を教えています。スクリプトtraining.pyにこれらの行を参照してください。

  • 試料重量:

    score_array = K.mean(score_array, axis=list(range(weight_ndim, ndim))) 
        score_array *= weights 
        score_array /= K.mean(K.cast(K.not_equal(weights, 0), K.floatx())) 
    return K.mean(score_array) 
    
  • 損失重量:

    if total_loss is None: 
        total_loss = loss_weight * output_loss 
    

それは戻って、計算、グラフにこれらの行をマップするために簡単です。例えば、次のブロックがK.mean(K.cast(K.not_equal(weights, 0), K.floatx()))計算:

enter image description here

  • 最初のノードが他のすべてのノードは約K.mean(...)
    • 左分岐された第2のノードは、K.cast(..., K.floatx())
    • あるK.not_equal(weights, 0)
    • 計算しますバッチサイズを計算します(shapeと呼び、次元を取得します)。右分岐がテンソルの和
    • 除算を計算
    • )、そこから左のブランチの出力
  • によって右ブランチの出力は、このブロックの最終的な出力はスカラーK.mean(K.cast(K.not_equal(weights, 0), K.floatx()))
あります
関連する問題