张量流梯度
Tensorflow gradients
我正在尝试调整 tf DeepDream 教程代码以适用于其他模型。现在当我打电话给 tf.gradients():
t_grad = tf.gradients(t_score, t_input)[0]
g = sess.run(t_grad, {t_input:img0})
我遇到类型错误:
TypeError: Fetch argument None of None has invalid type <type 'NoneType'>,
must be a string or Tensor. (Can not convert a NoneType into a Tensor or
Operation.)
我应该从哪里开始寻找修复此错误的方法?
是否可以将 tf.gradients() 与包含优化器的模型一起使用?
我猜你的 t_grad
有一些 None
。 None
在数学上等同于 0 梯度,但是 return 用于特殊情况,即成本不依赖于它被微分的参数。我们不只是 return 0 而不是 None
有多种原因,您可以在讨论 here
中看到
因为None
在上面的情况下或者计算二阶导数时会很烦人,所以我使用下面的辅助函数
def replace_none_with_zero(l):
return [0 if i==None else i for i in l]
以下是调试的有用提示tf.gradients()
对于一对无效的张量:
grads = tf.gradients(<a tensor>, <another tensor that doesn't depend on the first>)
甚至在您尝试 运行 tf.gradients
之前,您可以使用 print
看到它无效
print grads
它将 return [None]
一个包含单个 None
的列表。
如果您尝试在会话中 运行 它:
results = sess.run(grads)
您不会再次收到 None
,而是收到问题中描述的错误消息。
对于一对有效的张量:
grads = tf.gradients(<a tensor>, <a related tensor>)
print grads
你会得到类似的东西:
Tensor("gradients_1/sub_grad/Reshape:0", dtype=float32)
在有效情况下:
results = sess.run(grads, {<appropriate feeds>})
print results
你会得到类似
的东西
[array([[ 4.97156498e-06, 7.87349381e-06, 9.25197037e-06, ...,
8.72526925e-06, 6.78442757e-06, 3.85240173e-06],
[ 7.72772819e-06, 9.26370740e-06, 1.19129227e-05, ...,
1.27088233e-05, 8.76379818e-06, 6.00637532e-06],
[ 9.46506498e-06, 1.10620931e-05, 1.43903117e-05, ...,
1.40718612e-05, 1.08670165e-05, 7.12365863e-06],
...,
[ 1.03536004e-05, 1.03090524e-05, 1.32107480e-05, ...,
1.40605653e-05, 1.25974075e-05, 8.90011415e-06],
[ 9.69486427e-06, 8.18045282e-06, 1.12702282e-05, ...,
1.32554378e-05, 1.13317501e-05, 7.74569162e-06],
[ 5.61043908e-06, 4.93397192e-06, 6.33513537e-06, ...,
6.26539259e-06, 4.52598442e-06, 4.10689108e-06]], dtype=float32)]
我正在尝试调整 tf DeepDream 教程代码以适用于其他模型。现在当我打电话给 tf.gradients():
t_grad = tf.gradients(t_score, t_input)[0]
g = sess.run(t_grad, {t_input:img0})
我遇到类型错误:
TypeError: Fetch argument None of None has invalid type <type 'NoneType'>,
must be a string or Tensor. (Can not convert a NoneType into a Tensor or
Operation.)
我应该从哪里开始寻找修复此错误的方法?
是否可以将 tf.gradients() 与包含优化器的模型一起使用?
我猜你的 t_grad
有一些 None
。 None
在数学上等同于 0 梯度,但是 return 用于特殊情况,即成本不依赖于它被微分的参数。我们不只是 return 0 而不是 None
有多种原因,您可以在讨论 here
因为None
在上面的情况下或者计算二阶导数时会很烦人,所以我使用下面的辅助函数
def replace_none_with_zero(l):
return [0 if i==None else i for i in l]
以下是调试的有用提示tf.gradients()
对于一对无效的张量:
grads = tf.gradients(<a tensor>, <another tensor that doesn't depend on the first>)
甚至在您尝试 运行 tf.gradients
之前,您可以使用 print
print grads
它将 return [None]
一个包含单个 None
的列表。
如果您尝试在会话中 运行 它:
results = sess.run(grads)
您不会再次收到 None
,而是收到问题中描述的错误消息。
对于一对有效的张量:
grads = tf.gradients(<a tensor>, <a related tensor>)
print grads
你会得到类似的东西:
Tensor("gradients_1/sub_grad/Reshape:0", dtype=float32)
在有效情况下:
results = sess.run(grads, {<appropriate feeds>})
print results
你会得到类似
的东西[array([[ 4.97156498e-06, 7.87349381e-06, 9.25197037e-06, ...,
8.72526925e-06, 6.78442757e-06, 3.85240173e-06],
[ 7.72772819e-06, 9.26370740e-06, 1.19129227e-05, ...,
1.27088233e-05, 8.76379818e-06, 6.00637532e-06],
[ 9.46506498e-06, 1.10620931e-05, 1.43903117e-05, ...,
1.40718612e-05, 1.08670165e-05, 7.12365863e-06],
...,
[ 1.03536004e-05, 1.03090524e-05, 1.32107480e-05, ...,
1.40605653e-05, 1.25974075e-05, 8.90011415e-06],
[ 9.69486427e-06, 8.18045282e-06, 1.12702282e-05, ...,
1.32554378e-05, 1.13317501e-05, 7.74569162e-06],
[ 5.61043908e-06, 4.93397192e-06, 6.33513537e-06, ...,
6.26539259e-06, 4.52598442e-06, 4.10689108e-06]], dtype=float32)]