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

هو اي الفرق مابين tf.data.Dataset.list_files - tf.io.read_file() - tf.image.decode_jpeg ؟

السؤال

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله تعالى وبركاته،

بالنسبة ل tf.data.Dataset.list_files فهو يعمل كمستكشف أولي بمعنى أنه يستعرض نظام الملفات الخاص بك للعثور على ملفات معينة تتوافق مع نمطك مثل .jpg" لكنه لا يقوم بفتحها فعليا فهو ببساطة ينشئ مجموعة بيانات تحتوي على مسارات الملفات كسلاسل نصية.
أي أنه يختلف ذلك عن tf.io.read_file() الذي يأخذ تلك المسارات المكتشفة ويسترجع المحتوى الخاص بكل ملف وهي البيانات الثنائية كما هي مخزنة في الملف، أي السلسلة من البايتات التي تكوّن الملف بدون أي معالجة أو تفسير مع الحفاظ على البيانات في شكلها المضغوط والمشفر دون تفسير ما تمثله البايتات.
وأخيرا يقوم tf.image.decode_jpeg بتحويل تلك البايتات الخام إلى تمثيل بصري ذي معنى عن طريق فك الضغط وتفسير الترميز الخاص ب JPEG وتحويلها إلى متجه ثلاثي الأبعاد بأبعاد تمثل الارتفاع والعرض وقنوات الألوان التي يمكن لنموذجك معالجتها.

  • 0
نشر

تمام جدا

بس بعد الخطوات دي كده انا حولت الصور الخام الي ارقم النمووذج يقدر يتعلم منها صح كده وانا عرف ان برد فيه خطوات معالجه تاني قبل التدريب النموذج بس انا اقصد انا الصور خالص بقات ارقم صح كده

بتاريخ 4 دقائق مضت قال ياسر مسكين:

وعليكم السلام ورحمة الله تعالى وبركاته،

بالنسبة ل tf.data.Dataset.list_files فهو يعمل كمستكشف أولي بمعنى أنه يستعرض نظام الملفات الخاص بك للعثور على ملفات معينة تتوافق مع نمطك مثل .jpg" لكنه لا يقوم بفتحها فعليا فهو ببساطة ينشئ مجموعة بيانات تحتوي على مسارات الملفات كسلاسل نصية.
أي أنه يختلف ذلك عن tf.io.read_file() الذي يأخذ تلك المسارات المكتشفة ويسترجع المحتوى الخاص بكل ملف وهي البيانات الثنائية كما هي مخزنة في الملف، أي السلسلة من البايتات التي تكوّن الملف بدون أي معالجة أو تفسير مع الحفاظ على البيانات في شكلها المضغوط والمشفر دون تفسير ما تمثله البايتات.
وأخيرا يقوم tf.image.decode_jpeg بتحويل تلك البايتات الخام إلى تمثيل بصري ذي معنى عن طريق فك الضغط وتفسير الترميز الخاص ب JPEG وتحويلها إلى متجه ثلاثي الأبعاد بأبعاد تمثل الارتفاع والعرض وقنوات الألوان التي يمكن لنموذجك معالجتها.

 

  • 0
نشر

لدينا tf.data.Dataset.list_files حيث تستخدم هذه الدالة لإنشاء كائن tf.data.Dataset يحتوي على قائمة بأسماء الملفات التي تتطابق مع النمط المحدد في pattern، و هذه الطريقة مفيدة عند العمل مع مجموعات بيانات كبيرة، حيث توفر وسيلة ديناميكية لتحميل الملفات دون الحاجة إلى تحديدها يدويا.

أما tf.io.read_file فتعمل هذه الدالة على قراءة محتوى الملف المحدد كبيانات خام دون تفسيرها أو تحويلها إلى صيغة محددة، و تستخدم عادة كخطوة وسيطة عند التعامل مع الصور أو النصوص، حيث يتم تحميل البيانات من الملفات قبل معالجتها أو تحويلها إلى نوع بيانات قابل للاستخدام داخل TensorFlow.

بالنسبة ل tf.image.decode_jpeg فتستخدم هذه الدالة لفك تشفير الصور المخزنة بصيغة JPEG وتحويلها إلى كائن Tensor، حيث تأخذ الدالة البيانات الخام التي تم تحميلها باستخدام tf.io.read_file، ثم تقوم بتحويلها إلى مصفوفة تمثل الصورة بالأبعاد، و يمكن تحديد عدد القنوات اللونية للصورة من خلال المعامل channels، حيث يمكن ضبطه إلى 3 للحصول على صورة ملونة أو 1 للحصول على صورة بتدرجات الرمادي، و هذه الدالة أساسية عند التعامل مع بيانات الصور في مشاريع تعلم الآلة ورؤية الحاسوب.

  • 0
نشر
بتاريخ 1 ساعة قال Ali Ahmed55:

طيب ممكن مثال بالكود ؟

فرضًا لدينا مجلد يحتوي على صور بصيغة JPEG، وتريد تحميلها وعرض أول صورة، فالطريقة كالتالي:

import tensorflow as tf
import matplotlib.pyplot as plt

file_paths = tf.data.Dataset.list_files("./images/*.jpg") 

def load_and_decode_image(file_path):
    image_data = tf.io.read_file(file_path)
    image = tf.image.decode_jpeg(image_data, channels=3)  
    return image

dataset = file_paths.map(load_and_decode_image)

iterator = iter(dataset)
first_image = next(iterator)

plt.imshow(first_image.numpy())
plt.axis('off')  
plt.show()

في file_paths نقوم بإنشاء Dataset يحتوي على مسارات ملفات الصور التي تنتهي بـ .jpg في المجلد المحدد.

و load_and_decode_image هي دالة تستقبل مسار ملف، تقرأه بـ tf.io.read_file، ثم تحول البايتات إلى صورة بـ tf.image.decode_jpeg.

بينما ميثود map هي للتكرار على كل عنصر في الـ Dataset لتحويل المسارات إلى صور.

وفي العرض plt.imshow(first_image.numpy()) نحدد أول صورة من الـ Dataset ونعرضها.

وفي حال أردنا صيغة أخرى غير JPEG مثل PNG، نكتب tf.image.decode_png بدلاً من tf.image.decode_jpeg، وتستطيع أيضًا إضافة خطوات إضافية مثل تغيير حجم الصورة بـ tf.image.resize إذا لزم الأمر.

  • 0
نشر
بتاريخ On 24‏/3‏/2025 at 16:33 قال Mustafa Suleiman:

فرضًا لدينا مجلد يحتوي على صور بصيغة JPEG، وتريد تحميلها وعرض أول صورة، فالطريقة كالتالي:

import tensorflow as tf
import matplotlib.pyplot as plt

file_paths = tf.data.Dataset.list_files("./images/*.jpg") 

def load_and_decode_image(file_path):
    image_data = tf.io.read_file(file_path)
    image = tf.image.decode_jpeg(image_data, channels=3)  
    return image

dataset = file_paths.map(load_and_decode_image)

iterator = iter(dataset)
first_image = next(iterator)

plt.imshow(first_image.numpy())
plt.axis('off')  
plt.show()

في file_paths نقوم بإنشاء Dataset يحتوي على مسارات ملفات الصور التي تنتهي بـ .jpg في المجلد المحدد.

و load_and_decode_image هي دالة تستقبل مسار ملف، تقرأه بـ tf.io.read_file، ثم تحول البايتات إلى صورة بـ tf.image.decode_jpeg.

بينما ميثود map هي للتكرار على كل عنصر في الـ Dataset لتحويل المسارات إلى صور.

وفي العرض plt.imshow(first_image.numpy()) نحدد أول صورة من الـ Dataset ونعرضها.

وفي حال أردنا صيغة أخرى غير JPEG مثل PNG، نكتب tf.image.decode_png بدلاً من tf.image.decode_jpeg، وتستطيع أيضًا إضافة خطوات إضافية مثل تغيير حجم الصورة بـ tf.image.resize إذا لزم الأمر.

أ.مصطفي انا عملت زي حضرتك بس فيه مشكله ودي المشكله

---------------------------------------------------------------------------
FailedPreconditionError                   Traceback (most recent call last)
<ipython-input-7-11035969bd6d> in <cell line: 2>()
      1 iterator = iter(cats_images)
----> 2 first_image = next(iterator)
      3 
      4 plt.imshow(first_image.numpy())
      5 plt.axis('off')

/usr/local/lib/python3.10/dist-packages/tensorflow/python/data/ops/iterator_ops.py in __next__(self)
    824   def __next__(self):
    825     try:
--> 826       return self._next_internal()
    827     except errors.OutOfRangeError:
    828       raise StopIteration

/usr/local/lib/python3.10/dist-packages/tensorflow/python/data/ops/iterator_ops.py in _next_internal(self)
    774     # to communicate that there is no more data to iterate over.
    775     with context.execution_mode(context.SYNC):
--> 776       ret = gen_dataset_ops.iterator_get_next(
    777           self._iterator_resource,
    778           output_types=self._flat_output_types,

/usr/local/lib/python3.10/dist-packages/tensorflow/python/ops/gen_dataset_ops.py in iterator_get_next(iterator, output_types, output_shapes, name)
   3084       return _result
   3085     except _core._NotOkStatusException as e:
-> 3086       _ops.raise_from_not_ok_status(e, name)
   3087     except _core._FallbackException:
   3088       pass

/usr/local/lib/python3.10/dist-packages/tensorflow/python/framework/ops.py in raise_from_not_ok_status(e, name)
   5981 def raise_from_not_ok_status(e, name) -> NoReturn:
   5982   e.message += (" name: " + str(name if name is not None else ""))
-> 5983   raise core._status_to_exception(e) from None  # pylint: disable=protected-access
   5984 
   5985 

FailedPreconditionError: {{function_node __wrapped__IteratorGetNext_output_types_1_device_/job:localhost/replica:0/task:0/device:CPU:0}} Error in user-defined function passed to MapDataset:12 transformation with iterator: Iterator::Root::ParallelMapV2: /kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat; Is a directory
	 [[{{node ReadFile}}]] [Op:IteratorGetNext] name: 

انا حاسس المكشله في الكود ده

cats = tf.data.Dataset.list_files('/kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat')

 

  • 0
نشر
بتاريخ 17 دقائق مضت قال Ali Ahmed55:

أ.مصطفي انا عملت زي حضرتك بس فيه مشكله ودي المشكله

---------------------------------------------------------------------------
FailedPreconditionError                   Traceback (most recent call last)
<ipython-input-7-11035969bd6d> in <cell line: 2>()
      1 iterator = iter(cats_images)
----> 2 first_image = next(iterator)
      3 
      4 plt.imshow(first_image.numpy())
      5 plt.axis('off')

/usr/local/lib/python3.10/dist-packages/tensorflow/python/data/ops/iterator_ops.py in __next__(self)
    824   def __next__(self):
    825     try:
--> 826       return self._next_internal()
    827     except errors.OutOfRangeError:
    828       raise StopIteration

/usr/local/lib/python3.10/dist-packages/tensorflow/python/data/ops/iterator_ops.py in _next_internal(self)
    774     # to communicate that there is no more data to iterate over.
    775     with context.execution_mode(context.SYNC):
--> 776       ret = gen_dataset_ops.iterator_get_next(
    777           self._iterator_resource,
    778           output_types=self._flat_output_types,

/usr/local/lib/python3.10/dist-packages/tensorflow/python/ops/gen_dataset_ops.py in iterator_get_next(iterator, output_types, output_shapes, name)
   3084       return _result
   3085     except _core._NotOkStatusException as e:
-> 3086       _ops.raise_from_not_ok_status(e, name)
   3087     except _core._FallbackException:
   3088       pass

/usr/local/lib/python3.10/dist-packages/tensorflow/python/framework/ops.py in raise_from_not_ok_status(e, name)
   5981 def raise_from_not_ok_status(e, name) -> NoReturn:
   5982   e.message += (" name: " + str(name if name is not None else ""))
-> 5983   raise core._status_to_exception(e) from None  # pylint: disable=protected-access
   5984 
   5985 

FailedPreconditionError: {{function_node __wrapped__IteratorGetNext_output_types_1_device_/job:localhost/replica:0/task:0/device:CPU:0}} Error in user-defined function passed to MapDataset:12 transformation with iterator: Iterator::Root::ParallelMapV2: /kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat; Is a directory
	 [[{{node ReadFile}}]] [Op:IteratorGetNext] name: 

انا حاسس المكشله في الكود ده

cats = tf.data.Dataset.list_files('/kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat')

 

بالضبط، الدالة tf.data.Dataset.list_files() تقوم بإرجاع قائمة بالمسارات التي تطابق النمط المُعطى، لكن أحد المسارات التي تم إرجاعها هو مسار مجلد (.../PetImages/Cat) ليس ملف صورة .jpg.

والدالة tf.io.read_file لا تستطيع قراءة محتويات مجلد، هي مصممة لقراءة محتويات ملف واحد، بالتالي عندما حاولت دالة map تطبيق load_and_decode_image على مسار المجلد ذاك، فشلت عملية tf.io.read_file بداخله.

أي المشكلة في tf.data.Dataset.list_files فعند تمرير مسار مجلد بدون أي نمط wildcard مثل * أو *.jpg في النهاية، فـ TensorFlow تعتبر أنك تريد ذلك المسار نفسه كعنصر وحيد في مجموعة البيانات، بالتالي أنت قمت بإنشاء مجموعة بيانات cats تحتوي على عنصر واحد فقط، وهو السلسلة النصية '/kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat'

يجب كتابة التالي:

cats = tf.data.Dataset.list_files('/kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat/*.jpg')

 

  • 0
نشر
بتاريخ 2 دقائق مضت قال Mustafa Suleiman:

بالضبط، الدالة tf.data.Dataset.list_files() تقوم بإرجاع قائمة بالمسارات التي تطابق النمط المُعطى، لكن أحد المسارات التي تم إرجاعها هو مسار مجلد (.../PetImages/Cat) ليس ملف صورة .jpg.

والدالة tf.io.read_file لا تستطيع قراءة محتويات مجلد، هي مصممة لقراءة محتويات ملف واحد، بالتالي عندما حاولت دالة map تطبيق load_and_decode_image على مسار المجلد ذاك، فشلت عملية tf.io.read_file بداخله.

أي المشكلة في tf.data.Dataset.list_files فعند تمرير مسار مجلد بدون أي نمط wildcard مثل * أو *.jpg في النهاية، فـ TensorFlow تعتبر أنك تريد ذلك المسار نفسه كعنصر وحيد في مجموعة البيانات، بالتالي أنت قمت بإنشاء مجموعة بيانات cats تحتوي على عنصر واحد فقط، وهو السلسلة النصية '/kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat'

يجب كتابة التالي:

cats = tf.data.Dataset.list_files('/kaggle/input/microsoft-catsvsdogs-dataset/PetImages/Cat/*.jpg')

 

تمام جدا جدا

الف شكراا جدا لحضرتك

جزاك الله كل خير

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...