بناء مصنّف لورم الدّماغ باستخدام التّعلّم العميق

3-بناء مصنّف لورم الدّماغ باستخدام التّعلّم العميق

التدقيق العلمي: د. م. حسن قزّاز، م. هديل عبد الرحمن
التدقيق اللغوي: هبة الله فلّاحة

المقدّمة:

التّعلّم العميق هو الاتجاه الأحدث والحالي لمجال التّعلّم الآليّ؛ والّذي أعطى الكثير من اهتمام الباحثين في السّنوات القليلة الماضية. ونحن كمجتمع نشهد تغييرات جوهريّة في نمط الحياة، مثل السّيّارات ذاتيّة القيادة ومساعد غوغل واكتشاف البريد الإلكترونيّ العشوائيّ وغير ذلك الكثير. تمّ استخدام التّعلّم العميق على نطاق واسع في العديد من التّطبيقات لحلّ المشكلات المعقّدة المختلفة الّتي تتطلّب دقّة وحساسيّة عالية للغاية، لا سيّما في المجال الطّبيّ مثل الكشف  عن أورام الدّماغ باستخدام فحوصات التّصوير بالرّنين المغناطيسيّ (MRI: magnetic resonance imaging)، واكتشاف كوفيد باستخدام الأشعّة السّينيّة للرّئة وما إلى ذلك. بشكل عامّ، يعتبر ورم المخّ من أكثر أمراض الأورام الخبيثة شيوعًا وخطورة، حيث يتمّ تسجيل أكثر من مليون حالة سنويًّا. وبناءً على ذلك، يعدّ تصنيف ورم الدّماغ خطوة حاسمة للغاية بعد اكتشاف الورم من أجل تحقيق خطّة علاج فعّالة.

خلال هذه المقالة سنقوم ببناء مصنِّف لورم الدّماغ  باستخدام شبكة الطّيّ العصبونيّة CNN المستخدمة على نطاق واسع لتصنيف الصّور لدقّتها العالية؛ لغة البرمجة الّتي سنستخدمها هي بايثون.

ورم الدّماغ:

ورم الدّماغ هو كتلة أو نموّ للخلايا الشّاذّة في الدّماغ؛ حيث توجد أورام  بعضها غير سرطانيّ (حميد)، وبعضها سرطانيّ (خبيث)، تعتبر أورام الدّماغ من أخطر أنواع الأمراض الّتي يمكن أن تتطوّر بسبب النّموّ غير الطّبيعيّ للخلايا داخل الجمجمة. يمكن تصنيف أورام الدّماغ إلى نوعين: أورام أوّليّة وأورام ثانويّة؛ تمثّل أورام الدّماغ الأوّليّة 70٪ من جميع الأورام وتنتشر في الدّماغ فقط، بينما تتشكّل أورام الدّماغ الثانويّة في أعضاء أخرى مثل الثّدي والكلى والرّئة قبل الانتقال إلى الدّماغ.

نظرة عامّة على مجموعة البيانات:

خلال هذه المقالة سنستخدم مجموعة بيانات مصنّفة لصور ورم الدّماغ؛ تحتوي على 7022 صورة من صور التّصوير بالرّنين المغناطيسيّ للدّماغ البشريّ، مقسّمة إلى مجموعات تدريب واختبار كما يتمّ تصنيفها إلى 4 فئات:

  • الورم الدّبقي: ورم خبيث في النّسيج الدّبقي للجهاز العصبيّ.
  • الورم السّحائيّ: ورم حميد ينشأ من النّسيج السّحائيّ للدّماغ.
  • عدم وجود ورم (شخص سليم).
  • الغدّة النّخاميّة.
الشّكل (1) بعض الصور المستخدمة في تدريب واختبار المصنف المقترح

الشكل أعلاه يستعرض الصور المستخدمة في التدريب والاختبار وكانت باحجام 512×512 بكسل ولكل صورة تسمية (label) تبين الصنف الخاص بهذه الصورة

لننتقل إلى كيفيّة استيراد المكتبات الأساسيّة التي ستساعدنا في تصنيف هذه الصّور.

استيراد المكتبات:

سوف نقوم في الجزء الأوّل باستكشاف مجموعة البيانات والقيام بعمليّة المعالجة المسبقة لها، وذلك باستخدام مولّد بيانات الصّور (Image data generator)، واستيراد مكتبة Tensorflow. سوف يتمّ الاعتماد على مكتبة كيراس الموجودة في Tensorflow

import pandas as pd
import numpy as np
import tensorflow
from tensorflow import keras
import matplotlib.pyplot as plt
from keras.preprocessing.image import  ImageDataGenerator as Imgen

زيادة عدد الصّور:

عندما نستخدم أيّ قاعدة بيانات للصّور لتدريب نموذجنا، قد لا تعطينا نتائج دقيقة لأنّ الصّور الموجودة فيه قد تتطلّب بعض عمليّات المعالجة المسبقة مثل التّكبير، وزيادة السّطوع، وتغيير قيمة التّدرّج الرّماديّ. لهذا يتمّ استخدام مولّد بيانات الصّورة من مكتبة كيراس.

يقوم مولّد البيانات بتوليد عدد من الصّور بهدف زيادة حجم مجموعة التّدريب. على سبيل المثال، تغيير حجم جميع الصّور، وضبط ارتفاعها وعرضها، بحيث تكون بيانات الصّورة المدخلة موحّدة، ومن أبرز المعاملات التي يمكن ضبطها:

  1. Args rescale: (عامل إعادة القياس).القيمة الافتراضيّة لهذا العامل Null أو (None)، ومن الممكن ضرب البيانات بالقيمة المسندة لهذا العامل.     
  2. Shear_range : (مجال القص) ويكون بزاوية مقدّرة بالدّرجات عكس عقارب السّاعة حدّة القصّ. 
  3. Zoom_range: مجال للتّكبير العشوائيّ.
  4. Height_shift_range: (مجال إزاحة الارتفاع) ويمثل جزءًا من الارتفاع الكليّ إذا كان <1. 
  5. Width_shift_range: (مجال إزاحة العرض)  ويمثّل جزءًا من العرض الكليّ إذا كان <1.
  6. Fill_mode: (نمط التعبئة) ويأخذ قيمة افتراضيّة تساوي nearest  أو الجوار الأقرب حيث يتمّ ملء النّقاط خارج حدود الدّخل وفقًا للنّمط المحدّد. 

Validation_split: (جزء التّحقق ) وهو نسبة الصّور المحجورة من أجل القيام بعمليّة التّحقق (تأخذ قيمة بين 0 و 1).  محجوزة للتّحقق.

#Augmenting the training dataset
traingen = Imgen(
                 rescale=1./255,
                 shear_range= 0.2,
                 zoom_range = 0.3,
                 width_shift_range = 0.2,
                 height_shift_range  =0.2,
                 fill_mode = "nearest",
                 validation_split=0.15)
#Augmenting the testing dataset
testgen = Imgen(# rescale the images to 1./255 
                rescale = 1./255
                )

سوف يتمّ الانتقال الآن إلى مسار المجلّد وتوليد دفعات من الصّور الإضافيّة.

trainds = traingen.flow_from_directory("Training/",
                                      target_size = (130,130),
                                       seed=123,
                                       batch_size  = 16,
                                       subset="training"
                                      )
valds = traingen.flow_from_directory("Training",
                                     target_size = (130,130),
                                     seed=123,
                                     batch_size  = 16,
                                     subset="validation"
                                      )
testds = testgen.flow_from_directory("Validation",
                                     target_size = (130,130),
                                    seed=123,batch_size  = 16,
                                     shuffle=False)

بعض البارامترات المستخدمة هنا هي:

Target_size: (الحجم المستهدف) وهي عبارة عن عددين صحيحين العدد الأوّل يمثل ارتفاع الصّورة، أمّا العدد الثّاني يمثّل عرض الصّورة، القيمة الافتراضية لهذا البارامتر(512 ، 512). سيتمّ تغيير أبعاد جميع الصّور المضافة.     

Seed: قيمة عشوائيّة اختياريّة للتّبديل.

Batch_size: حجم مجموعات البيانات (الافتراضيّ: 32).

Subset : مجموعة فرعيّة من البيانات (” training تدريب” أو ” validation التّحقق من الصّحة”).

Shuffle: (التبديل) ويحدّد عمليّة تبديل البيانات بشكل عشوائيّ عندما يأخذ القيمة True، أو يتمّ ترتيب البيانات بشكل أبجديّ أو رقميّ عندما يأخذ القيمة False.                  

تعمل هذه الخطوة على تقسيم مجموعة بيانات الصّور المُعالجة مسبقًا إلى مجموعات التّدريب والتّحقق من الصّحة والاختبار؛ حيث تكون نسب تقسيم مجموعة بيانات الصّور الخاصّة بنا إلى مجموعات تدريب والتّحقق من الصّحة 80٪ – 20٪ على التّرتيب، حيث تحتوي مجموعة بيانات التّحقق من الصّحّة على 20٪ من مجموعة بيانات التّدريب. وفيما يتعلّق بمجموعة الاختبار، يتمّ تقسيم مجموعة البيانات نفسها إلى مجلّدات مجموعة التّدريب والاختبار، لذلك ليست هناك حاجة لتقسيم مجموعة الاختبار بشكل صريح.

تعدّ مجموعة بيانات التّحقق مهمّة أثناء بناء نموذج التّعلّم العميق للتأكد من أداء نموذجنا أثناء التّدريب. هذه العمليّة مهمّة أيضًا لضبط نموذجنا لاحقًا بناءً على أدائه.

 لتحديد أصناف مجموعة البيانات الخاصّة بنا:

 c = trainds.class_indices
classes = list(c.keys())
classes
[‘glioma’, ‘meningioma’, ‘notumor’, ‘pituitary’] أي [‘دبقيّ’ ,’سحائيّ’, ‘عدم وجود ورم (شخص سليم)’, ‘الغدّة النّخاميّة’]

لذلك فإنّ مسيرتنا لبناء أوّل مصنّف لأورام الدّماغّ باستخدام التّعلّم العميق تمضي قدُمًا بنجاح، حيث تمّ زيادة بياناتنا، وتقسيمها إلى مجموعات التّدريب والتّحقق والاختبار، كما حدّدنا الأصناف الأربعة لمجموعة بيانات الصّور.

سوف نقوم الأن بعرض صورنا من إلقاء نظرة على تنفيذ عملية زيادة عدد الصور، واستخدام الأصناف الأربعة السّابقة من أجل تحديد الصّنف الخاصّ بكلّ صورة (صنف الورم الدّماغيّ).

x,y = next(trainds)          #function returns the next item in an iterator.
def plotImages(x,y):
    plt.figure(figsize=[15,11])                 #size of the plot
    for i in range(16):                         #16 images
     plt.subplot(4,4,i+1)                    #4 by 4 plot    
      plt.imshow(x[i]) #Imshow() is a function of matplotlib displays the image
   plt.title(classes[np.argmax(y[i])])  # Class of the image will be it's title
        plt.axis("off")
    plt.show()                      #shows the figure or plot

الآن سنقوم بعرض صورنا عن طريق استدعاء التّابع التّالي:

#Call the plotImages function
plotImages(x,y)
الشّكل (2) خرج التابع PlotImages، الصورة مع الصنف الخاص بها.

الآن، أهمّ خطوة في هذا المشروع هي البدء في إنشاء نموذج التّعلّم العميق باستخدام شبكات الطّيّ العصبونيّة.

بناء نموذج التّعلّم العميق:

تُستخدم الشّبكات العصبيّة على نطاق واسع في كلّ مشروع تعلّم عميق تقريبًا؛ نظرًا لدقّتها وقدرتها على اكتشاف البيانات دون أن تتمّ برمجتها بشكل صريح. يتمّ استخدام أنواع مختلفة من شبكات الطّيّ العصبونيّة تبعًا لحاجات كلّ مشروع. فعلى سبيل المثال، سوف نستخدم شبكة الطّيّ العصبونيّة CNN على نطاق واسع لتصنيف بيانات الصّورة. الميّزة الرئيسيّة لـشبكة الطّيّ العصبونيّة CNN هي أنّها تكتشف تلقائيًّا ميّزات مهمّة في أيّ صورة دون إشراف بشريّ. وهذا ما يفسّر أنّ استخدام شبكات الطيّ العصبونيّة يمثل الحلّ الأمثل لمشاكل الرؤية الحاسوبيّة، وتصنيف الصّور الرّقميّة. أمّا شبكة الطّيّ العصبونيّة CNN ستكون حلًّا مثاليًّا لمشكلات الرؤية الحاسوبيّة وتصنيف الصّور، لذا فإنّ استخراج الميّزة أمر حيويّ لشبكات الطّيّ العصبونيّة CNN.

تستخرج الميّزة من خلال ثلاث عمليّات أساسيّة:

  1. القيام بعمليّة فلترة الصّورة لميّزة معينة (عمليّة جداء الطّيّ convolution).
  2. اكتشاف هذه الميّزة داخل الصّورة المفلترة ( وحدّة التّصحيح الخطّيّ ReLU).
  3. تكثيف الصّورة لتحسين الميّزات (تجميع وفق القيمة الكبرى maximum pooling).

دعونا نناقش كلّ عمليّة من عمليّات شبكة الطّيّ العصبونيّة CNN.

تقوم الطّبقة التّلافيفيّة بخطوة فلترة الأوزان الّتي تتعلمها شبكة الطّيّ ConvNet أثناء عمليّة التّدريب والتي تكون موجودة بشكل أساسيّ في طبقاتها التّلافيفيّة،. يتمّ توليد الأوزان من خلال ما يسمّى بالفلاتر أو المرشح، حيث يعمل الفلتر على مسح الصّورة وإيجاد مجموع البسكل الموزون كما هو موضّح في الشكل التّالي.

الشّكل (3) عمليّة جداء الطّيّ

يوجد لدينا أنواع مختلفة من الفلاتر، وكلّ فلتر يولّد ميّزات مختلفة لكلّ صورة.

الشّكل (4) استخلاص الميّزات
from keras.models import Sequential  
from keras.layers import Dense, Flatten, Dropout, Conv2D, MaxPooling2D, Activation
from keras.metrics import categorical_crossentropy
from keras.optimizers import Adam

فيما يلي نموذج شبكات الطّيّ العصبونيّة CNN.

cnn = Sequential([
    # first Layer
    Conv2D(filters=16, kernel_size=(3, 3), padding = 'same', activation='relu', input_shape=(130, 130, 3)),
    MaxPooling2D((2, 2)),
    # second layer
    Conv2D(filters=32, kernel_size=(3, 3), padding = 'same', activation='relu'),
    MaxPooling2D((2, 2)),
    Dropout(0.20),
    Flatten(),
    Dense(64, activation='relu'),
    Dense(32, activation='relu'),
    Dense(10, activation='relu'),
    Dense(4, activation='softmax')
])

بعض المصطلحات الأساسيّة المستخدمة هنا هي:

طبقة التّسرّب أو التّعطيل  (Dropout Layer) تُستخدم هذه الطّبقة في أيّ طبقة مخفيّة ولا تستخدم في طبقة الخرج، تعمل هذه الطبقة على حلّ مشكلة الملاءمة الشديدة (Overfitting) في نموذجنا.

طبقة التّسطح (Flatten Layer) والتي تُستخدم من أجل تحويل الدّخل متعدّد الأبعاد إلى خرج ذي بُعد واحد (شعاع).

طبقة الرتباط الكليّ أو الطّبقة الكثيفة؛ وهي طبقة بسيطة من العصبونات والتي ترتبط بشكل كليّ مع عصبونات الطّبقة التي تسبقها.

نظرًا لأنّ خرج نموذجنا سيكون أحد الأصناف الأربعة، الورم الدّبقيّ، والورم السّحائيّ، و اللاورم، والغدّة النخاميّة، فقد أعطينا طبقة الخرج أربع وحدات.

فيما يلي البنية المعماريّة للنّموذج الّذي تمّ إنشاؤه:

cnn.summary()
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 130, 130, 16)      448       
                                                                 
 max_pooling2d (MaxPooling2D  (None, 65, 65, 16)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 65, 65, 32)        4640      
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 32, 32, 32)       0         
 2D)                                                             
                                                                 
 dropout (Dropout)           (None, 32, 32, 32)        0         
                                                            
flatten (Flatten)           (None, 32768)             0         
                                                                 
 dense (Dense)               (None, 64)                2097216   
                                                                 
 dense_1 (Dense)             (None, 32)                2080      
                                                                 
 dense_2 (Dense)             (None, 10)                330       
                                                                 
 dense_3 (Dense)             (None, 4)                 44        
                                                                 
=================================================================
Total params: 2,104,758
Trainable params: 2,104,758
Non-trainable params: 0
_________________________________________________________________

يتمّ تجميع النّموذج الّذي تمّ إنشاؤه بمساعدة البارامترات التّالية:

cnn.compile(loss="categorical_crossentropy",
              optimizer = "Adam",metrics=["accuracy"])

لذا فإنّ تابع الخسارة الذي اخترناه هنا هوالإنتروبيا المُتقطعة الفئويّة، حيث يعدّ تابع الخسارة ضروريًّا عند تطوير نموذج التّعلّم العميق لقياس الفرق بين الخرج المتوقّع والخرج الحقيقيّ أو الفعليّ، حتى تتمكّن الشّبكات العصبيّة من ضبط أوزانها بهدف زيادة  دقّتها، يتمّ استخدام الإنتروبيا المُتقطعة عند تصنيف الصّورة إلى صنف معيّن من بين مجموعة أصناف.

يستخدم المُحسِّن في الشّبكات العصبيّة في الغالب لضبط أوزان الشّبكات العصبيّة، وتحسين سرعة تعلّم النّموذج لتقليل الخسائر. هنا تعدّ خُوارزميَّة توقُّع المُلاءمة اللَّحظِيَّة (آدم) المحسّن الأكثر استخدامًا.دعونا نلائم بياناتنا مع نموذج شَبَكَات الطَّيِّ العُصبُونِيَّة CNN الذي أنشأناه.

history = cnn.fit(trainds,validation_data=valds,epochs=10, batch_size=16, verbose=1)
Epoch 1/10
304/304 [==============================] - 126s 413ms/step - loss: 0.5149 - accuracy: 0.7813 - val_loss: 0.6445 - val_accuracy: 0.7801
Epoch 2/10
304/304 [==============================] - 122s 400ms/step - loss: 0.3672 - accuracy: 0.8526 - val_loss: 0.6240 - val_accuracy: 0.7591
Epoch 3/10
304/304 [==============================] - 122s 401ms/step - loss: 0.2541 - accuracy: 0.9004 - val_loss: 0.6677 - val_accuracy: 0.7953
Epoch 4/10
304/304 [==============================] - 122s 399ms/step - loss: 0.1783 - accuracy: 0.9343 - val_loss: 0.6279 - val_accuracy: 0.8187
Epoch 5/10
304/304 [==============================] - 122s 400ms/step - loss: 0.1309 - accuracy: 0.9502 - val_loss: 0.6373 - val_accuracy: 0.8292
Epoch 6/10
304/304 [==============================] - 121s 399ms/step - loss: 0.1069 - accuracy: 0.9613 - val_loss: 0.7103 - val_accuracy: 0.8444
Epoch 7/10
304/304 [==============================] - 121s 399ms/step - loss: 0.0768 - accuracy: 0.9712 - val_loss: 0.6353 - val_accuracy: 0.8409
Epoch 8/10
304/304 [==============================] - 122s 400ms/step - loss: 0.0540 - accuracy: 0.9827 - val_loss: 0.6694 - val_accuracy: 0.8456
Epoch 9/10
304/304 [==============================] - 121s 399ms/step - loss: 0.0530 - accuracy: 0.9813 - val_loss: 0.7373 - val_accuracy: 0.8374
Epoch 10/10
304/304 [==============================] - 122s 399ms/step - loss: 0.0304 - accuracy: 0.9872 - val_loss: 0.7529 - val_accuracy: 0.8655

كما نرى، أعطانا نموذج شَبَكَات الطَّيِّ العُصبُونِيَّة CNN المقترَح دقّة 98٪ على بيانات التّدريب، وفي بيانات التّحقق من الصّحّة تلقّينا دقّة تزيد عن 86٪. فلنقم الآن بتقييم هذا النّموذج على مجموعة بيانات الاختبار.

cnn.evaluate(testds)
82/82 [==============================] - 9s 113ms/step - loss: 0.2257 - accuracy: 0.9458

إنّ أداء نموذج شَبَكَات الطَّيِّ العُصبُونِيَّة CNN المقترَح  كما نشاهده  على بيانات الاختبار جيد. عند ملاءمة النّموذج عرفنا أنّ بيانات التّدريب في الشّيفرة البرمجيّة أعلاه كــ ‘trainds’ وبعدد دورات تدريبيّة يساوي 10، ممّا يعني أنّ نموذجنا يدرّب الشّبكة العصبيّة ببيانات التّدريب عشر مرات، وضُبط معامل  Verbose بقيمة تساوي 1 لمعرفة ملاءمة النّموذج بعد كلّ  دورة تدريب

الآن دعونا نرى بعض النّتائج التي توصّلنا إليها.

تفسير وتحليل النّتائج باستخدام التّعلّم العميق:

سوف نقوم برسم مخططًا بيانيًّا يبين الدّقة التي تمّ التّوصل إليها وعدد مرات تكرار الدّورات التّدريبية، لمشاهدة زيادة دقة بيانات التّدريب وبيانات التّحقق

epochs = range(len(history.history['accuracy']))
plt.plot(epochs, history.history['accuracy'], 'green', label='Accuracy of Training Data')
plt.plot(epochs, history.history['val_accuracy'], 'red', label='Accuracy of Validation Data')
plt.xlabel('Total Epochs')
plt.ylabel('Accuracy achieved')
plt.title('Training and Validation Accuracy')
plt.legend(loc=0)
plt.figure()
الشّكل (5)العلاقة بين عدد دورات التّدريب ودقة بيانات التدريب ودقة بيانات التّحقق.

التنبّؤ باستخدام التّعلّم العميق:

للتنبّؤ ببعض عيّنات الصّور بمساعدة نموذجنا، سنحتاج أوّلًا إلى استيراد تلك الصّور وإجراء تسوية عليها وتحويلها إلى مصفوفة من أجل تسهيل عمليّة التنبّؤ.

from matplotlib.pyplot import imshow
from PIL import Image, ImageOps
data = np.ndarray(shape=(1, 130, 130, 3), dtype=np.float32)
image = Image.open("image(2).jpg")
size = (130, 130)
image = ImageOps.fit(image, size, Image.ANTIALIAS)
image_array = np.asarray(image)
display(image)
normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
data[0] = normalized_image_array

الشّكل (6) صورة ل عيّنة مطلوب التنبّؤ بصنف الورم الخاصّ بها.

استخدمنا هنا مكتبات مثل matplotlib من أجل استخدام التّابع imshow؛  والذي يساعدنا في عرض الصورة، ومكتبة Python Imaging LibraryPIL؛ الّتي تتعامل مع جميع عمليّات الصّور. سوف نستخدم مكتبة ImageOps الموجودة في المكتبة PIL والّتي تتعامل مع جميع عمليّات المعالجة المسبقة للصّورة.

الآن سوف يتمّ إيجاد الصّنف الخاصّ بالصّورة السّابقة، باستخدام النّموذج المقترَح.

prediction = cnn.predict(data)
print(prediction)
predict_index = np.argmax(prediction)
print(predict_index)
1/1 [==============================] - 0s 142ms/step
[[0. 0. 1. 0.]]
2

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

print("There's {:.2f} percent probability that the person has No Tumor".format(prediction[0][2]*100))
There's 100.00 percent probability that the person has No Tumor

بهذه الطّريقة، يمكننا أن نقول بشكل قاطع: إنّ نموذج شبكات الطّيّ العصبونيّة CNN الخاصّ بنا يتنبّأ بشكل فعّال بأيّ نوع من بيانات ورم الدّماغ بأقصى قدر من الدّقّة. يمكنك استخدام أيّ مجموعة بيانات لورم الدّماغ أعلاه لمعماريّة النّموذج المُعطى.

الخلاصة:

رأينا كيف تؤثر التّكنولوجيا على حياتنا اليوميّة وثقافتنا؛ إنّ استخدامها من أجل تقديم الرّعاية الصّحيّة هو أفضل ما يمكن فعله في هذا المجال، حيث إننا جميعًا نملك رؤية لتحسين هذه التّكنولوجيا وتوظيفها في خدمة حياتنا اليوميّة. إنّ استخدام التّعلّم العميق في مجال الرّعاية الصّحيّة هو الخيار الأفضل، مثل النّموذج المقترّح أعلاه لتصنيف أورام الدّماغ، ويمكننا استخدام هذه النّماذج في العديد من القطاعات من خلال تطبيق بعض التّعديلات عليها

 تعلّمنا كيفيّة استخدام مكتبات Tensorflow و Keras لنموذج التّعلّم العميق، بالاضافة إلى تقنيّات مختلفة للمساعدة في تحسين الدّقة وتحليل البيانات النّاتجة. من الممكن  استخدام التّقنيات المذكورة أعلاه لتطوير أيّ نموذج تعلّم عميق وتطبيقها بنجاح على أيّ مثال.

المراجع:

0 Shares:
اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

You May Also Like