Кажется, что в отличие от того, как я понимаю документы на assign_add
, эта операция может фактически возвращать значение переменной до добавление завершено, а не после.
Таким образом, в этом примере c
- это переменная со значением [[4.723362, ...]]
. В первом sess.run
вы печатаете c
, который имеет значение pre-assign_add, так как обновление выполняется после, b
, который выглядит, как ожидалось, и d
, который также возвращает предварительно значение assign_add, потому что, по-видимому, это работает как операция.
После этого c
обновляется и теперь содержит значения [[5.723362, ...]]
. Теперь вы снова запускаете d
(assign_add
op), который обновляет c
, но снова возвращает значение pre-update , которое составляет [[5.723362, ...]]
.
В заключение, если мы примем, что возвращаемым значением tf.assign_add
является переменная до сложения, и , которая работает c
вместе с d
в первом " Параллельный вызов run вернет c
перед выполнением обновления, это имеет смысл. Вы можете убедиться в этом, добавив sess.run(c)
в самом конце, который должен вернуть [[6.723362,...]
.