【问题标题】:Implementing Adversarial Training in TensorFlow在 TensorFlow 中实施对抗训练
【发布时间】:2016-03-29 17:17:55
【问题描述】:

我想为我的神经网络实现以下成本函数:

这利用神经网络的对抗性输入来改进泛化[ref]

具体来说,我遇到了问题 部分。 在我的 TensorFlow 图中,我将 定义为一个操作。我怎样才能用 以外的参数来喂?

到目前为止,我发现这样做的唯一方法是定义一个并行网络,它与我的原始网络共享权重,并在其feed_dict 参数中传递。如果可能的话,我想避免重新定义我的整个网络。我该怎么做?


我的 TensorFlow 模型写成:

x = tf.placeholder(tf.float32, [None, 32, 32]);
... # A simple neural network
y = tf.add(tf.matmul(h, W1), b1);
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y, t));

可能相关:

tf.stop_gradient(input, name=None)

停止梯度计算。

...还有很多东西...

  • 对抗性训练,在对抗性示例生成过程中不应发生反向传播。

https://www.tensorflow.org/versions/r0.7/api_docs/python/train.html#stop_gradient

【问题讨论】:

  • 你的模型代码是怎么写的?您是否有一个模型类的方法可以在给定一些张量的情况下构建 fprop 图?或者您是否正在使用一些与 TensorFlow 一起发布的现有代码?
  • 更新了原始问题以反映模型的定义。
  • @Shadowen,我也需要这样做,你能分享你的代码吗?

标签: neural-network tensorflow


【解决方案1】:

您需要以支持调用的方式编写模型

output = model.fprop(input_tensor)

output = model.fprop(input_tensor, params)

fprop 方法两次构建相同的前向传播表达式,但每次调用使用不同的输入张量:

raw_output = model.fprop(clean_examples)
adv_examples = ...
adv_output = model.fprop(adv_examples)

如果您想将此应用到我们的一个开源模型并且它不支持执行此操作的接口,请在 github 上提交问题。

【讨论】:

  • 于是又看了几遍,发现this example中,model-builder被提取为一个函数,基本上可以多次构建模型(几乎相同)。这是你的意思吗?
  • 是的,创建一个函数(或模型类的方法),在给定输入张量的情况下构建 fprop 图。然后在占位符或任何合适的张量上调用函数。
  • 好的,所以这确实需要在 TensorFlow 计算图上构建“两个网络”。我认为这是必要的,因为每次通过计算图时,每个张量可能只有一个值(以便 TensorFlow 可以执行反向传播等)?
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 2017-11-28
  • 2016-03-09
  • 2016-10-30
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多