优化张量流

时间:2020-02-10 23:04:38

标签: tensorflow optimization

假设我有一个实现分类模型的张量流图:

x = tf.placeholder(tf.float32, shape)
# [insert mdoel here]
logits = tf.layers.dense(inputs=..., units=num_labels, activation=None)

现在假设我想使用Adam优化器对输入进行优化。

例如,为了找到有针对性的对抗示例,我将声明一个变量以进行优化(在执行过程中的某个示例处初始化),指定与真实类不同的目标类,计算交叉熵并将其最小化。

var_to_optimize = tf.Variable(np.zeros(shape, dtype=np.float32))
tgt_label = tf.placeholder(tf.float32, shape=[num_labels])
xent = tf.nn.softmax_cross_entropy_with_logits_v2(labels=tgt_label, logits=logits)

然后我想通过扰动输入来最小化交叉熵

optimizer = tf.train.AdamOptimizer(learning_rate=1e-3)
training_op = optimizer.minimize(xent, var_list=[var_to_optimize])

但是,xent要求我输入输入占位符x的值。如何将模型的logit与var_to_optimize链接?

1 个答案:

答案 0 :(得分:0)

我要回答的问题本质上是以下问题:如何在同一张量流图上创建两个单独的优化过程?

以下链接中的教程描述了如何执行此操作:定义了一个张量图,该图可以训练神经网络,然后添加经过优化的随机噪声(样本间均一),优化后可以导致大多数样本的错误分类。

https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/12_Adversarial_Noise_MNIST.ipynb