টেনসরফ্লোতে আমি কীভাবে কোনও টেনসরকে একটি অদ্ভুত অ্যারে রূপান্তর করতে পারি?


181

পাইথন বাইন্ডিংসের সাথে টেনসরফ্লো ব্যবহার করার সময় কীভাবে একটি টেনসরকে একটি আঙ্কুল অ্যারে রূপান্তর করতে?

উত্তর:


134

কোন টেন্সর দ্বারা ফিরে 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 অ্যারে। উদাহরণস্বরূপ স্পার্স টেনারগুলি স্পার্সটেনসরভ্যালু হিসাবে ফিরে আসে:

>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>

অ্যাট্রিবিউটআরার: মডিউল 'টেনসরফ্লো'র' সেশন 'এর কোনও বৈশিষ্ট্য নেই
কে।

77

টেনসর থেকে ন্যাপি অ্যারেতে ফিরে রূপান্তর করতে আপনি কেবল .eval()ট্রান্সফর্মড টেনসারে চালাতে পারেন ।


5
স্পষ্ট করতে: yourtensor.eval ()
এমআরকে

12
আমি পেয়েছি এটি 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)'কি কেবল টেনসফ্লো সেশনের সময় ব্যবহারযোগ্য?
এডুয়ার্ডো পিগনেটেলি

@ এদুয়ার্ডোপিগনেটেলি এটি আমার জন্য থায়ানোতে কোনও অতিরিক্ত কাজ ছাড়াই কাজ করে। টিএফ সম্পর্কে নিশ্চিত নয়।
বলপয়েন্টবেন

5
@ এডুয়ার্ডোপিনেটেল্টি আপনার .eval()একটি অধিবেশন থেকে পদ্ধতি কলটি চালানো দরকার : sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
দুহাইম

এটি ব্যবহার করে আমি অ্যাট্রিবিউটআরার হিসাবে ত্রুটি পাচ্ছি: 'টেনসর' অবজেক্টটির '
ইওল

73

টেনসরফ্লো 2.x

ইজিগার এক্সিকিউশনটি ডিফল্টরূপে সক্ষম হয়, তাই কেবল .numpy()টেনসর অবজেক্টে কল করুন।

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)

এটি (দস্তাবেজগুলি থেকে) লক্ষ্য করার মতো,

নম্পি অ্যারে টেন্সর অবজেক্টের সাথে মেমরি ভাগ করতে পারে। একের যে কোনও পরিবর্তন অন্যটিতে প্রতিফলিত হতে পারে।

বোল্ড জোর আমার। একটি অনুলিপি ফিরে আসতে পারে এবং নাও হতে পারে এবং এটি একটি বাস্তবায়ন বিশদ।


যদি ইজিগার এক্সিকিউশন অক্ষম থাকে, আপনি একটি গ্রাফ তৈরি করতে পারেন এবং তারপরে এটি চালাতে পারেন 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)

নতুনটিতে পুরানো এপিআই-এর ম্যাপিংয়ের জন্য টিএফ ২.০ সিম্বলস ম্যাপও দেখুন ।


2
এটি কীভাবে একটি tf.function অন্তর্ভুক্ত করবেন?
গণিত

@mentalmushroom একটি ডকুমেন্টেশন খুঁজে পাওয়া যায় নি তবে এটি কাস্টমাইজেশন ম্যানুয়ালটিতে উল্লিখিত হয়েছে । উত্স থেকে আরও বিশদ পাওয়া যাবে ।
নিশ-পিঁপড়

5
টিএফ 2.0 তে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: "'টেনসর' অবজেক্টটির কোনও 'নাম্বার' নেই
উইল E ই

@ উইল.এইও সম্ভব এটি চালানোর আগে আপনি আগ্রহী সম্পাদনকে অক্ষম করেছেন। আপনি যেখানে ব্যবহার করতে পারেন আমার উত্তরটির দ্বিতীয়ার্ধটি পরীক্ষা করুন eval()
cs95

2
না আমি আগ্রহী মৃত্যুদন্ড কার্যকর করতে পারি নি। তারপরেও অ্যাট্রিবিউটআরার পান: 'টেনসর' অবজেক্টটির 'নম্পি' কোনও বৈশিষ্ট্য নেই
জেফ্রি অ্যান্ডারসন

6

তোমার দরকার:

  1. বাইনারি টেনসর থেকে কিছু বিন্যাসে (jpeg, png) চিত্র সেন্সরটি এনকোড করুন
  2. একটি সেশনে বাইনারি টেনসর মূল্যায়ন (চালানো)
  3. বাইনারি প্রবাহে পরিণত করুন
  4. পিআইএল ছবিতে ফিড
  5. (alচ্ছিক) ম্যাটপ্লটলিব সহ চিত্র প্রদর্শন করুন

কোড:

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)

এটি আমার পক্ষে কাজ করেছে। আপনি এটি একটি আইপথন নোটবুক চেষ্টা করতে পারেন। কেবল নিম্নলিখিত লাইনটি যুক্ত করতে ভুলবেন না:

%matplotlib inline

4

হতে পারে আপনি এই পদ্ধতিটি চেষ্টা করে দেখতে পারেন:

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)

2

চতুরত্বের গ্রন্থাগার / টিউটোরিয়ালগুলির সাথে প্রাপ্ত টেনারগুলির ( অ্যাডভারসিয়াল ) চিত্রগুলি উপস্থাপনের নির্দিষ্ট ক্ষেত্রে আমি টেনসর-> ন্যাডর্রে রূপান্তরটির সমাধান করেছি এবং সমাধান করেছি ।

আমি মনে করি যে আমার প্রশ্ন / উত্তর ( এখানে ) অন্যান্য ক্ষেত্রেও সহায়ক উদাহরণ হতে পারে।

টেনসরফ্লো দিয়ে আমি নতুন, আমার একটি অভিজ্ঞতা অভিজ্ঞতা:

মনে হচ্ছে সফল হওয়ার জন্য tensor.eval () পদ্ধতির প্রয়োজন হতে পারে, ইনপুট স্থানধারীদের জন্য মানও । টেনসর কোনও ফাংশনের মতো কাজ করতে পারে যা feed_dictকোনও আউটপুট মান ফেরত দিতে তার ইনপুট মানগুলি (সরবরাহ করা হয় ) প্রয়োজন eg

array_out = tensor.eval(session=sess, feed_dict={x: x_input})

দয়া করে নোট করুন যে স্থানধারকের নামটি আমার ক্ষেত্রে x , তবে আমি মনে করি আপনার ইনপুট স্থানধারকের জন্য সঠিক নামটি খুঁজে পাওয়া উচিত । x_inputইনপুট ডেটাযুক্ত একটি স্কেলারের মান বা অ্যারে।

আমার ক্ষেত্রে প্রদানও sessবাধ্যতামূলক ছিল।

আমার উদাহরণটি ম্যাটপ্ল্লিটিব চিত্রের ভিজ্যুয়ালাইজেশনের অংশও কভার করে তবে এটি ওটি।


1

একটি সাধারণ উদাহরণ হতে পারে,

    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.

n এখন যদি আমরা এই টেনসরটিকে একটি নমপি অ্যারে রূপান্তর করতে চাই

    a_np=a.eval()
    print(type(a_np))
    #<class 'numpy.ndarray'>

এর মত সহজ!


//অজগর মন্তব্য করার জন্য নয়। আপনার উত্তর সম্পাদনা করুন।
ভ্লাদ

0

আমি এই আদেশের জন্য দিনগুলি অনুসন্ধান করছিলাম।

এটি কোনও সেশনের বাইরে বা এই জাতীয় কিছু করার জন্য আমার পক্ষে কাজ করেছে।

# 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


0

আপনি কেরাস ব্যাকএন্ড ফাংশন ব্যবহার করতে পারেন।

import tensorflow as tf
from tensorflow.python.keras import backend 

sess = backend.get_session()
array = sess.run(< Tensor >)

print(type(array))

<class 'numpy.ndarray'>

আমি আসা করি এটা সাহায্য করবে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.