3.2プログラミングの仕事:フィードフォワードニューラルネットワーク

タイトル

  • 週はロジスティック回帰、ロジスティック回帰の多くの種類を使用しますが、それだけで線形分類器であるため、より複雑な仮定を形成することはできません。
  • この演習では、フィードフォワードニューラルネットワークは、手書きの数字(0〜9)を認識します。データはまだここにMNIST手書きデータセットで5000個のトレーニングサンプルが含まれています。
  • ロジスティック回帰多変量分類を使用する前に、この時間フィードフォワードニューラルネットワークを予測します。ニューラルネットワークは、非常に複雑な非線形モデルを実現することができます。私たちは、使用する良い重量訓練を受けている予測するために。

プログラミング

  • まず、ネットワークフレームを選択し、このフレームは、ジョブが与えられ、すなわち、入力層、隠れ層及び出力層のフレームワーク3層を含みます。
  • Xの寸法が400による5000であるため、すなわち、400特性、したがって(バイアス部、すなわち、定数項1は含まない)は、入力層400のニューロンの数は、隠れ層のニューロンの数は、(ジョブ25で与えられます。 )付勢手段を備えていない、出力層のニューロンの数は、クラス分類の数によって決定され、従って、10です。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat

def load_weight(path):
    data = loadmat(path)
    return data['Theta1'], data['Theta2']

theta1, theta2 = load_weight('D:\BaiduNetdiskDownload\data_sets\ex3weights.mat')

theta1.shape, theta2.shape

def load_data(path):
    data = loadmat(path)
    X = data['X']
    y = data['y']
    return X,y

X, y = load_data('D:\BaiduNetdiskDownload\data_sets\ex3data1.mat')

y = y.flatten() # 这里消除了一个维度,方便后面的计算 (5000,)
X = np.insert(X, 0, values=np.ones(X.shape[0]), axis=1)  # 为X添加了一列常数项 1,(5000, 401)

X.shape, y.shape

a1 = X
z2 = a1 @ theta1.T
z2.shape

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

a2 = sigmoid(z2)
a2.shape

a2 = np.insert(a2, 0, 1, axis=1) #  为a2 添加了一列常数项1(偏置单元),(5000, 26)
a2.shape

z3 = a2 @ theta2.T
a3 = sigmoid(z3)
a3.shape


# np.argmax返回array中数值最大数的下标,默认将输入array视作一维,出现相同的最大,返回第一次出现的。
y_pred = np.argmax(a3, axis=1) + 1  #  np.argmax(a, axis=None, out=None),a—-输入array,axis—-为0代表列方向,为1代表行方向,out—-结果写到这个array里面。y_pred.shape  (5000,)

accuracy = np.mean(y_pred == y)
print ('accuracy = {0}%'.format(accuracy * 100))  # accuracy = 97.52%

おそらくとき、フィードフォワード機能流れ:

概要

  • 非線形仮定の質問、とき特性の多くまたはロジスティック回帰を使用する場合、初期指数関数的に多くの特徴を持っています機能の多項式数を解決するには、これは算術演算でもオーバーフィッティング、大きすぎる原因となります。
  • ニューラルネットワークアルゴリズムは、非線形ケースを解決するための仮想的な質問の多くで非常に良い機能です数学的に、ニューロンの唯一の隠された層が十分を含み、多層フィードフォワードネットワークは、任意の複雑さの任意の連続関数の精度を近似することができる証明されています。だから、強力な神経回路網を読み取ることができます。
  • 同様のことにより、神経細胞体と同様の樹状突起は、同様のことによって、それを動作させるためにニューロン入力チャンネル情報を配信、および軸索の出力チャネルをもたらします。
    • (非線形関数hを参照して活性化機能(関数活性化)と呼ぶ(^ G(Z)= \ {FRAC 1 1} + {Z} E {} \ - \)別の用語)を
    • 称逻辑单元(logistic unit)是一个带激活函数的人工神经元(artificial neuron)。
    • 在激活函数中的参数又叫模型的权重
  • 第一层叫输入层(input layer),在这一层输入特征;最后一层叫输出层(output layer)输出最后的结果;中间层叫隐层(hidden layer)看不到输入或者输出的值。
  • 此外有时还可以设置一个值为1的偏置单元(bias unit)。

参考资料

吴恩达|机器学习作业3.1前馈神经网络

吴恩达机器学习作业Python实现(三):多类分类和前馈神经网络

おすすめ

転載: www.cnblogs.com/yangdd/p/12376462.html