কীভাবে মান মান হিসাবে টেনসরফ্লো টেনসরের মাত্রা (আকৃতি) পাবেন?


90

ধরুন আমার কাছে টেনস্রোফ্লো টেনসর রয়েছে। আমি পূর্ণ সংখ্যার মান হিসাবে সেন্সরের মাত্রা (আকৃতি) কীভাবে পেতে পারি? আমি জানি যে দুটি পদ্ধতি আছে, tensor.get_shape()এবং tf.shape(tensor), তবে আমি পূর্ণসংখ্যার int32মান হিসাবে আকারের মানগুলি পেতে পারি না ।

উদাহরণস্বরূপ, নীচে আমি একটি 2-ডি টেন্সর তৈরি করেছি এবং আমার সারি এবং কলামগুলির সংখ্যা পাওয়া দরকার int32যাতে আমি reshape()আকৃতির একটি সেন্সর তৈরি করতে কল করতে পারি (num_rows * num_cols, 1)। যাইহোক, পদ্ধতিটি টাইপ tensor.get_shape()হিসাবে মানগুলি দেয় Dimension, নয় int32

import tensorflow as tf
import numpy as np

sess = tf.Session()    
tensor = tf.convert_to_tensor(np.array([[1001,1002,1003],[3,4,5]]), dtype=tf.float32)

sess.run(tensor)    
# array([[ 1001.,  1002.,  1003.],
#        [    3.,     4.,     5.]], dtype=float32)

tensor_shape = tensor.get_shape()    
tensor_shape
# TensorShape([Dimension(2), Dimension(3)])    
print tensor_shape    
# (2, 3)

num_rows = tensor_shape[0] # ???
num_cols = tensor_shape[1] # ???

tensor2 = tf.reshape(tensor, (num_rows*num_cols, 1))    
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1750, in reshape
#     name=name)
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 454, in apply_op
#     as_ref=input_arg.is_ref)
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 621, in convert_to_tensor
#     ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 180, in _constant_tensor_conversion_function
#     return constant(v, dtype=dtype, name=name)
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 163, in constant
#     tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape))
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", line 353, in make_tensor_proto
#     _AssertCompatible(values, dtype)
#   File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", line 290, in _AssertCompatible
#     (dtype.name, repr(mismatch), type(mismatch).__name__))
# TypeError: Expected int32, got Dimension(6) of type 'Dimension' instead.

উত্তর:


128

ইনটসের তালিকা হিসাবে আকারটি পেতে, করুন tensor.get_shape().as_list()

আপনার tf.shape()কলটি শেষ করতে চেষ্টা করুন tensor2 = tf.reshape(tensor, tf.TensorShape([num_rows*num_cols, 1]))। অথবা আপনি সরাসরি করতে পারেন tensor2 = tf.reshape(tensor, tf.TensorShape([-1, 1]))যেখানে এর প্রথম মাত্রাটি অনুমান করা যায়।


ধন্যবাদ, এটি আমাকে কল করতে এবং সম্পূর্ণ করতে দেয় tf.reshape(), তবে আমি সত্যিই অন্যান্য ক্রিয়াকলাপের জন্য num_rowsএবং num_colsপূর্ণসংখ্যা হিসাবে পেতে চাই ।
stackoverflowuser2010

6
চেষ্টা করুনtensor.get_shape().as_list()
yuefengz

4
হ্যাঁ, as_list()কাজ করে। আপনার উত্তরে এটি যুক্ত করুন, এবং আমি গ্রহণ করব।
stackoverflowuser2010

4
সম্পূর্ণতার জন্য, এই কোডটি কাজ করে:num_rows, num_cols = x.get_shape().as_list()
stackoverflowuser2010

4
সুন্দর! আমি x.get_shape () এর ফলাফল দেওয়ার জন্য পাইথন ইন () ব্যবহার করছিলাম। উদাহরণস্বরূপ num_rows = int (x.get_shape () [1]), num_cols = int (x.get_shape () [2]), ইত্যাদি, হ্যাঁ, এই সমস্যাযুক্ত ত্রুটির আশপাশে পেতে একটি হ্যাকি কিন্ত এটি কার্যকর হয়েছে। আমাকে আরও ভাল উপায়ে আলোকিত করার জন্য ধন্যবাদ :-)
শেরিলহোহমান


6

একটি 2-ডি টেনসারের জন্য, আপনি নিম্নলিখিত কোডটি ব্যবহার করে 32 টি সারি এবং কলামগুলির সংখ্যা পেতে পারেন:

rows, columns = map(lambda i: i.value, tensor.get_shape())

4
খুব অবহেলিত। এটি ইতিমধ্যে সরবরাহ করা উত্তরগুলিতে কীভাবে যুক্ত হবে?
rayryeng

4

২.০ সামঞ্জস্যপূর্ণ উত্তর : Tensorflow 2.x (2.1)নীচে কোডে বর্ণিত, আপনি পূর্ণসংখ্যার মান হিসাবে সেন্সরের মাত্রা (আকৃতি) পেতে পারেন:

পদ্ধতি 1 (ব্যবহার করে tf.shape) :

import tensorflow as tf
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Shape = c.shape.as_list()
print(Shape)   # [2,3]

পদ্ধতি 2 (ব্যবহার করে tf.get_shape()) :

import tensorflow as tf
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Shape = c.get_shape().as_list()
print(Shape)   # [2,3]

দুটি পদ্ধতির মধ্যে কোন পার্থক্য আছে?
Göta


1

আরও একটি সহজ সমাধান map()নিম্নরূপ ব্যবহার করা হয়:

tensor_shape = map(int, my_tensor.shape)

এটি সমস্ত Dimensionবস্তুকে রূপান্তরিত করেint


0

পরবর্তী সংস্করণগুলিতে (টেনসরফ্লো ১.১৪ দিয়ে পরীক্ষা করা) টেনসরের আকৃতি পাওয়ার আরও নালীর মতো উপায় রয়েছে। আপনি tensor.shapeটেনসর আকার পেতে ব্যবহার করতে পারেন ।

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