وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

Split Train، Test and Validation sets with TensorFlow Datasets – tfds

0 24
زمان لازم برای مطالعه: 6 دقیقه


معرفی

مجموعه داده های tensorflow، همچنین به عنوان شناخته می شود tfds is یک کتابخانه است که به عنوان یک بسته بندی برای مجموعه گسترده ای از مجموعه داده ها، با توابع اختصاصی برای بارگذاری، تقسیم و آماده سازی مجموعه های داده عمل می کند. ماشین و یادگیری عمیق، در درجه اول با TensorFlow.

توجه داشته باشید: در حالی که مجموعه داده های tensorflow کتابخانه مورد استفاده قرار می گیرد گرفتن داده ها ، از آن استفاده نشده است پیش پردازش داده ها. آن کار به داده های tensorflow (tf.data) کتابخانه.

همه مجموعه‌های داده‌ای که از طریق مجموعه داده‌های TensorFlow به دست می‌آیند درون آن قرار می‌گیرند tf.data.Dataset اشیاء – بنابراین شما می توانید به صورت برنامه ریزی شده طیف گسترده ای از مجموعه داده ها را به راحتی بدست آورید و آماده کنید! یکی از اولین گام هایی که پس از بارگیری و آشنایی با یک مجموعه داده بردارید این است قطار/آزمون/اعتبار سنجی شکاف.

در این راهنما، قبل از یادگیری روش بارگذاری و بارگذاری، نگاهی به مجموعه‌های آموزش، آزمایش و اعتبار سنجی خواهیم داشت. یک تقسیم قطار/آزمایش/ اعتبارسنجی با مجموعه داده‌های TensorFlow انجام دهید.

مجموعه های آموزشی و تستی

هنگام کار روی وظایف یادگیری تحت نظارت – شما می خواهید مجموعه ای از ویژگی ها و مجموعه ای از برچسب ها را برای آن ویژگی ها، به عنوان موجودیت های جداگانه یا در یک واحد به دست آورید. Dataset. فقط آموزش شبکه روی همه داده ها خوب و شیک هستند – اما شما نمی توانید دقت آن را آزمایش کنید روی همان داده‌ها، زیرا ارزیابی مدلی مانند آن می‌تواند مفید باشد حفظ کردن بجای تعمیم.

در عوض – ما قطار – تعلیم دادن مدل ها روی یک قسمت از داده ها، نگه داشتن بخشی از آن به تست مدل پس از اتمام آموزش نسبت بین این دو معمولاً 80/20 است و این یک پیش فرض نسبتا معقول است. بسته به روی با توجه به اندازه مجموعه داده، می توانید نسبت های مختلفی مانند 60/40 یا حتی 90/10 را انتخاب کنید. اگر وجود دارد زیاد نمونه های موجود در مجموعه تست، نیازی به داشتن درصد زیادی از نمونه های اختصاص داده شده به آن نیست. به عنوان مثال، اگر 1٪ ​​از مجموعه داده نشان دهنده 1.000.000 نمونه باشد – احتمالاً برای آزمایش به بیش از این نیاز ندارید!

برای برخی از مدل ها و معماری ها – شما اصلاً هیچ مجموعه آزمایشی نخواهید داشت! به عنوان مثال، هنگام آموزش شبکه های متخاصم مولد (GAN) که تصاویر را تولید می کنند – آزمایش مدل به آسانی مقایسه برچسب های واقعی و پیش بینی شده نیست! در اکثر مدل‌های مولد (موسیقی، متن، ویدئو)، حداقل تا به امروز، معمولاً یک انسان باید در مورد خروجی‌ها قضاوت کند، در این موارد، تست مجموعه کاملا زائد است

مجموعه تست باید از مدل تا مرحله آزمایش فاصله داشته باشد و همیشه باید برای آن استفاده شود استنتاج – نه آموزش. تعریف یک مجموعه آزمایشی و “فراموش کردن” تا مراحل پایانی که دقت مدل را تأیید می کنید، معمول است.

مجموعه های اعتبار سنجی

آ مجموعه اعتبار سنجی مجموعه ای بسیار مهم و گاهی نادیده گرفته می شود. مجموعه‌های اعتبارسنجی اغلب به‌عنوان «خارج از» مجموعه‌های آزمایشی توصیف می‌شوند، زیرا تصور آن راحت است، اما در واقع – آنها مجموعه‌های جداگانه‌ای هستند. هیچ قانون تنظیمی برای نسبت تقسیم وجود ندارد، اما معمول است که یک مجموعه اعتبارسنجی با اندازه مشابه با مجموعه آزمایشی، یا کمی کوچکتر – هر چیزی در امتداد خطوط 75/15/10، 70/15/15، و 70/20/10.

یک مجموعه اعتبار سنجی استفاده می شود در طول آموزش، به تقریبا اعتبار مدل روی هر دوره این به به روز رسانی مدل با ارائه “نکات” در مورد اینکه آیا عملکرد خوبی دارد یا خیر کمک می کند. علاوه بر این، لازم نیست منتظر بمانید تا مجموعه کاملی از دوره‌ها به پایان برسد تا نگاه دقیق‌تری به عملکرد واقعی مدل داشته باشید.

توجه داشته باشید: مجموعه اعتبار سنجی استفاده نمی شود برای آموزش، و مدل آموزش نمی دهد روی مجموعه اعتبارسنجی در هر نقطه مشخص برای تأیید عملکرد در یک دوره معین استفاده می شود. از آنجایی که روی آموزش تاثیر می گذارد process، مدل غیر مستقیم قطارها روی مجموعه اعتبار سنجی و بنابراین، نمی تواند باشد به طور کامل برای آزمایش قابل اعتماد است، اما تقریب/پراکسی خوبی برای به‌روزرسانی باورها در طول آموزش است.

این مشابه این است که بدانید چه زمانی اشتباه می کنید، اما ندانید پاسخ درست چیست. در نهایت، با به‌روزرسانی باورهایتان پس از اینکه متوجه شدید حق با شما نیست، به حقیقت نزدیک‌تر می‌شوید، بدون اینکه صریحاً به شما گفته شود که چیست. یک مجموعه اعتبارسنجی غیر مستقیم دانش شما را آموزش می دهد

با استفاده از یک مجموعه اعتبارسنجی – می توانید به راحتی تفسیر کنید که یک مدل به طور قابل توجهی در زمان واقعی و بر اساس بیش از حد برازش کرده است. روی تفاوت بین صحت اعتبار سنجی و آموزش، شما می توانید پاسخ هایی مانند توقف خودکار آموزش، به روز رسانی نرخ یادگیری و غیره را انتخاب کنید.

با استفاده از مجموعه داده‌های TensorFlow، مجموعه‌های Train، Test و Validation را تقسیم کنید

این load() عملکرد از tfds ماژول در یک مجموعه داده با توجه به نام آن بارگذاری می شود. اگر قبلا دانلود نشده است روی ماشین محلی – به طور خودکار مجموعه داده را با نوار پیشرفت بارگیری می کند:

import tensorflow_datasets as tfds


dataset, info = tfds.load("cifar10", as_supervised=True, with_info=True)


class_names = info.features("label").names
n_classes = info.features("label").num_classes

print(class_names) 
print(n_classes) 

یکی از آرگومان های اختیاری که می توانید به آن منتقل کنید load() تابع است split بحث و جدل.

جدید Split API به شما اجازه می دهد که کدام را تعریف کنید تقسیم می کند از مجموعه داده ای که می خواهید تقسیم کنید. به طور پیش فرض، برای این مجموعه داده، فقط از a پشتیبانی می کند 'train' و 'test' تقسیم – اینها انشعابات “رسمی” هستند این مجموعه داده. وجود ندارد valid شکاف.

توجه داشته باشید: هر مجموعه داده دارای یک “رسمی” شکاف. برخی فقط دارای تقسیم “قطار”، برخی دارای تقسیم “قطار” و “تست” و برخی حتی شامل یک تقسیم “اعتبارسنجی” هستند. این است مورد نظر تقسیم می شود و تنها در صورتی که یک مجموعه داده از یک تقسیم پشتیبانی می کند، می توانید از نام مستعار رشته آن تقسیم استفاده کنید. اگر یک مجموعه داده فقط حاوی یک تقسیم «قطار» باشد، می‌توانید آن داده‌های آموزشی را بدون مشکل به یک مجموعه قطار/آزمایش/معتبر تقسیم کنید.

اینها با tfds.Split.TRAIN و tfds.Split.TEST و tfds.Split.VALIDATION enums، که قبلاً از طریق API در نسخه قبلی در معرض دید قرار می گرفت.

شما واقعا می توانید یک را برش دهید Dataset در هر تعداد دلخواه از مجموعه ها، با این حال، ما معمولاً سه مورد را انجام می دهیم – train_set، test_set، valid_set:

test_set, valid_set, train_set = tfds.load("cifar10", 
                                           split=("test", "train(0%:20%)", "train(20%:)"),
                                           as_supervised=True, with_info=True)

print("Train set size: ", len(train_set)) 
print("Test set size: ", len(test_set))   
print("Valid set size: ", len(valid_set)) 

گرفته ایم 'test' تقسیم کرد و آن را به داخل استخراج کرد test_set. برش بین 0٪ و 20٪ از 'train' تقسیم به اختصاص داده شده است valid_set و همه چیز فراتر از 25٪ است train_set. این از طریق اندازه های خود مجموعه نیز تأیید می شود.

به جای درصد، می توانید از مقادیر مطلق یا ترکیبی از درصد و مقادیر مطلق استفاده کنید:


test_set, valid_set, train_set = tfds.load("cifar10", 
                                           split=("test", "train(0:10000)", "train(10000:)"),
                                           as_supervised=True)

print("Train set size: ", len(train_set)) 
print("Test set size: ", len(test_set))   
print("Valid set size: ", len(valid_set)) 




test_set, valid_set, train_set = tfds.load("cifar10", 
                                           split=("train(:2500)", 
                                           "train(2500:5000)",    
                                           "train(50%:)"),        
                                           as_supervised=True)

شما علاوه بر این می توانید یک اتحاد. اتصال از مجموعه‌ها، که کمتر مورد استفاده قرار می‌گیرد، زیرا مجموعه‌ها به هم متصل می‌شوند:

train_and_test, half_of_train_and_test = tfds.load("cifar10", 
                                split=('train+test', 'train(:50%)+test'),
                                as_supervised=True)
                                
print("Train+test: ", len(train_and_test))               
print("Train(:50%)+test: ", len(half_of_train_and_test)) 

این دو مجموعه در حال حاضر به شدت در هم آمیخته شده اند.

حتی تقسیم برای N مجموعه

باز هم، می توانید هر تعداد دلخواه تقسیم را ایجاد کنید، فقط با افزودن تقسیم های بیشتر به لیست تقسیم:

split=("train(:10%)", "train(10%:20%)", "train(20%:30%)", "train(30%:40%)", ...)

با این حال، اگر تقسیم‌های زیادی ایجاد می‌کنید، به‌ویژه اگر زوج باشند – رشته‌هایی که از آنها عبور می‌کنید بسیار قابل پیش‌بینی هستند. این را می توان با ایجاد لیستی از رشته ها، با یک بازه مساوی (مانند 10٪) در عوض خودکار کرد. دقیقا برای این منظور، tfds.even_splits() تابع لیستی از رشته ها را با توجه به یک رشته پیشوند و تعداد مورد نظر تقسیم می کند:

import tensorflow_datasets as tfds

s1, s2, s3, s4, s5 = tfds.even_splits('train', n=5)

split_list = (s1, s2, s3, s4, s5)
print(f"Type: {type(s1)}, contents: '{s1}'")


for split in split_list:
    test_set = tfds.load("cifar10", 
                                split=split,
                                as_supervised=True)
    print(f"Test set length for Split {split}: ", len(test_set))

این منجر به:

Test set length for Split train(0%:20%):  10000
Test set length for Split train(20%:40%):  10000
Test set length for Split train(40%:60%):  10000
Test set length for Split train(60%:80%):  10000
Test set length for Split train(80%:100%):  10000

متناوبا، شما می توانید در کل پاس کنید split_list به عنوان split خود آرگومان، برای ساخت چندین مجموعه داده تقسیم خارج از یک حلقه:

ts1, ts2, ts3, ts4, ts5 = tfds.load("cifar10", 
                                split=split_list,
                                as_supervised=True)

نتیجه

در این راهنما، نگاهی به مجموعه‌های آموزشی و آزمایشی و همچنین اهمیت مجموعه‌های اعتبارسنجی انداخته‌ایم. در نهایت، ما API جدید Splits کتابخانه TensorFlow Datasets را بررسی کرده‌ایم و یک تقسیم قطار/آزمون/ اعتبارسنجی انجام داده‌ایم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-07 06:48:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید