0
最終出力をポンピングする前に、確定的なマスキングを行うラムダレイヤを作成しようとしています(私はKerasマスキングレイヤについては言及していません)。Kerasカスタムラムダレイヤテンソル操作エラー
def binary_mask(x):
# Mask is half the size of x.
# 1 if pred1 > pred2 element-wise, 0 otherwise.
pred1, pred2 = tf.split(x, 2, 1)
mask = tf.greater(pred1, pred2)
mask = tf.to_float(mask)
return mask
def mask_output_shape(input_shape):
return (input_shape[0], units)
そして、これは私が機能APIでレイヤーを作成する方法である:これは私がこれまで持っているものである
outputs = Lambda(binary_mask, output_shape=mask_output_shape)(inputs)
私はオプティマイザから来る非常に奇妙なエラーを取得しています。私の勾配はNone
であるようです。
しかし、binary_mask
の現在のコードをLambda
のレイヤ実装のいずれかに置き換えると、正常に動作します。 return x
。私はここで間違って何をしていますか?
mask
が実際に有効なテンソルフローテンソルであることはかなり確信しています。
あなたは何を言っているのか分かります。しかし、私の目標出力は0と1のベクトルです。なぜそれはまだ問題になるのでしょうか? – jjiang
バックプロパゲーションを機能させるには、各層の出力を微分可能でなければなりません。その入力。一般に、あるレイヤーで微分不可能な操作を必要とする「アイデア」がある場合は、それをグラデーション計算のための「ソフトバージョン」に置き換えることができます。 –