قدمنا في القسم السابق، وهي تقنية أكثر استشرافا للمستقبل، ودعا وحدات سلو مخفي و أكثر سهولة الأمثل ResNet، وسلو زيادة تبسيط عملية للسلوك الخلايا العصبية دفعة Normaliztion ضمنية طبقة تطبيع الفكر، وResNet فمن لإضافة اتصال الهوية يجعل شبكة العميقة لديها تدفق التدرج كبير في عملية التدريب، لتخفيف يختفي التدرج.
نحن أول بيانات أزياء MNIST كل طبقة 56 و 20 لبناء طبقة الشبكة العصبية بسيطة، واستخدام التقنيات شيوعا في الدورة السابقة لدينا المعنية، كنا كما خوارزمية الأمثل آدم، RELU وحدات المخفية. لاحظ أن هنا لا نستخدم هذه العملية الإلتواء، لمجرد أننا نريد أن نرى العمل على حد سواء في عملية التحسين، بدلا من تمثيل الحصول على أفضل.
في keras، اعتمادا على المعرفة التي تعلمناها سابقا، وتحقيق هذا أمر سهل، فإننا يمكن أن يحدد بسرعة الشبكتين التالية:
استيراد نمباي كما أرستها
من keras.layers استيراد المدخلات
من keras.datasets استيراد fashion_mnist، mnist
من keras استيراد النماذج، والطبقات
matplotlib.pyplot استيراد كما معاهدة قانون البراءات
من keras.models استيراد نموذج
من keras.models استيراد متسلسل
من أبتيميزر استيراد keras
من keras.layers استيراد الكثيفة، التسرب، تفعيل
من keras.utils to_categorical استيراد
من BatchNormalization keras.layers استيراد كما BN
(X_test، y_test)، (X_train، y_train) = fashion_mnist.load_data ()
train_labels = to_categorical (y_train)
test_labels = to_categorical (y_test)
X_train = X_train.reshape (10000،28 * 28)
X_train = X_train.astype ( 'float32') / 255
X_test = X_test.reshape (60000، 28 * 28)
X_test = X_test.astype ( 'float32') / 255
صفر نموذج (ن):
نموذج = models.Sequential ()
model.add (الكثيفة (512، وتفعيل = 'relu، input_shape = (28 * 28،)))
إلى أنا في مجموعة (ن):
model.add (الكثيفة (256، 'relu' = تفعيل))
model.add (الكثيفة (10، تفعيل = "softmax '))
model.compile (محسن = optimizers.Adam ()، وفقدان = 'categorical_crossentropy'، \
مقاييس = )
عودة (النموذجي)
MODEL1 = نموذج (20)
his1 = model1.fit (X_train، train_labels، batch_size = 128، validation_split = 0.3، مطول = 1، العهود = 10)
MODEL2 = نموذج (56)
his2 = model2.fit (X_train، train_labels، batch_size = 128، validation_split = 0.3، مطول = 1، العهود = 10)
هنا نستخدم حلقة بسيطة لتحقيق العدد التراكمي للطبقات، (علما أن هذا هو 21 طبقات و 57 طبقات، بسبب طبيعة طبقة المدخلات هي طبقة خفية، لكنها لن تؤثر على تفسير الواقع، يغفر ما بلدي الإهمال) تليها الخطأ المراقبة على التدريب والاختبار للمجموعات مع العهود التغيير:
W1 = his1.history
W2 = his2.history
matplotlib.pyplot استيراد كما معاهدة قانون البراءات
سيبورن استيراد كما SNS
sns.set (نمط = 'الأبيض')
plt.plot (المدى (10)، ، 'ذ -'، والتسمية = '20 طبقة ')
plt.plot (المدى (10)، ، 'ص -'، والتسمية = '56 طبقة ')
plt.xlabel ( 'العهود')
plt.ylabel ( 'خطأ اختبار')
plt.legend ()
ووفقا لخطأ على نقطة أداء مجموعة الاختبار للعرض، أداء 56 طبقة نموذج بسيط أقل بكثير من طراز 20 طابقا فقط، وهذه المرة، ونحن بحاجة لمراقبة أداء خطأ على مجموعة التدريب لتحديد النموذج الذي هو طبقة بسيطة 56 كان التدريب الجيد، لأنه وفقا لهذه النظرية، والمزيد من طبقات الشبكة العصبية، وزيادة قدرة هذا النموذج، لا يمكننا ببساطة تبدو في مجموعة اختبار لتحديد ما إذا تم أو لم يتم تركيبها نموذج للتدريب:
plt.figure ()
plt.plot (المدى (10)، ، 'ذ -'، والتسمية = '20 طبقة ')
plt.plot (المدى (10)، ، 'ص -'، والتسمية = '56 طبقة ')
plt.xlabel ( 'العهود')
plt.ylabel ( 'خطأ التدريب')
plt.legend ()
plt.show ()
يمكننا أن نرى أن 56 نموذج طبقة تقريبا لم تحصل على أي تدريب، يتم الاحتفاظ معلمات الشبكة العصبية إلى حد كبير في تهيئة مستوى، وهو ما نحتاج إليه للاستفادة من هذه المشكلة الأمثل حلها سلو وResNet.
سلو المستخدمة في kerasسلو في keras بسيطة نسبيا، ونحن يمكن تنشيط مباشرة تنشيط طبقة الحجج وظيفة ل"سلو" (وبطبيعة الحال، يمكننا أيضا إضافة طبقة منفصلة أنفسهم على استعداد، والتي سيتم تغطيتها في الدروس اللاحقة):
صفر lay56_model (ن):
نموذج = models.Sequential ()
model.add (الكثيفة (512، وتفعيل = "سلو"، input_shape = (28 * 28،)))
إلى أنا في مجموعة (ن):
model.add (الكثيفة (256، "سلو '= تفعيل)) # relu إلى سلو
model.add (الكثيفة (10، تفعيل = "softmax '))
model.compile (محسن = optimizers.Adam ()، وفقدان = 'categorical_crossentropy'، \
مقاييس = )
عودة (النموذجي)
كرر الخطوات المذكورة أعلاه، وتعرض للتدريب على التوالي والخطأ على خطأ على مجموعة اختبار مجموعة التدريب:
كما يمكن أن يرى، على الرغم من أن مقارنة relu الكثير من الخير، ولكن عملية التحسين لا يزال ضعيفا، قد تكون هناك أسباب لجولات متكررة جدا، لأن النماذج سرعة التقارب والقدرة الكبيرة عادة ما تكون أبطأ، ونحن سوف العهود قابلة للتوسيع إلى 50 مرة، ونحن سوف نتطلع إلى مستوى أكثر مرضية من التقارب في الجزء الخلفي من جولات:
ولكن يمكن أن ينظر إليه من هذا النموذج الرقم، 56 طبقة من الأخطاء الاختبار والتدريب الشاملة أخطاء على الخطأ الكلي نموذج 20 طبقة، ثم وهذا هو لسلو سواء لاستخدامها؟ إذا كان لا يمكن أن يبنى من الشبكات العصبية تطبيع تفعل؟
هنا نحن بحاجة إلى إيلاء الاهتمام لشرطين سلو من:
- ومن المفترض أن إدخال البيانات X هو موضوع لتوزيع جاوس القياسية، موحدة الطريقة التي كانت تستخدم في السابق، هو المقياس بسيط:
X_train = X_train.astype ( 'float32') / 255
لكننا نريد تغييره إلى توزيع جاوس، الصورة الرمادية في حد ذاته هو موتر من الدرجة الثانية، فإنه من الصعب القيام به مع الوسائل التقليدية التوحيد، سيضطر توحيد لتدمير بنية الصورة نفسها، ولكن بالنسبة لنا هذا لا علاقة له استخدام موحدة محلية الشبكة العصبية، وجميع البيانات تمهيد، يمكنك استخدام وسائل الأصلي موحدة:
من sklearn.preprocessing StandardScaler استيراد
X_train = X_train.reshape (10000،28 * 28)
نطاق = StandardScaler (). صالح (X_train)
X_train = scale.transform (X_train)
- ومن المفترض أن معاملات الوزن طاعة الصفر الحسابي والتباين كما عكس أبعاد المدخلات، فمن الصعب للتأكد من أن عملية التدريب، كل سلو معاملات الوزن طاعة التوزيع، ولكن يمكننا على الأقل أن تفعل ذلك في عملية التهيئة ، keras توفر مهيئ lecun_normal، يمكننا بسهولة ضبط التهيئة لكل طبقة:
صفر lay56_model (ن):
نموذج = models.Sequential ()
model.add (الكثيفة (512، وتفعيل = "سلو"، \
kernel_initializer = lecun_normal ()، \
input_shape = (28 * 28،)))
إلى أنا في مجموعة (ن):
model.add (الكثيفة (256، وتفعيل = "سلو"، \
kernel_initializer = lecun_normal ()))
model.add (الكثيفة (10، kernel_initializer = lecun_normal ()، وتفعيل = "softmax '))
model.compile (محسن = optimizers.Adam ()، وفقدان = 'categorical_crossentropy'، \
مقاييس = )
عودة (النموذجي)
بعد ذلك، نقوم بتدريب المستقبل لتعديل نتائج النموذج هي كما يلي:
كما هو مبين، يمكننا أن نرى أن أعمق في بيانات الشبكة وتم تطبيع لتوزيع جاوس القياسية والمحددة التهيئة العملية الأوزان قيمة مساعدة في تحسين أفضل من الضحلة، سيتم تخفيض على بعد خطوات قليلة في الخطأ إلى أكثر مستويات منخفضة.
في وحدة نمطية البناء المتبقية Kerasنحن بحاجة إلى بناء شبكة مع وظيفة رسم الخرائط الهوية، ودورها هو تضاف المدخلات والانتاج الحالي قبل ان يحصل على طبقات، في keras نحن بحاجة لكتابة وظيفة:
صفر identity_block (المدخلات، وحدة، والعمل):
س = layers.Dense (وحدات، وتفعيل عمل =) (المدخلات)
س = layers.Activation ( 'relu') (خ)
س = layers.Dense (وحدات، وتفعيل عمل =) (خ)
س = layers.Activation ( 'relu') (خ)
س = layers.Dense (وحدات، وتفعيل عمل =) (خ)
س = layers.Activation ( 'relu') (خ)
س = layers.Dense (وحدات، وتفعيل عمل =) (خ)
س = layers.add ( )
س = layers.Activation ( 'relu') (خ)
عودة س
الذي تجدر الإشارة، اعتمدنا شكل بسيط من مجموع اثنين التنسورات، وظائف لامدا في الواقع بشكل جيد ويمكن أيضا أن تستخدم عملية محددة. ثم مرة أخرى إلى وظيفة التنشيط، والنظام هنا هو الأفضل عدم لتحويل، لأنه في آخر طبقة ربط وحدة الانتاج، ونحن ما زلنا نأمل أن يكون غير الخطية.
ثم نستخدم النموذج الوظيفي إضافة إلى ذلك identity_block، لأن النموذج هو أفضل وظيفية ومرنة:
صفر res_model ():
input_tensor = الإدخال (الشكل = (28 * 28،))
س = الكثيفة (100، تفعيل = 'relu') (input_tensor)
إلى أنا في مجموعة (14):
س = identity_block (س، 100، 'relu')
ذ = الكثيفة (10، تفعيل = 'softmax') (خ)
نموذج = نموذج (المدخلات = input_tensor والمخرجات = ذ)
model.compile (محسن = optimizers.Adam ()، وفقدان = 'categorical_crossentropy'، \
مقاييس = )
عودة (النموذجي)
لأن كل وحدة تشمل طبقة المتبقية 4، لذلك نحن تدوير مجرد 14 مرة هنا، ولكن قبل بداية الدورة، لدينا طبقة إضافية، أي ما مجموعه 57 طبقات، ولكن لا يؤثر، لأن طبقة 57 يجب أن تكون أكثر من 56 طبقات الأمثل صعبة، لتسهيل العملية، يتم تعيين الخلايا العصبية طبقة خفية إلى 100 (وبطبيعة الحال، طبقة الشبكة 20، يجب تعيين عدد من الوحدات الخفية إلى 100)؛ لسهولة التفسير، لم نستخدم دفعة تطبيع، لأن تأثير يصبح حتى حسنا، نحن لا يمكن أن أقول في النهاية هو دور وحدة المتبقية أو تأثير BN.
بابي تدريبهم مباشرة، يمكنك الحصول على:
تدرب في الأصل أصعب طبقة الشبكة العصبية 56، إضافة بسيطة من وحدة المتبقية، فإن أثر التدريب تكون أعلى بكثير من طبقة تقارب الشبكة العصبية 20! البصيرة الأولى إلى قوة ResNet الطلاب الذين تهدئة ببطء، كوب من القهوة، وهذه المرة، ونحن لم يأخذ وحدة جدا المتبقية من ذلك بكثير وبنية معقدة، كل وحدة ترتيب بسيط لالمتبقية، والتغيير باختصار، لا علاقة بين الخريطة الهوية، ومخلفات وحدة الاتصال في العديد من المهام يمكن أن تستخدم أيضا يصبح معقدا جدا، ولكن المبدأ الأساسي هو نفسه.
الكاتب: الراهب دون هيد آند شولدرز للطبع، يرجى ترك رسالة وراء الكواليس، والامتثال للمعايير طبع