0
我想通过传递损失和使用渐变更新权重来使用tf.gradient计算渐变。我发现当权重矩阵的维数很大时,梯度为零。这可能是什么原因?如何解决具有大权重矩阵维的张量流梯度问题?
我看到代码中没有错误。我得到具有较小权重矩阵和输入矢量大小的非零梯度。通常对于1 * 100的输入矢量大小和100x50的权重,FP值将是1 x 50.并且在BP期间ip将是1 x 50并且权重将是50 x 100。BP矢量将是1 x 100。
损失是正向(FP)和反向传播(BP)值之差的总和。 FP值是输入矢量(IP)-sigmoid(IP x权重)和BP值-sigmoid(FP x weight.Transpose)。
var_grad = tf.gradients(loss, [weight_matrix])[0]
update = tf.subtract(weight_matrix,(tf.mul(var_grad,0.1)))
我打电话的TF图如下
result,cost,gradient = sess.run([update,loss,var_grad], feed_dict={weight_matrix: weight_mat})
正向传播值
w = tf.matmul(final,weight)
sig = tf.sigmoid(w)
损失计算为
for i in range(len(PopulatedList)):
branch = PopulatedList[i]
RC_FP = branch['RC_FP']
RC_BP = branch['RC_BP']
LC_FP = branch['RC_FP']
LC_BP = branch['LC_BP']
loss = tf.reduce_sum(tf.squared_difference(RC_FP_TF,RC_BP_TF),[0, 1]) + tf.reduce_sum(tf.squared_difference(LC_FP_TF,LC_BP_TF),[0, 1])
out_error.append(loss)
error = tf.reduce_sum(out_error)
return error