مقدمة
هذه المقالة مخصصة لأولئك الذين أبدوا أي اهتمام في مسألة ما يحدث داخل الشبكة العصبية الاصطناعية
( ANN) . يمكن للجميع الآن تطوير شبكة ANN الخاصة بهم باستخدام المكتبات الجاهزة المتوفرة في معظم لغات البرمجة. في هذه المقالة ، سأحاول إظهار كيف يبدو الكائن (
Pattern ) تمامًا ، ويمر عبر طبقات ANN ، التي تم تطويرها وتجميعها باستخدام
مكتبة Tensorflow للتعلم العميق مع
وظيفة Keras الإضافية.
البرامج المستخدمة
المكونات التالية مطلوبة (الإصدارات التي حددتها لحالتي):
- tensorflow 1.10.0
- keras 2.2.4
- matplotlib 2.2.0
- modul-os
- numpy1.14.3
من الممكن أيضًا رسم بنية الشبكة ، ولكن من الضروري تثبيت أدوات التصور ، في حالتي تم استخدام
keras وفي الطريقة
PLOT_PATTERN_PROCCESS(...)
لتأسيس
PLOT_MODEL = صحيح def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True):

الفكرة الرئيسية
من الضروري اختيار نمط واحد (المقطع الذي سنلاحظه) ، وبعد تحديده ، يتم تقسيم الشبكة إلى طبقات
متوترة . في دورة من الثانية إلى آخر طبقة ، يتم إنشاء شبكة جديدة ، حيث يكون الناتج هو رقم الطبقة في الدورة ، وتخطي النموذج ، والنتيجة هي صفيف أبعاد n في إخراج الشبكة.
التنفيذ
ربط المكتبات
from keras.models import * from keras.layers import * import matplotlib.pyplot as plt import os import numpy as np
الأساليب المستخدمة:
def PLOT_PATTERN_PROCCESS (النموذج ، النموذج ، FOLDER_TO_SAVE ، grid_size = (3 ، 3) ، limit_size_layer = (15 ، 15) ، PLOT_MODEL = صواب): def PLOT_PATTERN_PROCCESS(model, pattern, FOLDER_TO_SAVE, grid_size=(3, 3), limit_size_layer=(15, 15), PLOT_MODEL=True): """ :param model: keras :type model: Sequential :param pattern: , :type pattern: np.array :param FOLDER_TO_SAVE: :type FOLDER_TO_SAVE: str :param grid_size: :type grid_size: tuple :param limit_size_layer: :type limit_size_layer: tuple :param PLOT_MODEL: :type PLOT_MODEL: PLOT_MODEL """ SAVE_AR_LIST = [] for num_layer in range(1, len(model.layers)): LO = model.layers[num_layer].output _model = Model(inputs=model.input, outputs=LO) if ( len(_model.output_shape) == 3 and _model.output_shape[1] > limit_size_layer[0] and _model.output_shape[2] > limit_size_layer[1] ): _output = _model.predict(pattern)[0] SAVE_AR_LIST.append( [ num_layer, model.layers[num_layer].name, _output.tolist() ] )
def build_model (IN_SHAPE = 50 ، CLASSES = 5) -> متسلسل: def build_model(IN_SHAPE=50,CLASSES=5) -> Sequential: inputs_LAYER0 = Input(shape=(IN_SHAPE,IN_SHAPE)) Dense_2_2 = Dense(75, activation='relu')(inputs_LAYER0) Dense_2_3 = Dense(50, activation='relu', name="my_dense")(Dense_2_2) Dense_2_4 = Dense(25, activation='relu')(Dense_2_3) Dense_2_5 = Dense(10, activation='relu')(Dense_2_4) flat_f_0 = Flatten()(Dense_2_5) final_layer= Dense(CLASSES, activation='softmax')(flat_f_0)
رمز البرنامج
model_ = build_model() pattern = np.random.sample((1,50,50)) os.makedirs("PLOT_PATTERN_PROCCESS") PLOT_PATTERN_PROCCESS( model = model_, pattern = pattern, FOLDER_TO_SAVE = "PLOT_PATTERN_PROCCESS", PLOT_MODEL=False, grid_size=(2, 2) )
وصف البرنامج
الطريقة
build_model()
تقوم بإرجاع نموذج ANN بالتنسيق
التسلسلي ، المصمم لتصنيف شيء ما إلى 5 فئات.
نموذج.ملخص () _________________________________________________________________ Layer (type) Output Shape Param
كما ترون من الهيكل ، فإن النمط عبارة عن صفيف بحجم 50 × 50. متغير
pattern
وهناك كائن يمكن ملاحظته.
بعد ذلك ، يتم إنشاء دليل
os.makedirs("PLOT_PATTERN_PROCCESS")
،
حيث سيتم حفظ النتيجة بأكملها.
طريقة الوصف PLOT_PATTERN_PROCCESS
لقد وصفت معنى الطريقة المذكورة أعلاه ، ولكن من المهم أن نقول إننا لسنا بحاجة إلى جميع الطبقات ، لأن مخرجات بعض الطبقات لا يمكن عرضها أو أن ذلك لن يكون مفيدًا.
الحصول على نمط الإخراج يحدث هنا:
_output = _model.predict(pattern)[0]
في هذا التطبيق ، يمكنك عرض نمط إخراج ثنائي الأبعاد لا تقل أبعاده عن المعلمة
limit_size_layer
بالتناوب خلال طبقات نموذج ANN ، المتغير
SAVE_AR_LIST
مليئة تدريجيا مع البيانات:
- رقم الطبقة
num_layer
- اسم الطبقة
model.layers[num_layer].name
- إخراج مجموعة ثنائية الأبعاد
_output.tolist()
باستثناء تدريجيا نتيجة واحدة من
SAVE_AR_LIST
،
ووضعها في خلية قماش
ax.imshow(np.array(ar), cmap='viridis', extent=(xmin, xmax, ymin, ymax))
.
والنتيجة هي ملف
(0.png)
توصيات
حظا سعيدا