القائمة الرئيسية

الصفحات

التعلم العميق وإستخداماته في الرؤية الحاسوبية - الجزء الخامس

التعلم العميق وإستخداماته في الرؤية الحاسوبية - الجزء الخامس
نقوم في هذا الجزء بتوضيح مكتبة keras وشرح مفهوم التعلم العميق deep learning بالتفصيل
التعلم العميق وإستخداماته في الرؤية الحاسوبية - الجزء الخامس


التعلم العميق وأستخداماته في الرؤية الحاسوبية - الجزء الخامس  


Deep Learning For Computer Vision-Part 5


                                   
                المهندس حسن فنجان عداي                                                                      


بسم إلله الرحمن الرحيم
سوف نقوم في بداية هذا الجزء بالمرور على مكتبة مهمة خاصة بالشبكات العصبية سواءاً التقليدية منها والعميقة ألا وهي مكتبة (keras), حيث نقوم بالتعرف عليها وعلى بعض الإمكانيات المتوفرة فيها ونقوم بإنشاء وتنفيذ تطبيقان بسيطان في الشبكات العصبية بإستخدام هذه المكتبة.

التعرف على مكتبة keras

هي منصة عمل ذات مستوى عال خاصة بالشبكات العصبية الإصطناعية مكتوبة بلغة البايثون, وتستند في عملها على إحدى المكتبات ذات المستوى الأدنى منها وهي (TensorFlow or Theano or CNTK).

وتتميز هذه المكتبة بسرعة أداءها في عملية التدريب, وهذه الميزة تعتبر مهمة جداً في مجالات التدريب عند الباحثين, وكذلك من مميزاتها هو التقليل من الكود المطلوب.

وهذه المكتبة توجد ضمناً في مكتبة (tensorflow).

سوف نقوم بإنشاء نموذج يتم تدريبه ليقوم مقام بوابة (Exclusive-OR). وقد إخترنا في هذا النموذج نفس العناصر التي إستخدمناها في التطبيق السابق من حيث عدد الطبقات وكذلك من حيث عدد الوحدات (Neurons) المستخدمة في كل طبقة وكذلك نفس الخوارزمية المستخدمة في حساب الفقد (Loss), وكذلك نفس الخوارزمية المستخدمة القيام بعمليات التحديث على العناصر (Optimizer), وكذلك إستخدمنا نفس دالة التنشيط (Activation function) التي أستخدمت في التطبيق السابق.

وسوف نقوم بإنشاء تطبيقين لتنفيذ هذه المهمة البسيطة (Exclusive-OR), حيث نستخدم في التطبيق الأول أسلوب التكديس الخطي للطبقات (Linear stack of layers) حيث نستخدم الكلاس (Sequential) لإنشاء نواة النموذج, ثم نقوم بعدها بإضافة الطبقات التي نحتاجها,أما التطبيق الثاني فسوف نستخدم فيه أسلوب آخر لإنشاء نواة النموذج وهذا الأسلوب يسمى (Keras functional API).  لنبدأ الآن بإنشاء التطبيق الأول.


التطبيق الأول:
الشكل رقم (1) يبين الكود لهذا التطبيق:
شكل رقم (1).

شرح الكود:

السطر رقم (1): لإستدعاء الكلاس (Sequential) والذي سوف نستخدمه في إنشاء نواة النموذج والذي سوف نضيف إليه طبقتين. علماً إنَّ هذا الكلاس موجود في مكتبة (tensorflow).

السطر رقم (2): لإستدعاء الكلاس (Dense) الذي نستخدمه في توليد الطبقات التي نحتاجها, وهذه الطبقات تكون من نوع الطبقات الكثيفة (Dense).

السطر رقم (3): لإستدعاء مكتبة (Numpy).

السطر رقم (5): لإنشاء مصفوفة من نوع (numpy) تستخدم كبيانات تدريب داخلة للنموذج.

السطر رقم (6): لإنشاء مصفوفة من نوع (numpy) تستخدم كبيانات تسمية (Labels) لتدريب النموذج.

السطر رقم (7): الشروع في إنشاء النموذج حيث إستخدمنا الكلاس (Sequential) لإنشاء نواة النموذج.

السطر رقم (8): لإضافة الطبقة المخفية (Hidden layer) للنموذج وذلك عن طريق الكلاس (Dense) الذي يقوم بتوليد الطبقة وتتم إضافتها إلى النموذج عن طريق الدالة (add).  لقد إستخدمنا في هذه الطبقة وحدات (Units or Neurons) عدد (5), وإستخدمنا دالة التنشيط نوع (Sigmoid).

السطر رقم (9): لإضافة طبقة الإخراج, حيث إستخدمنا فيها وحدة (Unit) واحد فقط. ودالة التنشيط أيضاً من نوع (Sigmoid activation function).

السطر رقم (10): لتهيئة النموذج لعملية التدريب وذلك بتجهيز العناصر الأساسية لعملية التدريب مثل الخوارزمية المناسبة لحساب قيمة الفقد (Loss), حيث إستخدمنا الخوارزمية المسماة (Mean squared error). كذلك نجهزه بالخوارزمية الخاصة بعملية التحسين (Optimization) وقد إخترنا له الخوارزمية المسماة (Adam). كذلك إخترنا مقياس الدقة (binary_accuracy) للظهور إثناء عملية التدريب.

السطر رقم (13): لأجل إظهار ملخص لشكل نموذجنا الذي قمنا بإنشاءه من ناحية الطبقات وما تحتويه كل طبقة من وحدات (Units), وكذلك ماتحتويه كل طبقة من عناصر خاضعة للتحديث أي (Parameters) وهي الأوزان (Weights) وكذلك قيم الإنحياز (Biases).

السطر رقم (1): للقيام بعملية التدريب (Training) عن طريق الدالة (fit), وقد قمنا بتمرير العناصر التالية إليها وهي:

1 – بيانات التدريب الخاصة بالإدخال وقد إستخدمنا المصفوفة (x_train) والتي قمنا بإنشاءها سابقاً.

2 – بيانات التدريب الخاصة بالتسميات (Labels) وقد إستخدمنا المصفوفة (y_train).

3 – عدد مرات تكرار بيانات التدريب أي عدد الحقب (Epochs).

4 – الإطناب (Verbose) في عرض النتائج أو الإختصار وقد إخترنا الرقم (1), وهي وسطى بين الإطناب والإختصار, حيث إنَّ القيم تتراوح مابين (0) و (2).

السطر رقم (2): لإختبار النموذج بعد عملية التدريب حيث نقوم بإعطاءه نفس المصفوفة الخاصة بالتدريب وإظهار المصفوفة الخارجة من النموذج للتأكد من مدى مطابقتها لمصفوفة التسميات (Labels). وبعد تنفيذ الكود أعلاه حصلنا على المصفوفة التالية:

وكما نلاحظ من النتيجة أعلاه إنها قريبة جداً من مصفوفة التسميات (y_train). 



التطبيق الثاني:

في هذا التطبيق نقوم بإنشاء نموذج يقوم بنفس وظيفة النموذج السابق ولكن هذه المرة نستخدم الأسلوب المسمى (Keras functional API) في إنشاء النموذج بكل طبقاته, ولقد قمنا بإضافة طبقة مخفية ثانية تتكون من (5) وحدات لغرض تحسين دقة النموذج , والكود موضح في الشكل التالي:

شرح الكود:

السطر رقم (1): لإستدعاء الكلاس (Dense) الذي سوف نستخدمه في إنشاء طبقة من نوع (Dense).

السطر رقم (2): لإستدعاء الكلاس (Input) الذي سوف نستخدمه في إنشاء طبقة الإدخال (Input layer) للنموذج الذي سوف نقوم بإنشاءه, كذلك لإستدعاء الكلاس (Model) الذي سوف نستخدمه في إنشاء النموذج الخاص بنا لتنفيذ المهمة وهي (Exclusive OR).

السطر رقم (3): لإستدعاء الكلاس (MSE) الذي سوف نستخدمه في إنشاء خوارزمية حساب قيمة الفقد (Loss) والتي تسمى (Mean Sequared Error).

السطر رقم (4): لإستدعاء الكلاس (Adam) والذي سوف نستخدمه في إنشاء خوارزمية التحسين (Optimizer).

السطر رقم (10):  لإنشاء طبقة الإدخال (Input layer) الخاصة بالنموذج الذي ننوي إنشاءه.

السطر رقم (11): لإنشاء الطبقة المخفية الأولى (First hidden layer) والتي تتكون من خمس وحدات (Units).

السطر رقم (12): لإنشاء الطبقة المخفية الثانية (Second hidden layer) والتي تتكون أيضاً من خمس وحدات. ونلاحظ أننا هنا قد إستخدمنا دالة التنشيط (RELU Activation function) لكلا الطبقتين وذلك لزيادة كفاءة التدريب وهذا ما سوف نتطرق إليه لاحقاً إنشاء ألله.

السطر رقم (13): لإنشاء طبقة الإخراج (Output layer) والتي تتكون من وحدة (Unit) واحدة.

ونلاحظ إنه يتم التعامل مع الطبقات على أساس إنها دوال (Functions), حيث إنَّ الطبقة السابقة توضع في نهاية جملة الكود للطبقة اللاحقة وكأنها تضرب بها.

السطر رقم (14): لإنشاء النموذج عن طريق الكلاس (Model), وهذا الكلاس يحتاج إلى معاملين هما طبقة أو طبقات الإدخال وكذلك يحتاج إلى طبقة أو طبقات الإخراج, لأننا أن ننشيء عن طريق هذا الكلاس نماذج ذات مداخل متعددة وكذلك مخارج متعددة.

السطر رقم (1): للبدأ بعملية التدريب.

السطر رقم (2): للتعرف على مايتنبأ به النموذج عند إدخال نفس بيانات الإدخال (x_train). وقد حصلنا على نتيجة مقاربة لبيانات التسمية (y_train). 




التعلم العميق  Deep Learning:
قبل الخوض بهذا الموضوع نود أن نتعرف على بعض المشاكل التي واجهت الباحثين في موضوع الشبكات العصبية الإصطناعية والتي جعلتها تراوح مكانها أي غير قابلة للتطوير, حيث إن الدقة (accuracy) لهذه الشبكات تكون محدودة في أغلب الأحيان وغير قابلة للتحسين مهما حاولنا ذلك عن طريق زيادة عدد الطبقات المخفية (hidden layers) أو عن طريق زيادة حجم بيانات التدريب (training datasets). وبعد فترة من الزمن إستطاع بعض الباحثين من إكتشاف مكامن الخلل في هذه الشبكات وتم التغلب عليها بعدة طرق سوف نقوم بالتعرف عليها لاحقاً إن شاء ألله. سميت الشبكات الجديدة بعد التطوير بالشبكات العصبية العميقة (deep neural network), حيث إنَّ الدقة التي نحصل عليها من الممكن زيادتها عن طريق زيادة عدد
الطبقات وكذلك عبر زيادة بيانات التدريب. الشكل رقم (5) يوضح الفرق بين النوعين من الشبكات من حيث
علاقة الدقة (Accuracy) أو الأداء مع حجم بيانات التدريب (Training datasets), حيث نلاحظ إنَّه عند حجم
معين من البيانات تثبت الدقة في الشبكات التقليدية مهما قمنا بزيادة هذه البيانات, أما في حالة الشبكات العميقة
فإنَّ الدقة تستمر في الزيادة. وقد تفرعت الشبكات العصبية العميقة الى نوعين هما:
1- الشبكات العصبية الإلتفافية (Convolutional Neural Networks or  CNNs).
2- الشبكات العصبية التكرارية (Recurrent Neural Networks or  RNNs). 



شرح بعض المفاهيم والتقنيات المستخدمة في تدريب الآلة والتعلم العميق

1- دالة التنشيط نوع (The Rectified Linear Unit):

وتسمى إختصاراً (ReLU) حيث تستخدم مثل باقي دوال التنشيط التي درسناها سابقاً (الجزء الثاني), حيث تقوم بتحويل مجموع المدخلات الموزونة (summed weighted inputs) الداخلة إلى النيورون إلى قيمة إخراج معينة ترسل الى الطبقات اللاحقة. من مزايا هذه الدالة هو إخراج القيمة الداخلة إليها كما هي إذا كانت هذه القيمة موجبة وبخلاف ذلك تكون قيمة الإخراج لها صفر. وبسبب هذه الميزة أصبحت هي دالة التنشيط الأكثر إستخداماً في العديد من الشبكات العصبية الإصطناعية في الوقت الحاضر لسهولة تدريب النموذج الذي يستعملها وغالباً مايحقق أداءاً أفضل ويأخذ وقتاً أقصر في التدريب لكون أن هذه الدالة تنهض فقط إذا كانت الفولتية الداخلة إليها موجبة لذلك فإنها لاتكون ناهضة طول الوقت وبذلك تقلل من زمن التدريب. ويكثر إستخدامها في الشبكات العصبية العميقة أي ذات الطبقات المتعددة وذلك بسبب القصور في دوال التنشيط المستخدمة سابقاً في الشبكات العصبية التقليدية (ANNs) مثل الدوال (sigmoid and hyperbolic tangent activation functions) والتي لايمكن إستخدامها في الشبكات العصبية العميقة بسبب مشكلة ال(vanishing gradient problem) والتي تسبب سلوكاً غير مستقر عند تدريب الشبكة.
إنَّ القيمة الخارجة من هذه الدالة لاتكون مقيدة بحد أقصى كما في الدوال الأخرى, بل تسمح بمرور أي قيمة داخلة إليها بشرط أن تكون موجبة. الشكل التالي يوضح هذه الدالة:


2- One-hot encoding:

هي وسيلة ترتيب للبيانات المستخدمة في تدريب الشبكات على عملية التصنيف (Classification) وجعلها أكثر وضوحاً وأسهل فهماً للشبكة. حيث نقوم عن طريق هذه التقنية بتحويل الجزء الخاص بقيم الإخراج القياسية (Labels) من العبارات التي تمثل الصنف (class) إلى متجه (Vector) رقمي تكون عناصره مساوية لعدد الأصناف الموجودة في بيانات التدريب (Classes).  فمثلاً إذا كانت لدينا مجموعة من أصناف الحيوانات كما في الشكل التالي:


فإذا أردنا أن نستخدم تقنية ال (One-hot encoding) فيمكن أن تكون كما في الشكل التالي:

فمثلاً إذا كانت الصورة الداخلة الى الشبكة هي (dog) فيجب أن يكون ال(Label) هو المتجه [10000] تستخدم هذه التقنية مع دالة التنشيط المسماة (Softmax activation function).

3 - Softmax activation function:

وهي دالة تنشيط غالباً ماتستخدم بعد طبقة الإخراج في الشبكات العصبية العميقة المستخدمة في عملية التصنيف (Classification). حيث تؤخذ القيم الخارجة من نيورونات طبقة الإخراج والتي تكون على هيئة أرقام ويتم إدخالها على هذه الدالة حيث تقوم بتحويل هذه الأرقام الى توزيعة من الإحتمالات بحيث يكون مجموع هذه الإحتمالات (1). وتوضع هذه الإحتمالات في متجه (Vector).  الشكل التالي يوضح المطلب:

4 – Cross-entropy:

وتستخدم هذه التقنية كدالة فقدان (Loss function) حيث تقوم بمقارنة كل عنصر في المتجه الذي يحوي القيم القياسية (label) بعد تحويلها الى (One-hot encoding) وبين مايقابلها من عناصر موجودة في المتجه الذي يحوي قيم الإحتمالات الخارجة من دالة (Softmax). فكلما كانت القيمتان متقاربتان كلما كان الناتج صغيراً الى أن يصبح مقارباً الى الصفر إذا كان هناك تطابق بين قيمة التوقع (prediction) والقيمة القياسية الموجودة في قيم الإخراج القياسية (label) الموجودة في بيانات التدريب. كلما كانت عملية التدريب تجري بالإتجاه الصحيح كلما كانت قيمة التوقع تقترب من القيمة القياسية وبالتالي يقل الخطأ. والمعادلة التالية توضح هذه التقنية:
حيث إنَّ:
H: يمثل ال (Cross-entropy).
P: القيمة القياسية (label) بعد تحويلها الى صيغة (One-hot encoding).
Q: قيمة التوقع (prediction) الخارجة من دالة ال (Softmax).
 للتعرف أكثر على هذا الموضوع سوف نقوم بشرحه بمقالة خاصة إن شاء ألله.

5 - تقنية الإهمال أو الترك (Dropout)

وهي تقنية تستخدم في الشبكات العصبية العميقة لتحسين الأداء من ناحية التدريب وذلك للتخلص من ظاهرة سلبية تحصل في عملية التدريب تسمى (Overfitting) تنتج أحياناً من قيم خاطئة في بيانات التدريب أو بسبب عوامل أخرى سوف نتطرق إليها لاحقاً إن شاء ألله. يكون عمل هذه التقنية فقط في مرحلة التدريب (Training) حيث يتم إيقاف عمل بعض الخلايا (neurons) في الطبقات المخفية (hidden layers), ويتم إختيارهذه الخلايا بشكل عشوائي, ولا تستخدم هذه التقنية في مرحلة التوقع والإستنتاج لإنتفاء الحاجة إليها.  والشكل أدناه يوضح ماقلناه:


6 - تقنية التطبيع على دفعات

Batch normalization


وهي تقنية تستخدم في الشبكات العصبية العميقة ذات الطبقات الكثيرة والمعقدة بهدف التقليل من تأثير ظاهرة تسمى (Internal Covariate Shift) تظهر في عملية التدريب والتي تؤدي تأخير عملية التدريب, وهذه الظاهرة هي عبارة عن حدوث تفاوت كبير بين قيم الإدخال للطبقات اللاحقة أي زيادة كبيرة في الإنحراف المعياري (standard deviation), وذلك بسبب أن قيم الإخراج للطبقة الأولى تعتبر قيم إدخال للطبقة الثانية, وقيم الإخراج لهذه الطبقة تعتبر قيم إدخال للطبقة الثالثة وهكذا, وهذا يؤدي الى حدوث التفاوت الكبير في الإنحراف المعياري لهذه القيم كلما تقدمنا في الطبقات التالية, حيث إنَّ التفاوت يأخذ منحىً تصاعدي كلما تقدمنا في الطبقات, حيث إنَّ الطبقة اللاحقة تتأثر بجميع الطبقات التي سبقتها , وهذا يؤثر كثيراً على إستقرار الشبكة وعلى أداءها في مرحلة التدريب. إنَّ هذه التقنية تقوم بالمعالجة عن طريق جعل المعدل (mean) لهذه القيم (0) والإنحراف المعياري لها يساوي (1). إنَّ إستخدام هذه التقنية تجعل عملية التدريب أسرع مما يؤدي الى التقليل من زمن التدريب, وكذلك للحصول على دقة أعلى للنموذج, ولها فائدة أخرى هي التقليل من ظاهرة ال (Overfitting).

7 - إنحدار الميل Gradient descent  :

هي خوارزمية تحسين متعددة الأبعاد (Multidimensional Optimization Algorithm) تستخدم لإيجاد القيمة الصغرى العامة وليس المحلية لدالة الفقدان (loss) أو الكلفة (cost)  وذلك عن طريق معرفة الميل لهذه الدالة وعما إذا كان في حالة هبوط (descent) حيث إنَّ قيمته في هذه الحالة تكون سالبة, فإذا كانت كذلك فمعنى هذا إننا نسير بالإتجاه الصحيح بعملية التدريب, وأما إذا كانت قيمة الميل موجبة فمعنى ذلك إننا قد تجاوزنا القيمة الدنيا وعلينا الرجوع إليها. إن عملية إختبار الميل للدالة تتم بعد كل خطوة تدريب (iteration) وبعد عملية تحديث الأوزان وقيم الإنحياز (Weights & Biases) في عملية التدريب للشبكة. وهذه الخوارزمية هي من التقنيات المشهورة في مجال تعليم الآلة (Machine Learning) عموماً وفي الشبكات العصبية العميقة خصوصاً.الشكل التالي يوضح عمل هذه الخوارزمية:


 حيث يمثل الرسم البياني العلاقة بين الكلفة (cost) وقيمة أحد الأوزان في الشبكة (ɵ). حيث إن قيمة الوزن ممثل بالدوائر الزرقاء, حيث إبتدأنا التدريب بقيمة عشوائية لهذا الوزن (Random initial value) بعدها يتم تحديث قيمة الوزن في كل خطوة تدريب ويشكل معدل التدريب (Learning Rate) عامل مهم في عملية التحديث.


Types of Gradient Descent:
هناك ثلاثة أنواع من هذه التقنية وهي:
1 - Batch Gradient Descent
2 - Stochastic Gradient Descent
3 - Mini-batch Gradient Descent
وسوف نقوم بتوضيح النوع الثاني من هذه الأنواع.

SGDStochastic gradient descent :

تعني كلمة (stochastic) نظاماً أو عملية مرتبطة بإحتمالٍ عشوائي. لذلك ففي نظام ال(SGD) يتم اختيار بعض العينات بشكل عشوائي بدلاً من مجموعة البيانات الكاملة (Data set) لكل تكرار (Iteration).
في هذه التقنية هناك مصطلح يسمى الدفعة (Batch) يشير الى العدد الإجمالي للعينات التي تنتخب من مجموعة البيانات (Data set) والتي تستخدم لحساب التدرج أو الميل (Gradient) لكل تكرار.
في تقنية ال (Gradient Descent) النموذجية مثل (Batch Gradient Descent) تعتبر الدُفعة (Batch) هي مجموعة البيانات بأكملها.  على الرغم من أن استخدام مجموعة البيانات بأكملها مفيد للغاية للوصول إلى الحد الأدنى بطريقة أقل عشوائية ، ولكن المشكلة تنشأ عندما تصبح مجموعات البيانات الخاصة بنا كبيرة جداً.
لنفترض أن لدينا مليون عينة في مجموعة البيانات الخاصة بنا ، لذلك إذا كنا نستخدم تقنية نموذجية لتحسين ال (Gradient Descent)، فسوف يتعين علينا استخدام كل المليون عينة لاستكمال تكرار واحد أثناء القيام بال (Gradient Descent)، ويجب القيام بذلك من أجل كل التكرار حتى يتم الوصول إلى الحد الأدنى. وبالتالي ، فإنه يصبح مكلفاً للغاية من حيث الأداء.
يتم حل هذه المشكلة عن طريقإستخدام تقنية ال (SGD). في يتم إستخدام عينة واحدة فقط ، أي إن حجم الدفعة عبارة عن عينة واحدة (batch size = 1) ، لتنفيذ كل تكرار.

8 - الطبقات الإلتفافية

Convolutional Layers

كما ذكرنا سابقاً إنَّ الشبكات العصبية الإلتفافية (Convolutional Neural Networks CNN) هي أحد أنواع الشبكات العصبية العميقة (Deep Neural Networks) وسميت بهذا الإسم لإحتوائها على طبقات من نوع (Convolutional Layers).
تتكون كل طبقة إلتفافية (Convolutional layer) من مجموعة من المصفوفات من النيورونات تسمى كل واحدة منهن (activation map) أو (feature map) كل واحدة من هذه المصفوفات لها عرض (width) وإرتفاع (height), هذه المصفوفات من النيورونات تترتب الواحدة تلو الأخرى لتشكل عمق (depth) لهذه الطبقة.
كل واحدة من هذه المصفوفات تكون مقترنة بمرشح (Filter) أو يسمى أحياناً (kernel)  أو (mask) وهذا الفلتر عبارة عن مصفوفة من الأوزان (weights) ويكون إرتفاعها مساوياً لعرضها ويجب أن يكون حجمها أصغر من حجم مصفوفة الصورة الداخلة الى الشبكة, حيث يمرر هذا الفلتر على مصفوفة الصورة الداخلة أفقياً وعمودياً حيث إن كل خطوة لحركته يجب أن تكون نيورون واحد. في كل موضع يقف فيه هذا الفلتر يتم حساب القيمة النهائية وذلك بإجراء عملية ضرب المصفوفتين (مصفوفة الفلتر والمصفوفة الواقف فوقها والتي هي جزء من مصفوفة الصورة) والنتيجة الخارجة تمثل أحد النقاط (pixel) من مصفوفة ال (feature map) ويستمر هذا الفلتر بالحركة على طول مصفوفة الصورة الداخلة الى الشبكة حيث يتم حساب جميع نقاط (pixel)  للمصفوفة التابعة له, بعدها يأتي الدور للفلتر الثاني والمصفوفة المقترنة معه إلى أن يتم حساب قيم المصفوفات (feature maps) والتي تشكل العمق للطبقة الإلتفافية.
إنَّ عملية التدريب (learning) تشمل الأوزان (weights) التي تمثلها كل مصفوفة فلتر وكذلك قيم الإنحياز (biases). الشكل التالي يوضح ماقلناه: 




سوف نقوم في المقالة القادمة إن شاء ألله بشرح موسع لهذه الطبقة (Convolutional layer) وتبيان السبب في اللجوء إلى هذا النوع من التقنية (Convolution) والتقنيات الأخرى المرتبطة معها مثل تقنية (pooling) وبقية التقنيات المهمة.



المهندس حسن فنجان عداي.               


                                                                                                                                                                       

هل اعجبك الموضوع :

تعليقات