在TensorFlow中实施对抗性训练

Sha*_*wen 6 neural-network tensorflow

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

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

具体来说,我遇到了麻烦 部分.在我的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));
Run Code Online (Sandbox Code Playgroud)

可能相关:

tf.stop_gradient(输入,名称=无)

停止渐变计算.

......还有更多的东西......

  • 对抗性训练,通过对抗性示例生成过程不会发生反向训练.

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

Ian*_*low 6

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

output = model.fprop(input_tensor)
Run Code Online (Sandbox Code Playgroud)

要么

output = model.fprop(input_tensor, params)
Run Code Online (Sandbox Code Playgroud)

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

raw_output = model.fprop(clean_examples)
adv_examples = ...
adv_output = model.fprop(adv_examples)
Run Code Online (Sandbox Code Playgroud)

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