اذهب إلى المحتوى
  • 0

كيفية تحويل قائمة list إلى tf.data.Dataset في تنسرفلو Tensorflow

عامر ابراهيم

السؤال

لدي قائمة مكونة من قوائم بأحجام مختلفة (مجموعة بيانات) وأريد تحويلها tf.data.Dataset، كيف يمكنني القيام بذلك؟ على سبيل المثال القائمة التالية كيف نحولها إلى Dataset:

li = [[1,11], [1,2,3]]

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يمكنك استخدام الدالة tf.data.Dataset.from_generator لتحويل أي iterable في بايثون (أي قوائم أو قواميس أو tubles أو set) إلى Dataset ولها الشكل التالي:

from_generator(
    generator, output_types=None, output_shapes=None
)
#كما ذكرنا iter الوسيط الأول هو أي كائن 
# output_shapes: None أبعاد المخرجات وفي حالتك كونها أحجام مختلفة نضع 
# output_types: نمط الإخراج

لتطبيقها على مثالك كالتالي:

import tensorflow as tf
li = [[1,11], [1,2,3]]
#from_generator استخدام الدالة 
#none كون الأحجام مختلفة نضع المخرجات 
dataset = tf.data.Dataset.from_generator(lambda: li, tf.int32, output_shapes=[None])
# وسنستعرضها الآن
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:
  print(sess.run(next_element))  # '[1,11]'
  print(sess.run(next_element))  # '[1,2,3]'

كما يمكنك استخدام الدالة from_tensor_slices كالتالي:

dataset = tf.data.Dataset.from_tensor_slices(tf.ragged.constant(li))
# عرضها
for s in dataset:
  print(s)
"""
<tf.RaggedTensor [[1, 11]]>
<tf.RaggedTensor [[1, 2, 3]]>
"""
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

بالاضافة لاجابة علي، اذا كنت تستخدم tensorflow 2 فهناك طريقة أبسط وأسرع من استخدام generator عن طريق التعامل مع Tensor مباشرة كالتالي:

t = [[[4,2]],
     [[3,4,5]]]

rt=tf.ragged.constant(t)
dataset = tf.data.Dataset.from_tensor_slices(rt)

for x in dataset:
  print(x)

>>> <tf.RaggedTensor [[4, 2]]>
>>> <tf.RaggedTensor [[3, 4, 5]]>

والنسخ الأحدث تستطيع تحويلها ببساطة كالتالي: 

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
for element in dataset:
  print(element)
>>> tf.tensor( 1 ,shape=(), dtype=int32)
>>> tf.tensor( 2 ,shape=(), dtype=int32)
>>> tf.tensor( 3 ,shape=(), dtype=int32)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...