tensorflow训练时报错:Gradients do not exist for variables问题解决

今天在使用tensorflow内容的时候,发现训练的过程之中出现相应的报错

WARNING:tensorflow:Gradients do not exist for variables ['bert/transformer_0/attention/query/kernel:0', 'bert/transformer_0/attention/query/bias:0', 'bert/transformer_0/attention/key/kernel:0', 'bert/transformer_0/attention/key/bias:0', 'bert/transformer_0/attention/value/kernel:0', 'bert/transformer_0/attention/value/bias:0', 'bert/transformer_1/attention/query/kernel:0'...]

经过仔细地排查,发现问题如下:
输入的时候使用

def call(self,inputs,**kwargs):
	input_ids,segment_ids = inputs[0],inputs[1]
	...

返回的时候仍然返回对应的内容

return inputs[0]

导致中间的操作比如

query = self.query_layer(input_ids)
key = self.key_layer(input_ids)
value = self.value_layer(input_ids)

都变成了无用的操作,因此这些比如’query/kernel:0’,‘query/bias:0’,‘key/kernel:0’,‘key/bias:0’,‘value/kernel:0’,'value/bias:0’的参数都不存在相应的梯度了,最终会报错
修改方法:这里需要将对应的return值修改一下
经过一番操作之后得到

context_layer = tf.reshape(context_layer,output_shape)

最后返回对应的call最终得到的值

return context_layer

即可

你可能感兴趣的:(深度学习函数学习)