ニューラルネットワークを操作するためのライブラリを開発するために、トレーニングと予測のためのニューラルネットワークアルゴリズムを使用して、単一の引数の関数を近似する問題を解決します。
エントリー
関数fを与えます:[x0、x1]-> R
与えられた関数fを式で近似します
P(x) = SUM W[i]*E(x,M[i])
どこで
- i = 1..n
- RのM [i]
- RのW [i]
- E(x、M)= {0、for x <M; 1/2、x = M; 1、x> Mの場合
明らかに、間隔(x0、x1)上のM [i]の値の均一な分布では、式P(x)が関数f(x)を最もよく近似するような量W [i]があります。 さらに、間隔(x0、x1)で定義され、昇順で順序付けられたM [i]の値について、式P(x)の量W [i]を計算するための逐次アルゴリズムを記述することができます。
そして、これがニューラルネットワークです
式P(x)= SUM W [i] * E(x、M [i])を、1つの入力ニューロン、1つの出力ニューロン、およびn個の隠れ層ニューロンを含むニューラルネットワークモデルに変換します。
P(x) = SUM W[i]*S(K[i]*x + B[i]) + C
どこで
- 変数x-1つのニューロンで構成される「入力」層
- {K、B}-n個のニューロンと活性化関数で構成される「隠れた」層のパラメーター-シグモイド
- {W、C}-「出力」層のパラメーター。1つのニューロンで構成され、入力の加重和を計算します。
- Sはシグモイド、
ながら
- 「非表示」レイヤーの初期パラメーターK [i] = 1
- 「非表示」レイヤーB [i]の初期パラメーターは、セグメントに均等に分散されます(-x1、-x0)
ニューラルネットワークK、B、W、およびCのすべてのパラメーターは、関数fの値のサンプル(x、y)でニューラルネットワークをトレーニングすることによって決定されます。
シグモイド
シグモイドは滑らかな単調増加非線形関数です
プログラム
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