勾配を計算する必要がある顧客操作を実装しています。機能は次のとおりです。
def difference(prod,box):
result = tf.Variable(tf.zeros((prod.shape[0],box.shape[1]),dtype=tf.float16))
for i in tf.range(0,prod.shape[0]):
for j in tf.range(0,box.shape[1]):
result[i,j].assign((tf.reduce_prod(box[:,j])-tf.reduce_prod(prod[i,:]))/tf.reduce_prod(box[:,j]))
return result
ボックスに関するグラデーションを計算できません。tape.gradient() は None を返します。グラデーションを計算するために作成したコードは次のとおりです。
prod = tf.constant([[3,4,5],[4,5,6],[1,3,3]],dtype=tf.float16)
box = tf.Variable([[4,5],[5,6],[5,7]],dtype=tf.float16)
with tf.GradientTape() as tape:
tape.watch(box)
loss = difference(prod,box)
print(tape.gradient(loss,box))
接続されていないグラデーションの理由を見つけることができません。結果変数が原因ですか?代替の実装を親切に提案してください。