Tensorflow 2.0 - AttributeError: модуль 'tensorflow' не має атрибута 'Session'


132

Коли я sess = tf.Session()виконую команду в середовищі Tensorflow 2.0, я отримую повідомлення про помилку, як показано нижче:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'Session'

Інформація про систему:

  • Платформа та розповсюдження ОС: Windows 10
  • Версія Python: 3.7.1
  • Версія Tensorflow: 2.0.0-alpha0 (встановлена ​​з pip)

Етапи відтворення:

Встановлення:

  1. встановити --upgrade pip - -
  2. pip install tensorflow == 2.0.0-alpha0
  3. pip встановити keras - -
  4. pip install numpy == 1.16.2

Виконання:

  1. Виконати команду: імпортувати tensorflow як tf
  2. Виконати команду: sess = tf.Session ()

Дивно. Думаю, це не пов’язано з версією TF, але повна установка TF порушена. Дивіться github.com/tensorflow/tensorflow/issues/…
Дмитро Приліпко

5
TensorFlow 2.0 працює навколо функцій, а не сеансів . Я думаю, що початковою ідеєю було залишити tf.Sessionпринаймні спочатку, але, дивлячись на документи, здається, що це нарешті було повністю вишкреблено.
jdehesa

4
О, здається, ви все ще можете отримати до нього доступ tf.compat.v1.Session.
jdehesa

@DmytroPrylipko Я спробував це перед створенням цього питання. У мене це не спрацювало.
Атул

Відповіді:


223

Відповідно TF 1:1 Symbols Map, у TF 2.0 вам слід використовувати tf.compat.v1.Session()замістьtf.Session()

https://docs.google.com/spreadsheets/d/1FLFJLzg7WNP6JHODX5q8BDgptKafq_slHpnHVbJIteQ/edit#gid=0

Щоб отримати подібну поведінку TF 1.x у TF 2.0, можна запустити

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

але тоді не можна скористатися багатьма вдосконаленнями, зробленими в TF 2.0. Докладніше див. У посібнику з міграції https://www.tensorflow.org/guide/migrate


5
Використання import tensorflow.compat.v1 as tf tf.disable_v2_behavior() дає мені помилкуAttributeError: module 'tensorflow_core.compat.v1' has no attribute 'contrib'
GAURAV SRIVASTAVA

1
Знайшов це в документації щодо міграції TF 2.0It is still possible to run 1.X code, unmodified (except for contrib), in TensorFlow 2.0
GAURAV SRIVASTAVA

Яку версію TF ви використовуєте, коли отримуєте tensorflow_coreпомилку атрибута has no?
MPękalski,

Я завантажив кілька блокнотів, і зіткнувся з цими проблемами, імпортуючи заяви у верхній частині, як зазначено у відповіді, допомогло мені позбутися дратуючої помилки.
silentsudo

Як мені тоді оцінити статичний .pbграфік у TF2? Тільки завдяки використанню функції tf1 типу tf.compat.v1.Session(). У TF2 ви завжди повинні використовувати енергійний режим, а ні .pb?
Arty

55

TF2 за замовчуванням запускає Eager Execution, тим самим усуваючи потребу в сеансах. Якщо ви хочете запускати статичні графіки, більш правильним способом є використання tf.function()в TF2. Хоча до сесії все ще можна отримати доступ черезtf.compat.v1.Session() у TF2, я б не рекомендував його використовувати. Може бути корисно продемонструвати цю різницю, порівнявши різницю у привітних світах:

TF1.x привіт світ:

import tensorflow as tf
msg = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(msg))

TF2.x привіт світ:

import tensorflow as tf
msg = tf.constant('Hello, TensorFlow!')
tf.print(msg)

Для отримання додаткової інформації див. Ефективний TensorFlow 2


1
Чи є у TF2 режим, який не хоче працювати? Або нетерплячий режим - це лише рекомендований спосіб виконання? Що робити, якщо я хочу мати статичний .pbфайл у TF2? Це можливо? Як я можу оцінити це тоді в TF2?
Arty

28

Я зіткнувся з цією проблемою, коли вперше спробував python після встановлення windows10 + python3.7(64bit) + anacconda3 + jupyter notebook.

Я вирішив цю проблему, звернувшись до " https://vispud.blogspot.com/2019/05/tensorflow200a0-attributeerror-module.html "

я погоджуюся з

Я вважаю, що "Session ()" було видалено за допомогою TF 2.0.

Я вставив два рядки. Один є, tf.compat.v1.disable_eager_execution()а інший єsess = tf.compat.v1.Session()

Мій Hello.py такий:

import tensorflow as tf

tf.compat.v1.disable_eager_execution()

hello = tf.constant('Hello, TensorFlow!')

sess = tf.compat.v1.Session()

print(sess.run(hello))

1
Я б скоріше сказав, що в TF 2.0 Session()було переміщено не видалено. Необхідність використання Session() була видалена.
MPękalski


4

спробуйте це

import tensorflow as tf

tf.compat.v1.disable_eager_execution()

hello = tf.constant('Hello, TensorFlow!')

sess = tf.compat.v1.Session()

print(sess.run(hello))

1
Будь ласка, не публікуйте простий код як відповідь. Будь ласка, поясніть свою реалізацію / відповідь.
milanbalazs

3

Якщо це ваш код, правильним рішенням буде переписати його, щоб він не використовувався Session(), оскільки це більше не потрібно в TensorFlow 2

Якщо це лише код, який ви запускаєте, ви можете перейти до TensorFlow 1, запустивши

pip3 install --upgrade --force-reinstall tensorflow-gpu==1.15.0 

(або якою є остання версія TensorFlow 1 )


Після 1.15.xне повинно бути іншої 1.xверсії TF, окрім випадків, коли з’являться деякі виправлення, але жодних удосконалень.
MPękalski

1

Прагнення виконання Tensorflow 2.x за замовчуванням, отже, сеанс не підтримується.


0

Використання Anaconda + Spyder (Python 3.7)

[код]

import tensorflow as tf
valor1 = tf.constant(2)
valor2 = tf.constant(3)
type(valor1)
print(valor1)
soma=valor1+valor2
type(soma)
print(soma)
sess = tf.compat.v1.Session()
with sess:
    print(sess.run(soma))

[консоль]

import tensorflow as tf
valor1 = tf.constant(2)
valor2 = tf.constant(3)
type(valor1)
print(valor1)
soma=valor1+valor2
type(soma)
Tensor("Const_8:0", shape=(), dtype=int32)
Out[18]: tensorflow.python.framework.ops.Tensor

print(soma)
Tensor("add_4:0", shape=(), dtype=int32)

sess = tf.compat.v1.Session()

with sess:
    print(sess.run(soma))
5

0

TF v2.0 підтримує енергійний режим щодо графічного режиму v1.0. Отже, tf.session () не підтримується у версії 2.0. Отже, пропоную вам переписати свій код, щоб він працював у нетерплячому режимі.


Чи підтримує TF2 взагалі режим, який не вимагає потреби? Або нетерплячий - це просто функція tf1? Як тоді оцінити .pbграфіки в tf2?
Arty

0
import tensorflow as tf
sess = tf.Session()

цей код покаже помилку атрибуту у версії 2.x

використовувати код версії 1.x у версії 2.x

спробуйте це

import tensorflow.compat.v1 as tf
sess = tf.Session()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.