【发布时间】:2020-04-07 22:18:22
【问题描述】:
我正在尝试准备一个示例笔记本,用于展示如何按照this tutorial 在 TensorFlow 2.x 中创建对抗性示例。
我已经能够移植其中的一些,但我现在遇到了ValueError: No gradients provided for any variable: ['Variable:0']. 的一个奇怪问题,似乎无法弄清楚原因。
这是我如何加载要为其创建对手的图像:
def preprocess_image(image_pixels):
# image_pixels = preprocess_input(image_pixels)
image_pixels = cv2.resize(image_pixels, (224, 224))
image_pixels = np.expand_dims(image_pixels, axis=0)
return image_pixels
# Load and preprocess image but a but without any preprocess_input
sample_image = show_image("pig.jpg")
preprocessed_image = preprocess_image(sample_image)
# Initialize the perturbation quantity
image_tensor = tf.convert_to_tensor(preprocessed_image, dtype=tf.float32)
delta = tf.Variable(tf.zeros_like(image_tensor), trainable=True)
这是我的训练循环的样子 -
for t in range(30):
inp = preprocess_input(image_tensor + delta)
with tf.GradientTape() as tape:
tape.watch(delta)
pred = resnet50(inp)
loss = - scc_loss(
tf.convert_to_tensor([341]),
pred
)
if t % 5 == 0:
print(t, loss.numpy())
# Get the gradients
gradients = tape.gradient(loss, delta)
# Update the weights
optimizer.apply_gradients([(gradients, delta)])
# Clip so that the delta values are within [0,1]
delta.assign(clip_eps(delta))
其中,preprocess_input 是 tf.keras.applications.resnet50,我的模型是预训练的 ResNet50。优化器定义为optimizer = tf.keras.optimizers.SGD(learning_rate=1e-1)。错误如下:
0 -0.00041249825
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-284-174284e3aea4> in <module>()
15
16 # Update the weights
---> 17 optimizer.apply_gradients([(gradients, delta)])
18
19 # Clip so that the delta values are within [0,1]
1 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in apply_gradients(self, grads_and_vars, name, experimental_aggregate_gradients)
472 ValueError: If none of the variables have gradients.
473 """
--> 474 grads_and_vars = _filter_grads(grads_and_vars)
475 var_list = [v for (_, v) in grads_and_vars]
476
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in _filter_grads(grads_and_vars)
1201 if not filtered:
1202 raise ValueError("No gradients provided for any variable: %s." %
-> 1203 ([v.name for _, v in grads_and_vars],))
1204 if vars_with_empty_grads:
1205 logging.warning(
ValueError: No gradients provided for any variable: ['Variable:0'].
这里是where,可以找到整个 Colab 笔记本。感谢任何帮助/指针。
【问题讨论】:
标签: python tensorflow keras