Pythonの手書き数字認識、対応する数式と詳細な手順

Pythonの手書き数字認識、対応する数式と詳細な手順

まず、数学的な導出

特別には簡単に理解するために、数学的な導出を詳細に説明しました。

2つのプログラムコード

特に優れたプログラム構造は、それは価値がある学習

第三に、コードおよび対応する方程式
私たちが最初に彼らの数学的な導出を見なければならないが、コードは見ることができません。しかし、導出は、必ずそれらを読んで。
4つのコア式アルゴリズム1.BP
BPニューラルネットワークコア式

パラメータリスト

x = np.array(x)
y = np.array(y)
weights = []	# 权重列表
bias = []	# 偏置列表

xは、yは出力変数、入力変数はどこである
バツと
X 33の555サンプル値に変数x 784の相当する[X 1、X 2、X 。3、...、xは784 ]
Y 33555のまた、サンプル値を、Y 0-9の番号に対応する出力た
重量が重量であり、バイアスがバイアスされ
、Y = AX + B、当量、バイアス等価Bと同様。
ウェイト
バイアス
重みの重みは、それが上の写真から見て、それぞれ第一の層(入力層)に対応する、2つの要素を有している- >第二の層(中間層)は、第2層(中間層) - >第三の層(出力層) 、ニューラルネットワークが持つ三層感覚で見ることができます。
注:重量、バイアスは、ランダムに初期化されます。例えば

layers = [784,784,10]
for i in range(1, len(layers)):	# 正态分布初始化
     self.weights.append(np.random.randn(layers[i-1], layers[i]))
     self.bias.append(np.random.randn(layers[i]))

三層ニューラルネットワーク対応
アクティベーション機能

def sigmoid(x): # 激活函数采用Sigmoid
    return 1 / (1 + np.exp(-x))


def sigmoid_derivative(x):	# Sigmoid的导数
    return sigmoid(x) * (1 - sigmoid(x))

まず、バックプロパゲーションアルゴリズム

a = [x[k % n]]	# 保存各层激活值的列表

ニューロンの出力を表し、それは最初のサンプル値xに対応する入力層のニューロンの出力層であるれているため
最初に第1入力値
、前方伝播が始まり

for lay in range(len(self.weights)):
    a.append(self.activation(np.dot(a[lay], self.weights[lay]) + self.bias[lay]))

前記活性化は、対応する重みプラスバイアスを掛けた各レイヤの出力コードループ手段ニューロンの活性化関数です。活性化して得られた関数値
ここに画像を挿入説明
バックプロパゲーションの開始を

label = np.zeros(a[-1].shape)#shape得到a[-1]的维度
label[y[k % n]] = 1	# 根据类号生成标签
error = label - a[-1]	# 误差值
#a[-1]从后往前第一组数据
deltas = [error * self.activation_deriv(a[-1])]	# 保存各层误差值的列表

ここに画像を挿入説明

layer_num = len(a) - 2	# 导数第二层开始
for j in range(layer_num, 0, -1):
        deltas.append(deltas[-1].dot(self.weights[j].T) * self.activation_deriv(a[j]))	# 误差的反向传播
deltas.reverse()

反復-1導出意味バックデルタとは逆の順序でのために、これは正確にポイントの逆の派生です。
フォワード重みが更新されます

for i in range(len(self.weights)):	# 正向更新权值
     layer = np.atleast_2d(a[i])
     delta = np.atleast_2d(deltas[i])
     self.weights[i] += learning_rate * layer.T.dot(delta)
      self.bias[i] += learning_rate * deltas[i]

ここに画像を挿入説明
コード

     self.weights[i] += learning_rate * layer.T.dot(delta)
     self.bias[i] += learning_rate * deltas[i]

層layer.Tマトリックス行くことを意味する、対応するパラメータを解きます

終了

間違った場所がある場合はこれまでのところ、あなたのプログラムの基本的な側面があり、式に対応する紹介、ギャングポインティングまたは2をご了承ください。
最後に、式控除と書き込みコード大物を提供するために、感謝。

リリース3元の記事 ウォンの賞賛1 ビュー1984

おすすめ

転載: blog.csdn.net/qq_40531588/article/details/104570259