TensorFlow имеет два способа оценки части графика: Session.run
по списку переменных и Tensor.eval
. Есть ли разница между этими двумя?
python
tensorflow
Джеффри Ирвинг
источник
источник
tf.Tensor.eval()
иtf.Session.run()
, но связанныеtf.Operation.run()
и есть,tf.Tensor.eval()
как объяснено здесьОтветы:
Если у вас есть
Tensor
t, вызовt.eval()
эквивалентен вызовуtf.get_default_session().run(t)
.Вы можете сделать сеанс по умолчанию следующим образом:
Наиболее важным отличием является то, что вы можете использовать
sess.run()
для получения значений многих тензоров на одном шаге:Обратите внимание, что каждый вызов
eval
иrun
будет выполнять весь график с нуля. Чтобы кэшировать результат вычислений, присвойте его atf.Variable
.источник
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
и я только что получил жалобу от tenorflow о том, что формы не совпадают, точнее, я думаю, что ранг должен быть не менее 2.tf.multiply(t, u)
и это работало нормально.Сессия часто задаваемых вопросов о тензорном потоке имеет ответ на точно такой же вопрос . Я просто продолжу и оставлю это здесь:
Если
t
этоTensor
объект,t.eval()
это сокращение отsess.run(t)
(гдеsess
текущий сеанс по умолчанию. Два следующих фрагмента кода эквивалентны:Во втором примере сеанс выступает в качестве диспетчера контекста, который позволяет установить его в качестве сеанса по умолчанию для всего времени жизни
with
блока. Подход менеджера контекста может привести к более лаконичному коду для простых случаев использования (например, модульных тестов); если ваш код имеет дело с несколькими графиками и сессиями, это может быть проще для явных вызововSession.run()
.Я бы порекомендовал вам хотя бы просмотреть весь FAQ, так как это может многое прояснить.
источник
eval()
не может обработать объект спискано
Session.run()
можетпоправь меня если я не прав
источник
Самое главное помнить:
Зная это, все остальное легко :
Я бы также изложил метод,
tf.Operation.run()
как здесь :источник
В тензорном потоке вы создаете графики и передаете значения этому графику. Graph выполняет всю тяжелую работу и генерирует выходные данные на основе конфигурации, которую вы сделали в графике. Теперь, когда вы передаете значения в график, сначала вам нужно создать сеанс тензорного потока.
После инициализации сеанса вы должны использовать этот сеанс, потому что все переменные и настройки теперь являются частью сеанса. Таким образом, существует два способа передачи внешних значений в граф, чтобы граф мог их принимать. Одним из них является вызов .run (), когда вы используете выполняемый сеанс.
Другой способ, который по сути является быстрым, заключается в использовании .eval (). Я сказал ярлык, потому что полная форма .eval ()
Вы можете проверить это сами. На месте
values.eval()
бегаtf.get_default_session().run(values)
. Вы должны получить такое же поведение.eval использует сессию по умолчанию, а затем выполняет run ().
источник
Совместимый ответ Tensorflow 2.x : Преобразование кода mrry
Tensorflow 2.x (>= 2.0)
в интересах сообщества.источник