من أجل تطوير مكتبات للعمل مع الشبكات العصبية ، سنحل مشكلة تقريب وظيفة حجة واحدة باستخدام خوارزميات الشبكة العصبية للتدريب والتنبؤ.
الدخول
ليعطى دالة f: [x0، x1] -> R
نقوم بتقريب الدالة المعطاة f بالصيغة
P(x) = SUM W[i]*E(x,M[i])
أين
- ط = 1..ن
- M [i] من R
- W [i] من R
- E (x، M) = {0 ، لـ x <M ؛ 1/2 ، مع س = م ؛ 1 ، من أجل س> م
من الواضح ، مع توزيع موحد لقيم M [i] على الفاصل الزمني (x0 ، x1) ، هناك مثل هذه الكميات W [i] التي ستقارب الصيغة P (x) بشكل أفضل الدالة f (x). علاوة على ذلك ، بالنسبة لقيم معينة من M [i] محددة على الفاصل الزمني (x0 ، x1) ومرتبة بترتيب تصاعدي ، يمكننا وصف خوارزمية متسلسلة لحساب الكميات W [i] للصيغة P (x).
وها هي الشبكة العصبية
نقوم بتحويل الصيغة P (x) = SUM W [i] * E (x، M [i]) إلى نموذج شبكة عصبية بخلايا عصبية واحدة وخلايا عصبية واحدة وخلايا عصبية ذات طبقة مخفية
P(x) = SUM W[i]*S(K[i]*x + B[i]) + C
أين
- متغير س - طبقة "المدخلات" تتكون من عصبون واحد
- {K، B} - معلمات الطبقة "المخفية" ، التي تتكون من n الخلايا العصبية ووظيفة التنشيط - السيني
- {W، C} - معلمات طبقة "الإخراج" ، التي تتكون من خلية عصبية واحدة ، والتي تحسب المجموع المرجح لمدخلاتها.
- S هو السيني ،
بينما
- المعلمات الأولية للطبقة "المخفية" K [i] = 1
- يتم توزيع المعلمات الأولية للطبقة B "i" المخفية بالتساوي على المقطع (-x1، -x0)
يتم تحديد جميع معلمات الشبكة العصبية K و B و W و C من خلال تدريب الشبكة العصبية على عينات (x ، y) لقيم الوظيفة f.
السيني
السيني عبارة عن وظيفة غير خطية متزايدة رتيبة
- ق (س) = 1 / (1 + exp (-x)).
البرنامج
نستخدم حزمة Tensorflow لوصف شبكتنا العصبية.
تدريب
init = tf.initializers.global_variables() with tf.Session() as session: session.run(init) for _ in range(iterations): train_dataset, train_values = generate_test_values() session.run(train, feed_dict={ x: train_dataset, y: train_values })
النص الكامل
import math import numpy as np import tensorflow as tf import matplotlib.pyplot as plt x0, x1 = 10, 20
هذا ما حدث

- الأزرق هو الوظيفة الأصلية.
- اللون الأحمر - تقريب الوظيفة
إخراج وحدة التحكم
cost = 0.15786637365818024 cost = 0.10963975638151169 cost = 0.08536215126514435 cost = 0.06145831197500229 cost = 0.04406769573688507 cost = 0.03488277271389961 cost = 0.026663536205887794 cost = 0.021445846185088158 cost = 0.016708852723240852 cost = 0.012960446067154408 cost = 0.010525770485401154 cost = 0.008495906367897987 cost = 0.0067353141494095325 cost = 0.0057082874700427055 cost = 0.004624188877642155 cost = 0.004093789495527744 cost = 0.0038146725855767727 cost = 0.018593043088912964 cost = 0.010414039716124535 cost = 0.004842184949666262 hidden: kernel= [[1.1523403 1.181032 1.1671464 0.9644377 0.8377886 1.0919508 0.87283015 1.0875995 0.9677301 0.6194152 ]] bias = [-14.812331 -12.219926 -12.067375 -14.872566 -10.633507 -14.014006 -13.379829 -20.508204 -14.923473 -19.354435] output: kernel= [[ 2.0069902 ] [-1.0321712 ] [-0.8878887 ] [-2.0531905 ] [ 1.4293027 ] [ 2.1250408 ] [-1.578137 ] [ 4.141281 ] [-2.1264815 ] [-0.60681605]] bias = [-0.2812019]
كود المصدر
https://github.com/dprotopopov/nnfunc