Какая разница между tf.sub и просто минусом работы в тензорном потоке?

Я пытаюсь использовать Tensorflow. Вот очень простой код.

train = tf.placeholder(tf.float32, [1], name="train")
W1 = tf.Variable(tf.truncated_normal([1], stddev=0.1), name="W1")
loss = tf.pow(tf.sub(train, W1), 2)
step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

Просто проигнорируйте часть оптимизации (4-я строка). Он примет плавающее число и обучит W1, чтобы увеличить квадратичную разницу.

Мой вопрос прост. Если я использую только знак минуса вместо tf.sub ", как показано ниже, что другое? Не приведет ли он к неправильному результату?

loss = tf.pow(train-W1, 2)

Когда я его заменю, результат выглядит одинаково. Если они одинаковы, зачем нам использовать вещи "tf.add/tf.sub"?

Встроенный анализ обратного распространения может выполняться только с помощью "tf. *" вещей?

Ответ 1

Да, - и + разрешить tf.sub объявление tf.add. Если вы посмотрите на код tensorflow, вы увидите, что эти операторы на tf.Variable перегружены с помощью методов tf. *.

Что касается того, почему оба существуют, я предполагаю, что существуют tf. * существуют для согласованности. Таким образом, можно использовать функцию sub и say matmul. В то время как перегрузка оператора для удобства.

Ответ 2

(tf.sub, похоже, был заменен на tf.subtract)

Единственное, что я вижу, это то, что вы можете указать имя операции, как в:

tf.subtract(train, W1, name='foofoo')

Это помогает идентифицировать операцию, приводящую к ошибке, так как имя, которое вы предоставляете, также показано:

ValueError: Dimensions must be equal, but are 28 and 40 for 'foofoo' (op: 'Sub') with input shapes

он также может помочь в понимании TensorBoard. Это может быть чрезмерным для большинства людей, поскольку python также показывает номер строки, которая вызвала ошибку.