Tensorflow — присвоение значений заполнителей переменным

Я пытаюсь изменить пример TensorFlow MNIST, чтобы входные значения заполнителя передавались в переменную для обработки перед созданием результатов.

Например:

import tensorflow as tf

# create placeholder/weights/biases
input_x = tf.placeholder(tf.float32, [None, 784])
input_W = tf.Variable(tf.zeros([784, 10]))
input_b = tf.Variable(tf.zeros([10]))

# Create the new variable
var_x = tf.Variable(tf.zeros([784]), trainable=False)

# Perform an arbitrary manipulation on MNIST input, and assign to var_x
for i in range(0,784):
    var_x[i].assign(input_x[i] / 2)

input_Y = tf.matmul(var_x, input_W) + input_b

В приведенном выше примере я передаю значения-заполнители input_X в var_X, где я могу выполнять произвольные манипуляции со значениями перед умножением на веса для получения выходного результата.

Я получаю следующую ошибку на tf.matmul:

ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [784], [784,10].

Я смущен, почему в приведенном выше примере это работает:

tf.matmul(input_x, input_W) + input_b

но это не так:

tf.matmul(var_x, input_W) _ input_b

Поскольку и input_x, и var_x должны быть вектором длины 784.

По сути, я хочу, чтобы это было точно такое же умножение матриц, как в обычном примере MNIST, но с использованием переменной, а не заполнителя.

Кажется, это должно быть очень прямолинейно, однако я новичок в TensorFlow, и, несмотря на то, что я прочитал много руководств/вопросов SO, я нигде раньше не видел этот конкретный сценарий.

Спасибо заранее за любые предложения!


person inkbleed    schedule 26.04.2017    source источник


Ответы (1)


Поскольку и input_x, и var_x должны быть вектором длины 784.

Это не совсем так. Input_x имеет форму [None, 784], а ваш var_x имеет форму [784].

К сожалению, я не совсем понимаю, что вы пытаетесь сделать...

По сути, я хочу, чтобы это было точно такое же умножение матриц, как в обычном примере MNIST, но с использованием переменной, а не заполнителя.

Если вы хотите использовать переменную, а не заполнитель, вы можете сказать

input_x = tf.Variable(tf.float32, preloaded_digits_numpy_array) 

И оставьте остальную часть кода как есть...

person rmeertens    schedule 26.04.2017
comment
Спасибо за ответ, извините, если что не так. Я хочу загрузить цифры в заполнитель как обычно, но перед вычислением результатов произведу некоторые манипуляции со значениями. - person inkbleed; 26.04.2017
comment
Извините, мой комментарий обрывается. Я хотел добавить: Итак, в приведенном выше примере я беру значения заполнителей и делю их пополам. Точно так же я могу взять значения заполнителей и объединить их или усреднить и т. д. В конечном итоге я могу захотеть сделать это с несколькими переменными, поэтому input_x должен быть отделен от переменной update/matmul'd. Надеюсь, так понятнее! Ваше здоровье - person inkbleed; 26.04.2017
comment
Ммм, в таком случае, почему бы не выполнить эту операцию с помощью numpy перед тем, как передать ее графу? - person rmeertens; 26.04.2017
comment
Я планирую регулярно вынимать информацию из графика во время его обработки, выполнять над ним операции, а затем продолжать обработку обновленных значений. Вы предполагаете, что это не поддерживается в TensorFlow? Спасибо - person inkbleed; 27.04.2017