Tensorflow 1.14无梯度

2024-04-23 06:55:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图创建一个对cnn的攻击,下面的例子是[here][1]。https://www.anishathalye.com/2017/07/25/synthesizing-adversarial-examples/

他们的笔记本在我的系统上运行,没有任何问题。你知道吗

我想攻击我自己的网络,而不是加载Inception。为了简单起见,我先在同一个笔记本上训练网络:

tf.reset_default_graph()

x = tf.placeholder(tf.float32, shape=(None, *img_shape), name='input')
y =  tf.placeholder(tf.float32, shape=(None, total_labels), name='output')
keep_prob = tf.placeholder(tf.float32, name='keep_prob')

logits = conv_net(x, keep_prob, total_labels) # some standard cnn architecture is used

cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=y)
cost = tf.reduce_mean(cross_entropy)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

到目前为止还不错。网络是用

sess.run(optimizer, feed_dict={x: feature_batch, y: label_batch, keep_prob: keep_probability})

现在我想通过在图像上训练覆盖来创建攻击:

overlay = tf.Variable(tf.zeros(1, *img_shape), name='Overlay')
assign_op = tf.assign(overlay, x)
loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=y)
optim = tf.train.GradientDescentOptimizer(0.0001).minimize(loss, var_list=[overlay])

我的理解是,上面的代码将可训练变量overlay分配给我的输入占位符x,作为我的网络的输入,然后根据网络预测计算损失,优化器将损失最小化。通过传递var_list,我告诉优化器“嘿,你在训练overlay,你看不清楚。”

但是,这不起作用并引发以下错误:

ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables ["<tf.Variable 'Overlay:0' shape=(1, 55, 65, 1) dtype=float32_ref>"] and loss Tensor("softmax_cross_entropy_with_logits_3/Reshape_2:0", shape=(?,), dtype=float32).

很明显,我在这里遗漏了一些步骤/理解。我没有看到源笔记本做任何其他事情。你知道吗


Tags: name网络labelstf笔记本placeholderentropyshape
1条回答
网友
1楼 · 发布于 2024-04-23 06:55:48

占位符不是可训练的,渐变不会通过占位符传播。如果我是你,我会尝试下一个工作流程:通过varaible将数据传输到网络。你知道吗

x = tf.placeholder(size)
x_var = tf.Variable(same_size)
assign = tf.assign(x_var, x)
logits = conv_net(x_var)
...
sess.run(assign, data)
sess.run(minimize) 
# not sure, if it would work in a single sess.run([assign, minimize], data)

相关问题 更多 >