تحويل مجموعة بيانات TensorFlow إلى دفعات جاهزة للتدريب
في عملية تدريب نموذج TensorFlow على مجموعة بيانات الصور الخاصة بك، يظهر أنك قد قمت بتحميل الصور والتسميات الخاصة بها باستخدام TensorFlow وقد تقف أمامك الآن تحدي تقسيم هذه البيانات إلى دفعات (batches) للتدريب بشكل فعال. سأقدم لك إرشادات تفصيلية حول كيفية تحقيق ذلك باستخدام الأكواد التي قدمتها والتي يبدو أنك قد حاولت استخدامها.
أولاً، تحتاج إلى دمج الكود الذي قدمته مع الأكواد الخاصة بتشكيل الدفعات وقراءة البيانات من الطوابير (queues). الأكواد الأساسية التي يجب دمجها تظهر في الأمثلة أدناه:
-
تحديثات Swift: التحديات والحلول28/03/2024
-
جمع الأرقام في Objective-C31/03/2024
-
مقارنة بين AWS CodeDeploy و Jenkins08/03/2024
أولاً، تقوم بقراءة البيانات من الملفات باستخدام الطابور (queue):
pythondef read_my_file_format(filename_queue):
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [[""], [1]]
col1, col2 = tf.decode_csv(value, record_defaults=record_defaults)
features = tf.pack([col2])
return features, col2
def input_pipeline(filenames, batch_size, num_epochs=None):
filename_queue = tf.train.string_input_producer(
filenames, num_epochs=num_epochs, shuffle=True)
example, label = read_my_file_format(filename_queue)
min_after_dequeue = 10000
capacity = min_after_dequeue + 3 * batch_size
example_batch, label_batch = tf.train.shuffle_batch(
[example, label], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return example_batch, label_batch
الآن، تقوم بتحديد متغيرات الدفعات والتفاعل مع TensorFlow Session:
python# تحديد حجم الدفعات وعدد الحلقات
batch_size = 32
num_epochs = 10
# تحديد قائمة الملفات
files = tf.train.match_filenames_once('*.JPG')
# إنشاء الدفعات
example_batch, label_batch = input_pipeline(files, batch_size, num_epochs)
# تهيئة البيئة
init = tf.global_variables_initializer()
# بدء التدريب
with tf.Session() as sess:
sess.run(init)
# تهيئة الطابور
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
try:
# الحلقة التدريبية
for epoch in range(num_epochs):
total_batches = len(files) // batch_size
for i in range(total_batches):
# استخراج الدفعة
batch_features, batch_labels = sess.run([example_batch, label_batch])
# قم بتدريب النموذج باستخدام الدفعة المستخرجة
# قم بتنفيذ العمليات اللازمة هنا (حسب النموذج الخاص بك)
except tf.errors.OutOfRangeError:
print("تم الانتهاء من الحقبة.")
finally:
# إيقاف الطابور
coord.request_stop()
coord.join(threads)
تحتاج إلى تخصيص الجزء الأخير من الشيفرة لتناسب نموذج التدريب الخاص بك. استخدم batch_features
و batch_labels
كبيانات الدفعة في عملية التدريب الخاصة بك داخل الحلقة التدريبية. يمكنك استبدال الشيفرة في الجزء “قم بتدريب النموذج” بالشيفرة الخاصة بتحديث النموذج وحساب الخسائر وما إلى ذلك، حسب النموذج الخاص بك.
المزيد من المعلومات
في عملية تدريب نموذج TensorFlow على مجموعة بيانات خاصة، يُعتبر قراءة البيانات وتجهيزها بشكل صحيح أمرًا حاسمًا لضمان فعالية وفعالية التدريب. في هذا السياق، يظهر أن لديك تحديات في تحميل البيانات وتحويلها إلى دُفعات قابلة للتدريب باستخدام TensorFlow.
المقال الخاص بقراءة البيانات في TensorFlow الذي قدمته يحتوي على عدة خطوات مهمة، ولكن الجزء الذي تحتاج إلى الانتباه إليه هو كيفية تحويل مجموعة الأمثلة إلى دُفعات جاهزة للتدريب. في المثال الذي وفرته، يمكنك استخدام دالة tf.train.shuffle_batch
لتحقيق ذلك.
قد تقوم بتكامل الشيفرة التي قدمتها مع الكود الذي لديك بالفعل. يُفضل فهم الخطوات الأساسية التي قمت بها حتى الآن:
- قائمة بأسماء الملفات (
files
). - قائمة الاسماء (
filename_queue
) واستخدام القارئ (reader
) لقراءة الملفات. - استخدام فكّر (
decoder
) لتحويل السجلات المقروءة إلى متغيرات قابلة للاستخدام (features
وcol2
). - إعداد طابور الأمثلة (
example queue
).
بعد هذه الخطوات، يمكنك تكامل الكود التالي الذي يستخدم دالة tf.train.shuffle_batch
لتحويل طابور الأمثلة إلى دُفعات جاهزة للتدريب:
pythonmin_after_dequeue = 10000
capacity = min_after_dequeue + 3 * batch_size
example_batch, label_batch = tf.train.shuffle_batch(
[features, col2], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
يُنصح بتضمين هذا الكود في دالة input_pipeline
التي تم وفرتها في المقال الذي قمت بنشره. وبذلك، يمكنك استخدام example_batch
و label_batch
كإدخال لنموذجك أثناء عملية التدريب.
يمكنك استخدام دورة التدريب بمثابة إطار لتحديد عدد الدورات وحجم الدُفعة. يُفضل فحص المتغير total_batch
لضبط عدد الدورات والتحقق من أن كل دُفعة تحتوي على الحجم المطلوب.