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'

ข้อมูลระบบ:

  • แพลตฟอร์ม OS และการกระจาย: Windows 10
  • เวอร์ชัน Python: 3.7.1.1
  • Tensorflow เวอร์ชัน: 2.0.0-alpha0 (ติดตั้งด้วย pip)

ขั้นตอนในการผลิตซ้ำ:

การติดตั้ง:

  1. pip install - อัพเกรด pip
  2. pip ติดตั้ง tensorflow == 2.0.0-alpha0
  3. pip ติดตั้ง keras
  4. pip ติดตั้ง numpy == 1.16.2

การดำเนินการ:

  1. คำสั่ง Execute: นำเข้า tensorflow เป็น tf
  2. ดำเนินการคำสั่ง: sess = tf.Session ()

แปลก. ฉันคิดว่ามันไม่ได้เกิดจากเวอร์ชัน TF แต่การติดตั้ง TF ที่สมบูรณ์นั้นเสีย ดูgithub.com/tensorflow/tensorflow/issues/…
Dmytro Prylipko

5
TensorFlow 2.0 ผลงานรอบ ๆฟังก์ชั่นการประชุมไม่ได้ ฉันคิดว่าความคิดเริ่มต้นคือการเก็บไว้tf.Sessionอย่างน้อยในตอนแรก แต่เมื่อดูเอกสารดูเหมือนว่าในที่สุดมันก็ถูกคัดลอกทั้งหมดแล้ว
jdehesa

4
tf.compat.v1.Sessionโอ้ดูเหมือนว่าคุณยังคงสามารถเข้าถึงได้ผ่านทาง
jdehesa

@DmytroPrylipko ฉันลองทำก่อนที่จะสร้างคำถามนี้ มันไม่ได้ผลสำหรับฉัน
Atul Kamble

คำตอบ:


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ข้อผิดพลาดไม่มีแอตทริบิวต์
MPękalski

ฉันดาวน์โหลดโน้ตบุ๊กมาสองสามเครื่องแล้วและพบปัญหาเหล่านี้เนื่องจากข้อความที่นำเข้าที่ด้านบนตามที่ระบุไว้ในคำตอบช่วยให้ฉันกำจัดข้อผิดพลาดที่น่ารำคาญได้
silentsudo

ฉันจะประเมิน.pbกราฟคงที่ใน TF2 ได้อย่างไร? ผ่านการใช้ tf1-feature tf.compat.v1.Session()เท่านั้น ใน TF2 คุณควรใช้โหมดกระตือรือร้นอยู่เสมอ.pbหรือไม่?
Arty

55

TF2 รัน Eager Execution ตามค่าเริ่มต้นดังนั้นจึงไม่จำเป็นต้องใช้ Sessions หากคุณต้องการเรียกใช้กราฟคงที่วิธีที่เหมาะสมกว่าคือการใช้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 "

ฉันเห็นด้วยกับ

ฉันเชื่อว่า "เซสชัน ()" ถูกลบออกด้วย 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.xTF เวอร์ชันอื่นเว้นแต่จะมีแพตช์บางตัวมา แต่ไม่มีการปรับปรุง
MPękalski


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 รองรับโหมด Eager vis-a-vis Graph mode ของ v1.0 ดังนั้น tf.session () จึงไม่รองรับ v2.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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.