چارچوبهای یادگیری عمیق مانند Keras موانع ورود تودهها را کاهش میدهند و توسعه مدلهای DL را برای افراد بیتجربه دموکراتیزه میکنند، افرادی که میتوانند برای تحمل بار سنگین بر روی پیشفرضهای معقول و APIهای سادهشده تکیه کنند و نتایج مناسبی را تولید کنند.
هنگام استفاده از توابع از دست دادن Keras برای طبقه بندی، یک سردرگمی رایج بین تمرین کنندگان جدیدتر یادگیری عمیق ایجاد می شود، مانند CategoricalCrossentropy
و SparseCategoricalCrossentropy
:
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)
چطوری؟
from_logits
پرچم اشاره به؟
پاسخ نسبتاً ساده است، اما نیاز به نگاهی به خروجی شبکه ای دارد که می خواهیم با استفاده از تابع ضرر درجه بندی کنیم.
Logits و SoftMax Probabilities
بطور خلاصه:
احتمالات عادی می شوند - یعنی محدوده ای بین آنها وجود دارد
[0..1]
. لاجیت ها عادی نیستند و می توانند محدوده ای بین آنها داشته باشند[-inf...+inf]
.
بسته به لایه خروجی شبکه شما:
output = keras.layers.Dense(n, activation='softmax')(x)
output = keras.layers.Dense(n)(x)
خروجی Dense
لایه خواهد هر دو برگشت:
- احتمالات: خروجی از طریق یک تابع SoftMax ارسال می شود که خروجی را به مجموعه ای از احتمالات عادی تبدیل می کند.
n
، که همه جمع می شوند1
. - لاجیت ها:
n
فعال سازی ها
این تصور اشتباه احتمالاً از نحو کوتاهی ناشی می شود که به شما امکان می دهد یک فعال سازی را به یک لایه اضافه کنید. ظاهرا به عنوان یک لایه، حتی اگر فقط مختصر باشد:
output = keras.layers.Dense(n, activation='softmax')(x)
dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)
تابع ضرر شما باید در مورد اینکه آیا باید انتظار توزیع نرمال شده (خروجی عبور از تابع SoftMax) یا لاجیت را داشته باشد، اطلاع داده شود. از این رو from_logits
پرچم!
چه موقع باید from_logits=درست است?
اگر شبکه شما احتمالات خروجی را عادی می کند، تابع ضرر شما باید تنظیم شود from_logits
به False
، زیرا لاجیت را نمی پذیرد. این نیز مقدار پیشفرض تمام کلاسهای ضرری است که پرچم را میپذیرند، زیرا اکثر افراد یک علامت را اضافه میکنند activation='softmax'
به لایه های خروجی آنها:
model = keras.Sequential([
keras.layers.Input(shape=(10, 1)),
keras.layers.Dense(10, activation='softmax')
])
input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)
این نتیجه در:
tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)
از آنجایی که این شبکه منجر به توزیع نرمال می شود - هنگام مقایسه خروجی ها با خروجی های هدف، و درجه بندی آنها از طریق یک تابع ضرر طبقه بندی (برای کار مناسب) - شما باید تنظیم کنید from_logits
به False
، یا اجازه دهید مقدار پیش فرض باقی بماند.
از طرف دیگر، اگر شبکه شما SoftMax را روی خروجی اعمال نمی کند:
model = keras.Sequential([
keras.layers.Input(shape=(10, 1)),
keras.layers.Dense(10)
])
input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)
این نتیجه در:
tf.Tensor(
[[[-0.06081138 0.04154852 0.00153442 0.0705068 -0.01139916
0.08506121 0.1211026 -0.10112958 -0.03410497 0.08653068]]], shape=(1, 1, 10), dtype=float32)
شما باید تنظیم کنید from_logits
به True
برای اینکه عملکرد تلفات به درستی با خروجی ها رفتار کند.
چه زمانی از SoftMax در خروجی استفاده کنیم؟
اکثر پزشکان SoftMax را روی خروجی اعمال میکنند تا یک توزیع احتمال عادی را ارائه دهند، زیرا در بسیاری از موارد این همان چیزی است که شما از یک شبکه برای آن استفاده میکنید – به خصوص در مطالب آموزشی سادهشده. با این حال، در برخی موارد، شما کار را انجام ندهید می خواهید تابع را در خروجی اعمال کنید تا قبل از اعمال SoftMax یا تابع دیگری، آن را به روشی متفاوت پردازش کنید.
یک مثال قابل توجه از مدلهای NLP میآید، که در آن یک احتمال واقعی بیش از یک واژگان بزرگ میتواند در تانسور خروجی وجود داشته باشد. اعمال SoftMax روی همه آنها و حریصانه به دست آوردن argmax
معمولاً نتایج خیلی خوبی ایجاد نمی کند.
با این حال، اگر logit ها را مشاهده کردید، Top-K را استخراج کنید (که در آن K می تواند هر عددی باشد اما معمولاً جایی بین [0...10]
، و تنها پس از اعمال SoftMax به top-k نشانه های ممکن در واژگان توزیع را به طور قابل توجهی تغییر می دهند و معمولا نتایج واقعی تری تولید می کنند.
راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!
این به عنوان نمونه برداری Top-K شناخته می شود، و اگرچه استراتژی ایده آل نیست، معمولاً به طور قابل توجهی از نمونه برداری حریصانه بهتر عمل می کند.
رفتن به جلو - یادگیری عمیق عملی برای بینایی کامپیوتر
طبیعت کنجکاو شما باعث می شود که بخواهید جلوتر بروید؟ توصیه می کنیم ما را بررسی کنید دوره: "یادگیری عمیق عملی برای بینایی کامپیوتر با پایتون".
یکی دیگر از دوره های بینایی کامپیوتر؟
ما طبقه بندی ارقام MNIST یا مد MNIST را انجام نخواهیم داد. آنها مدتها پیش نقش خود را انجام دادند. بسیاری از منابع یادگیری قبل از اینکه به معماریهای جعبه سیاه پیشرفته اجازه دهند بار عملکرد را به دوش بکشند، روی مجموعه دادههای پایه و معماریهای پایه تمرکز میکنند.
ما می خواهیم روی آن تمرکز کنیم ابهام زدایی, عملی بودن, درک, شهود و پروژه های واقعی. می خواهند یاد بگیرند چگونه تو می توانی تفاوت ایجاد کنی؟ ما شما را از روشی که مغزمان تصاویر را پردازش میکند تا نوشتن طبقهبندیکننده یادگیری عمیق برای سرطان سینه تا شبکههای یادگیری عمیق که «توهم میکنند»، آموزش اصول و تئوری به شما از طریق کار عملی، و تجهیز شما به دانش و ابزارهایی برای تبدیل شدن به یک متخصص در استفاده از یادگیری عمیق برای حل بینایی کامپیوتر.
داخل چیست؟
- اولین اصول بینایی و نحوه آموزش دیدن کامپیوترها
- وظایف و کاربردهای مختلف بینایی کامپیوتر
- ابزارهای تجارت که کار شما را آسان می کند
- یافتن، ایجاد و استفاده از مجموعه داده ها برای بینایی کامپیوتری
- تئوری و کاربرد شبکه های عصبی کانولوشنال
- مدیریت تغییر دامنه، همزمانی و سایر سوگیری ها در مجموعه داده ها
- آموزش را انتقال دهید و از زمان آموزشی و منابع محاسباتی دیگران به نفع خود استفاده کنید
- ساخت و آموزش پیشرفته ترین طبقه بندی سرطان سینه
- چگونه می توان دوز سالمی از شک و تردید را در ایده های جریان اصلی به کار برد و پیامدهای تکنیک های پذیرفته شده را درک کرد
- تجسم فضای مفهومی ConvNet با استفاده از t-SNE و PCA
- مطالعات موردی چگونگی استفاده شرکت ها از تکنیک های بینایی کامپیوتری برای دستیابی به نتایج بهتر
- ارزیابی صحیح مدل، تجسم فضای پنهان و شناسایی توجه مدل
- انجام تحقیقات دامنه، پردازش مجموعه داده های خود و ایجاد آزمون های مدل
- معماری های پیشرفته، پیشرفت ایده ها، آنچه آنها را منحصر به فرد می کند و نحوه اجرای آنها
- KerasCV - یک کتابخانه WIP برای ایجاد خطوط لوله و مدل های پیشرفته
- نحوه تجزیه و خواندن مقالات و پیاده سازی آنها توسط خودتان
- انتخاب مدل ها بسته به برنامه شما
- ایجاد خط لوله یادگیری ماشینی سرتاسر
- چشم انداز و شهود در تشخیص اشیا با R-CNN سریعتر، رتینا نت، SSD و YOLO
- نمونه و تقسیم بندی معنایی
- تشخیص شی در زمان واقعی با YOLOv5
- آموزش آشکارسازهای شی YOLOv5
- کار با ترانسفورماتورها با استفاده از KerasNLP (کتابخانه WIP با قدرت صنعتی)
- ادغام ترانسفورماتورها با ConvNets برای تولید شرح تصاویر
- عمیق
نتیجه
در این راهنمای کوتاه، نگاهی به آن انداختهایم from_logits
استدلال برای کلاس های ضرر Keras، که اغلب سوالاتی را با تمرین کنندگان جدیدتر ایجاد می کند.
این سردرگمی احتمالاً از نحو کوتاهی ناشی میشود که اجازه میدهد لایههای فعالسازی را در بالای لایههای دیگر، در تعریف خود لایه، اضافه کند. ما در نهایت نگاهی به زمان تنظیم آرگومان انداختیم True
or False
، و زمانی که یک خروجی باید به صورت logit باقی بماند یا از طریق یک تابع فعال سازی مانند SoftMax منتقل شود.