Tensorflow 2.0 - AttributeError: moduł „tensorflow” nie ma atrybutu „Session”

132

Kiedy sess = tf.Session()wykonuję polecenie w środowisku Tensorflow 2.0, pojawia się następujący komunikat o błędzie:

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

Informacje o systemie:

  • Platforma i dystrybucja systemu operacyjnego: Windows 10
  • Wersja Pythona: 3.7.1
  • Wersja Tensorflow: 2.0.0-alpha0 (instalowana z pip)

Kroki ku reprodukcji:

Instalacja:

  1. pip install - uaktualnij pip
  2. pip zainstaluj tensorflow == 2.0.0-alpha0
  3. pip install keras
  4. pip install numpy == 1.16.2

Wykonanie:

  1. Wykonaj polecenie: importuj tensorflow jako tf
  2. Wykonaj polecenie: sess = tf.Session ()
Atul Kamble
źródło
Dziwne. Myślę, że nie jest to spowodowane wersją TF, ale cała instalacja TF jest zepsuta. Zobacz github.com/tensorflow/tensorflow/issues/ ...
Dmytro Prylipko
5
TensorFlow 2.0 działa wokół funkcji, a nie sesji . Myślę, że początkowym pomysłem było zachowanie tf.Sessionprzynajmniej początkowo, ale patrząc na dokumenty wydaje się, że w końcu został całkowicie zeskrobany.
jdehesa
4
Och, wygląda na to, że nadal masz do niego dostęp tf.compat.v1.Session.
jdehesa
@DmytroPrylipko Wypróbowałem to przed utworzeniem tego pytania. Na mnie to nie wyszło.
Atul Kamble

Odpowiedzi:

223

Zgodnie z tym TF 1:1 Symbols Map, w TF 2.0 powinieneś używać tf.compat.v1.Session()zamiasttf.Session()

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

Aby uzyskać TF 1.x podobne zachowanie w TF 2.0, można uruchomić

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

ale wtedy nie można skorzystać z wielu ulepszeń wprowadzonych w TF 2.0. Więcej informacji można znaleźć w przewodniku migracji https://www.tensorflow.org/guide/migrate

MPękalski
źródło
5
Używanie import tensorflow.compat.v1 as tf tf.disable_v2_behavior() daje mi błądAttributeError: module 'tensorflow_core.compat.v1' has no attribute 'contrib'
GAURAV SRIVASTAVA
1
Znalazłem to w dokumentacji migracji TF 2.0It is still possible to run 1.X code, unmodified (except for contrib), in TensorFlow 2.0
GAURAV SRIVASTAVA
Której wersji TF używasz, gdy tensorflow_corepojawi się błąd nie ma atrybutu?
MPękalski
Pobrałem kilka notatników i napotkałem te problemy, ponieważ zaimportowane oświadczenia u góry, jak wspomniano w odpowiedzi, pomogły mi pozbyć się irytującego błędu.
silentsudo
Jak .pbzatem ocenić statyczny wykres w TF2? Tylko dzięki użyciu funkcji tf1, takiej jak tf.compat.v1.Session(). W TF2 masz zawsze używać trybu gorącego i nie .pb?
Arty
55

TF2 domyślnie uruchamia Eager Execution, eliminując w ten sposób potrzebę sesji. Jeśli chcesz uruchamiać statyczne wykresy, właściwszym sposobem jest użycie tf.function()w TF2. Chociaż tf.compat.v1.Session()w TF2 nadal można uzyskać dostęp do sesji , odradzam jej używanie. Pomocne może być zademonstrowanie tej różnicy, porównując różnicę w światach hello:

Witaj świecie TF1.x:

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

Witaj świecie TF2.x:

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

Aby uzyskać więcej informacji, zobacz Effective TensorFlow 2

Wes
źródło
1
Czy w TF2 jest tryb niechętny? A może tryb zachłanności to tylko sugerowany tryb wykonania? Co jeśli chcę mieć .pbplik statyczny w TF2? Czy to możliwe? Jak mam to ocenić w TF2?
Arty
28

Napotkałem ten problem, kiedy po raz pierwszy spróbowałem Pythona po instalacji windows10 + python3.7(64bit) + anacconda3 + jupyter notebook.

Rozwiązałem ten problem, odwołując się do „ https://vispud.blogspot.com/2019/05/tensorflow200a0-attributeerror-module.html

zgadzam się z

Uważam, że "Session ()" zostało usunięte w TF 2.0.

Wstawiłem dwie linie. Jeden jest, tf.compat.v1.disable_eager_execution()a drugi jestsess = tf.compat.v1.Session()

Mój Hello.py wygląda następująco:

import tensorflow as tf

tf.compat.v1.disable_eager_execution()

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

sess = tf.compat.v1.Session()

print(sess.run(hello))
user12217934
źródło
1
Powiedziałbym raczej, że w TF 2.0 Session()został przeniesiony, a nie usunięty. Konieczność stosowania Session() został usunięty.
MPękalski
5

Bo TF2.xmożesz to zrobić.

import tensorflow as tf
with tf.compat.v1.Session() as sess:
    hello = tf.constant('hello world')
    print(sess.run(hello))

>>> b'hello world

Bandham Manikanta
źródło
4

Spróbuj tego

import tensorflow as tf

tf.compat.v1.disable_eager_execution()

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

sess = tf.compat.v1.Session()

print(sess.run(hello))
يوسف بن عبد الرزاق
źródło
1
Nie wysyłaj prostego kodu jako odpowiedzi. Proszę wyjaśnić swoją implementację / odpowiedź.
milanbalazs
3

Jeśli to jest twój kod, właściwym rozwiązaniem jest przepisanie go tak, aby nie był używany Session(), ponieważ nie jest to już konieczne w TensorFlow 2

Jeśli to tylko kod, który używasz, możesz przejść na TensorFlow 1, uruchamiając

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

(lub jakakolwiek najnowsza wersja TensorFlow 1 to)

BlueRaja - Danny Pflughoeft
źródło
Po tym 1.15.xnie powinno być żadnej innej 1.xwersji TF, chyba że przyjdą jakieś poprawki, ale żadnych ulepszeń.
MPękalski
1

Domyślnie Tensorflow 2.x obsługuje przyspieszone wykonywanie, dlatego sesja nie jest obsługiwana.

DataCrusade1999
źródło
0

Korzystanie z Anaconda + Spyder (Python 3.7)

[kod]

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))

[konsola]

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
sergio
źródło
0

TF v2.0 obsługuje tryb Eager vis-a-vis Graph of v1.0. Dlatego tf.session () nie jest obsługiwana w wersji 2.0. Dlatego sugerowałbym przepisanie kodu do pracy w trybie Eager.

aksingh2411
źródło
Czy TF2 w ogóle obsługuje tryb niechętny? A może brak chęci to po prostu funkcja TF1? Jak więc mam ocenić .pbwykresy w tf2?
Arty
0
import tensorflow as tf
sess = tf.Session()

ten kod pokaże błąd atrybutu w wersji 2.x

używać kodu wersji 1.x w wersji 2.x

Spróbuj tego

import tensorflow.compat.v1 as tf
sess = tf.Session()
azad1701
źródło