我已经读过this question here的答案,tf.clip_by_global_norm()通过简单地忽略它们来处理无值(danijar在@danijar对答案的评论中评论)但是当我尝试应用它时我似乎做错了,因为它抛出
ValueError:不支持任何值。
tf.reset_default_graph()
z = tf.get_variable(name = 'z', shape = [1])
b = tf.get_variable('b', [1])
c = b*b - 2*b + 1
optimizer = tf.train.AdamOptimizer(0.1)
gradients, variables = zip(*optimizer.compute_gradients(c))
gradients = tf.clip_by_global_norm(gradients, 2.5)
train_op = optimizer.apply_gradients(zip(gradients, variables))
有人可以告诉我,我做错了什么,或者tf.clip_by_global_norm()不处理无渐变,我必须手动处理它们
官方文件似乎同意@ danijar的评论。见here
忽略任何类型为None的t_list条目。
答案 0 :(得分:1)
您的代码中存在一个小问题:当此函数返回一对值时,您将tf.clip_by_global_norm
的返回值分配给单个变量。
文档说:
返回:
list_clipped:与list_t相同类型的张量列表。
global_norm:表示全局范数的0-D(标量)张量。
因此,当您尝试将渐变应用于变量时,问题出现在下一行中。
您可以轻松修复代码,忽略global_norm返回值。
gradients, _ = tf.clip_by_global_norm(gradients, 2.5)