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

السؤال

نشر (معدل)

لديّ .tfrecord لكني لا أعرف كيف تمت هيكلته. لذا كيف يمكننا فحص المخطط لفهم ما يحتويه ملف .tfrecord؟ 

r = tensorflow.TFRecordReader()
myfile = tensorflow.train.string_input_producer("f.tfrecord")
_, serialized_record = r.read(myfile)
... كيفية فحص serialized_record...

 

تم التعديل في بواسطة عامر ابراهيم

Recommended Posts

  • 2
نشر

حسناً لنبدأ بتوضيح تنسيق TFRecord : هو تنسيق بسيط لتخزين سلسلة من السجلات الثنائية. مخازن البروتوكول هي مكتبة عبر الأنظمة الأساسية ومتعددة اللغات لتسلسل فعال للبيانات المنظمة. يتم تعريف رسائل البروتوكول بواسطة ملفات .proto ، وهي غالباً أسهل طريقة لفهم نوع الرسالة.
الرسالة tf.train.Example (أو protobuf) هي نوع رسالة مرن يمثل تعيين {"string": value} . إنه مصمم للاستخدام مع TensorFlow ويتم استخدامه في جميع واجهات برمجة التطبيقات عالية المستوى مثل TFX .
بشكل عام ، يجب أن تقوم بتقسيم بياناتك عبر ملفات متعددة حتى تتمكن من موازنة الإدخال / الإخراج (داخل مضيف واحد أو عبر مضيفين متعددين). القاعدة الأساسية هي أن يكون لديك ما لا يقل عن 10 أضعاف عدد الملفات التي سيكون هناك مضيفون يقرؤون البيانات. وفي الوقت نفسه ، يجب أن يكون كل ملف كبيراً بدرجة كافية (10 ميجا بايت على الأقل و 100 ميجا بايت على الأقل) حتى تتمكن من الاستفادة من الجلب المسبق للإدخال / الإخراج. على سبيل المثال ، لنفترض أن لديك X جيجابايت من البيانات وأنك تخطط للتدريب على ما يصل إلى N مضيفين. من الناحية المثالية ، يجب أن تقوم بتقسيم البيانات إلى ~ 10*N الملفات ، طالما أن ~ X/(10*N) هي 10 ميجا بايت + (وبشكل مثالي 100 ميجا بايت +). إذا كان أقل من ذلك ، فقد تحتاج إلى إنشاء عدد أقل من الأجزاء لمقايضة مزايا التوازي ومزايا الجلب المسبق للإدخال / الإخراج.
الآن لقراءة ملف TFRecord :
يمكن تحليل الموترات التي تمت سلسلتها "serialized tensors"  باستخدام tf.train.Example.ParseFromString:

filenames = [filename]
raw_dataset = tf.data.TFRecordDataset(filenames)
raw_dataset
# <TFRecordDatasetV2 shapes: (), types: tf.string>
for raw_record in raw_dataset.take(1):
  example = tf.train.Example()
  example.ParseFromString(raw_record.numpy())
  print(example)
"""
features {
  feature {
    key: "feature0"
    value {
      int64_list {
        value: 1
      }
    }
  }
  feature {
    key: "feature1"
    value {
      int64_list {
        value: 1
      }
    }
  }
  feature {
    key: "feature2"
    value {
      bytes_list {
        value: "dog"
      }
    }
  }
  feature {
    key: "feature3"
    value {
      float_list {
        value: -0.9885607957839966
      }
    }
  }
}
"""

كما يمكنك قراءتها من خلال tf_record_iterator مثلاً:

import tensorflow.python_io.tf_record_iterator as record
import tensorflow as tf
for sample in record("file.tfrecord"):
    output = tf.train.SequenceExample.FromString(sample)
    break # أزلها لعرض كل العينات
output #وإلا سيُظهر لك  محتوى العينة الأولى
# لفحص الميزات "الفيتشرز" الفردية باستخدام مفاتيحها
output.context.feature["key"]
#feature_lists من أجل 
output.feature_lists.feature_list["key"]

 

  • 1
نشر

بالنسبة إلى TF 2.0 يمكنك استخدام الكود الآتي

import tensorflow as tf 
raw_dataset = tf.data.TFRecordDataset("path-to-file")

for raw_record in raw_dataset.take(1):
    example = tf.train.Example()
    example.ParseFromString(raw_record.numpy())
    print(example)

أو يمكنك استخدام الكود الآتي

import tensorflow as tf

for example in tf.python_io.tf_record_iterator("data/foobar.tfrecord"):
    print(tf.train.Example.FromString(example))

يمكنك اضافة الكود التالي أيضا

from google.protobuf.json_format import MessageToJson
...
jsonMessage = MessageToJson(tf.train.Example.FromString(example))

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...