Оптимизация в тензорном потоке

Предположим, у меня есть тензор потока, реализующий модель классификации:

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

Теперь предположим, что я хочу оптимизировать входные данные с помощью оптимизатора Адама.

Например, чтобы найти целевые альтернативные примеры, я бы объявил переменную для оптимизации (инициализированную в некотором образце во время выполнения), указал целевой класс, отличный от истинного класса, вычислил кросс-энтропию и минимизировал ее.

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. Как связать логи модели с помощью var_to_optimize?

Всего 1 ответ


Вопрос, на который я пытался ответить, заключается в следующем: как можно создать две отдельные процедуры оптимизации на одном графике тензорного потока?

В руководстве по следующей ссылке описывается, как это сделать: определяется тензорный график, который обучает нейронную сеть, а затем добавляет случайный шум (равномерный по выборкам), оптимизированный, чтобы вызвать ошибочную классификацию большинства выборок.

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


Есть идеи?

10000