วิธีการแปลงเมตริกซ์เป็นอาร์เรย์ numpy เมื่อใช้ Tensorflow ด้วยการผูก Python?
วิธีการแปลงเมตริกซ์เป็นอาร์เรย์ numpy เมื่อใช้ Tensorflow ด้วยการผูก Python?
คำตอบ:
เมตริกซ์ใด ๆ ที่ส่งคืนโดยSession.run
หรือeval
เป็นอาร์เรย์ NumPy
>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>
หรือ:
>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
หรือเทียบเท่า:
>>> sess = tf.Session()
>>> with sess.as_default():
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
แก้ไข:ไม่มีเมตริกซ์ใด ๆ ที่ส่งคืนโดยSession.run
หรือeval()
เป็นอาร์เรย์ NumPy ตัวอย่าง Sparse Tensors ถูกส่งคืนเป็น SparseTensorValue:
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
ในการแปลงกลับจากเทนเซอร์เป็นจำนวนมากคุณสามารถเรียกใช้.eval()
บนเมตริกซ์ที่แปลงแล้ว
ValueError: Cannot evaluate tensor using 'eval()': No default session is registered. Use 'with sess.as_default()' or pass an explicit session to 'eval(session=sess)'
มันใช้งานได้เฉพาะในช่วงเซสชั่น 10 เท่าหรือไม่
.eval()
เมธอดจากภายในเซสชัน: sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Eager Executionเปิดใช้งานโดยค่าเริ่มต้นดังนั้นเพียงแค่เรียกใช้.numpy()
บนวัตถุ Tensor
import tensorflow as tf
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
a.numpy()
# array([[1, 2],
# [3, 4]], dtype=int32)
b.numpy()
# array([[2, 3],
# [4, 5]], dtype=int32)
tf.multiply(a, b).numpy()
# array([[ 2, 6],
# [12, 20]], dtype=int32)
มันเป็นที่น่าสังเกต (จากเอกสาร)
อาร์เรย์ Numpy อาจใช้หน่วยความจำร่วมกับวัตถุ Tensor การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับสิ่งใดสิ่งหนึ่งอาจส่งผลต่ออีกสิ่งหนึ่ง
เหมืองเน้นหนัก สำเนาอาจจะหรือไม่อาจถูกส่งคืนและนี่คือรายละเอียดการใช้งาน
หาก Eager Execution ถูกปิดใช้งานคุณสามารถสร้างกราฟและเรียกใช้ผ่านtf.compat.v1.Session
:
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
out = tf.multiply(a, b)
out.eval(session=tf.compat.v1.Session())
# array([[ 2, 6],
# [12, 20]], dtype=int32)
ดูแผนที่สัญลักษณ์ TF 2.0สำหรับการแมปของ API เก่ากับอันใหม่
eval()
ตรวจสอบช่วงครึ่งหลังของคำตอบของฉันที่คุณสามารถใช้
คุณต้อง:
รหัส:
import tensorflow as tf
import matplotlib.pyplot as plt
import PIL
...
image_tensor = <your decoded image tensor>
jpeg_bin_tensor = tf.image.encode_jpeg(image_tensor)
with tf.Session() as sess:
# display encoded back to image data
jpeg_bin = sess.run(jpeg_bin_tensor)
jpeg_str = StringIO.StringIO(jpeg_bin)
jpeg_image = PIL.Image.open(jpeg_str)
plt.imshow(jpeg_image)
สิ่งนี้ใช้ได้สำหรับฉัน คุณสามารถลองได้ในโน้ตบุ๊ก ipython อย่าลืมเพิ่มบรรทัดต่อไปนี้:
%matplotlib inline
บางทีคุณสามารถลอง, วิธีนี้:
import tensorflow as tf
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
array = W1.eval(sess)
print (array)
ฉันได้เผชิญหน้าและแก้ไขการแปลงเมตริกซ์ -> ndarrayในกรณีเฉพาะของภาพเทนเซอร์ที่เป็นตัวแทนของ (ภาพที่ไม่เห็นด้วย) ที่ได้มากับเคลฟเวอร์แฮนห้องสมุด / บทช่วยสอนที่
ฉันคิดว่าคำถาม / คำตอบของฉัน ( ที่นี่ ) อาจเป็นตัวอย่างที่เป็นประโยชน์สำหรับกรณีอื่น ๆ
ฉันใหม่กับ TensorFlow ของฉันเป็นข้อสรุปเชิงประจักษ์:
มันดูเหมือนว่า tensor.eval () วิธีการอาจจะต้องเพื่อที่จะประสบความสำเร็จนอกจากนี้ยังมีค่าสำหรับการป้อนข้อมูลตัวยึด เทนเซอร์อาจทำงานเหมือนฟังก์ชั่นที่ต้องการค่าอินพุต (จัดเตรียมไว้feed_dict
) เพื่อส่งคืนค่าเอาต์พุตเช่น
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
โปรดทราบว่าชื่อตัวยึดเป็นxในกรณีของฉัน แต่ฉันคิดว่าคุณควรจะหาชื่อที่เหมาะสมสำหรับการป้อนข้อมูลตัวยึด
x_input
เป็นค่าสเกลาร์หรืออาร์เรย์ที่มีข้อมูลอินพุต
ในกรณีของฉันยังให้sess
เป็นสิ่งจำเป็น
ตัวอย่างของฉันยังครอบคลุมถึงส่วนการสร้างภาพข้อมูลmatplotlibแต่นี่คือ OT
ตัวอย่างง่ายๆก็คือ
import tensorflow as tf
import numpy as np
a=tf.random_normal([2,3],0.0,1.0,dtype=tf.float32) #sampling from a std normal
print(type(a))
#<class 'tensorflow.python.framework.ops.Tensor'>
tf.InteractiveSession() # run an interactive session in Tf.
ตอนนี้ถ้าเราต้องการให้เมตริกซ์ a นี้ถูกแปลงเป็นอาร์เรย์ที่มีค่า
a_np=a.eval()
print(type(a_np))
#<class 'numpy.ndarray'>
ง่ายเหมือนที่!
//
ไม่ได้มีไว้สำหรับแสดงความคิดเห็นในหลาม โปรดแก้ไขคำตอบของคุณ
ฉันค้นหาวันสำหรับคำสั่งนี้
สิ่งนี้ใช้ได้สำหรับฉันนอกเซสชันหรืออะไรทำนองนี้
# you get an array = your tensor.eval(session=tf.compat.v1.Session())
an_array = a_tensor.eval(session=tf.compat.v1.Session())
https://kite.com/python/answers/how-to-convert-a-tensorflow-tensor-to-a-numpy-array-in-python
คุณสามารถใช้ฟังก์ชันแบ็กเอนด์ keras
import tensorflow as tf
from tensorflow.python.keras import backend
sess = backend.get_session()
array = sess.run(< Tensor >)
print(type(array))
<class 'numpy.ndarray'>
ฉันหวังว่ามันจะช่วย!