Я пытаюсь оптимизировать только части переменной. Я нашел этот , казалось бы, полезный ответ.
Однако моя переменная - это изображение, и я хочу изменить только его части, поэтому я пытаюсь расширить код для большего количества измерений. Кажется, это работает нормально:
import tensorflow as tf
import tensorflow.contrib.opt as opt
X = tf.Variable([[1.0, 2.0], [3.0, 4.0]])
# the next two lines need to change because
# manually specifying the values is not feasible
indexes = tf.constant([[0, 0], [1, 0]])
updates = [X[0, 0], X[1, 0]]
part_X = tf.scatter_nd(indexes, updates, [2, 2])
X_2 = part_X + tf.stop_gradient(-part_X + X)
Y = tf.constant([[2.5, -3.5], [5.5, -7.5]])
loss = tf.reduce_sum(tf.squared_difference(X_2, Y))
opt = opt.ScipyOptimizerInterface(loss, [X])
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
opt.minimize(sess)
print("X: {}".format(X.eval()))
Однако, поскольку размеры моего изображения и область, которую я хотел бы выбрать, намного больше, указание всех индексов вручную невозможно. Я хотел бы знать, как использовать для этого фрагменты или диапазоны.