在tensorflow图构造中没有形状错误,但在图计算中得到形状不匹配错误

在tensorflow图构造中没有形状错误,但在图计算中得到形状不匹配错误,tensorflow,invalid-argument,Tensorflow,Invalid Argument,在tensorflow图形构造中没有出现错误,但是在tf.gradients中的图形计算过程中,我得到了一个形状不匹配错误(我猜错误是在反向传播中) 这是我得到的错误: InvalidArgumentError(回溯见上文): 重塑的输入是一个具有16777216个值的张量,但请求的形状有4096个 [[Node:gradients/truediv_grad/Reforme=Reforme[T=DT_FLOAT,Tshape=DT_INT32,_device=“/job:localhost/re

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

这是我得到的错误:

InvalidArgumentError(回溯见上文):
重塑的输入是一个具有16777216个值的张量,但请求的形状有4096个
[[Node:gradients/truediv_grad/Reforme=Reforme[T=DT_FLOAT,Tshape=DT_INT32,_device=“/job:localhost/replica:0/task:0 /设备:GPU:0“](渐变/truediv_渐变/总和,渐变/truediv_渐变/形状)]]


我用两种方法解决了这个问题:

1.显然,如果您正在创建自定义操作和渐变,则需要非常明确地使用
set\u shape
tf.reformate
向tensorflow提供形状信息

2.同样,当您使用
tf.register_gradient
注册渐变时,需要小心链接渐变,即
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))

你能不能编一个片段来重现这个问题?