2017-05-29 66 views
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 

回答

0

没有什么似乎错在你的代码,所以哇你看到的可能是你如何初始化你的权重的结果。

相关问题