私の質問は、例えば、tf.slice
を使用している場合、バックプロパゲーションパスがどのように決定されるかです。Tensorflowでは、カスタム操作で勾配が正しいかどうかをどのように確認できますか?
例を挙げておきます。 K-分類問題があるとしましょう。私はこの場合、
conv1 = # conv1+relu1+lrm1+pool1
conv2 = # from conv1
fc1 = # from conv2 to 128D fully connected + relu
fc2 = # from fc2 to K-D fully connected
batch_loss = tf.softmax_cross_entropy(fc2, labels)
loss = tf.reduce_mean(batch_loss)
... minimize(loss)
のような標準的な方法でこれを行うことができ、loss
の勾配は、それぞれの重みにbackpropagateます。
さんが言ってみましょう、私は(私は、あるクラスがより重要だと思うかもしれないので、?)labels
とfc2
出力をスライスして、カスタム損失値をcalcuatedこの場合
label_sub = tf.slice(labels, ..)
output_sub = tf.slice(fc2, ..)
batch_loss_sub = tf.softmax_cross_entropy(output_sub, label_sub)
loss = tf.reduce_mean(batch_loss + batch_loss_sub)
... minimize(loss)
、私はどのようにバックになっておりません伝播はうまくいくだろう。 「スライス」から、私たちは逆行経路を失いませんでしたか?
これは奇妙な擬似コードかもしれませんが、私の質問は「tp.sliceを使用すると、どのようにバックプロパゲーションが機能するのですか?