张量流图形结构中没有形状误差,但在图形计算过程中出现形状不匹配误差

时间:2018-03-17 12:26:14

标签: tensorflow invalid-argument

张量流图形构造中没有出现错误,但在tf.gradients中的图形计算过程中出现了形状不匹配错误(我猜错误是在反向传播中)。

这是我得到的错误:

  

InvalidArgumentError(参见上面的追溯):
  重塑的输入是一个具有16777216值的张量,但请求的形状有4096
  [[Node:gradients / truediv_grad / Reshape = Reshape [T = DT_FLOAT,Tshape = DT_INT32,_device =" / job:localhost / replica:0 / task:0       / device:GPU:0"](渐变/ truediv_grad / Sum,gradients / truediv_grad / Shape)]]

1 个答案:

答案 0 :(得分:0)

我使用两种技术解决了这个问题:

1.显然,如果您要创建自定义操作和渐变,则需要非常明确地使用set_shapetf.reshape

将形状信息提供给张量流

2.当您使用tf.register_gradient注册梯度时,将op和grad作为输入,在链接渐变时需要小心,dy/dx = dy/dz*dz/dx。 假设dy/dz是我们创建的自定义渐变,dz/dx是根据差异化链条规则的前一个操作的渐变。

tf.register_gradient(Mygrad)
def Mygrad(op,grad):
*****do stuff with op.inputs and calculate custom grads say cust_grad or dy/dz****
return cust_grad*grad

我将此更改为以下内容:

tf.register_gradient(Mygrad)
def Mygrad(op,grad):
*****do stuff with op.inputs and calculate custom grads say cust_grad or dy/dz****
return tf.matmul(tf.reshape(cust_grad,[calculated_shape]),tf.reshape(grad,expeced_shape))