Introduction
- 神經網路是為了模擬神經元傳遞的過程
- 不同結構的神經網路解決不同的問題
感知器(Perceptron)
有n個輸入數據,通過權重與各數據之間的計算和,比較激活函數結果,得出輸出
- 應用:很容易解決與(and)、或(or)問題
- 常用來解決分類問題
- 一個感知器通常建立一條直線
- 單個感知器解決不了的問題,可以增加感知機的數目
結構
- 其中$f$為閾值(threshold)
- 大於$f$或是小於$f$則屬於不同類別
神經網路的特點
- 輸入向量的維度和輸入神經元的個數相同
- 每個連接都有個權值
- 同一層神經元之間沒有連接
- 由輸入層、隱層、輸出層組成
- 下一層與前一層的所有神經元連接,也叫全連接(Dense Layer)
其最後有多少全連接神經元,代表共有多少輸出類別
神經網路組成
- 結構(Architecture):例如神經網路中權重、神經元等等
- 激活函數(Activity Rule):
- 學習規則(Learning Rule):學習規則指定了網路中的權重如何隨著時間推進而調整。(反向傳播算法)
神經網絡的多分類問題
輸入一個樣本,並得出這個樣本屬於全部每一個類別的概率,並比較哪個概率較大決定類別
- 其有多少類別輸出就為多少個類別
神經網路API
在使用tensorflow時,tf.nn
、tf.layers
、tf.contrib
模塊有很多功能式重複的
tf.nn
提供神經網路相關操作的支持,包括卷積操作(conv)、池化操作(pooling)、歸一化、損失(loss)、分類操作、embedding、RNN、Evaluation
tf.layers
主要提供的高層神經網路,主要和卷積相關,對tf.nn
進一步的封裝
tf.contrib(最高層的接口)
tf.contrib.layers
提供夠將計算圖中的網絡層、正則化、摘要操作。是構建計算圖的高級操作,但是tf.contrib
包不穩定以及擁有一些實驗性的代碼
SoftMax回歸
公式:
- 其經過softmax後的結果類似邏輯回歸為一概率值
- 所有類別的概率值相加都等於1
- 真實類別的值為one-hot編碼形式
全連接-從輸入直接到輸出
- 特徵加權:
tf.matmul(a, b, name=None)
+ $bias$- return: 全連接的結果,供交叉損失運算
- 不需要激活函數(因為是最後的輸出)
神經網絡策略-交叉熵損失
類似邏輯回歸-對數似然損失的推廣
- $y_{i}’$ 為真實結果,$y_i$為softmax後結果
- 一個樣本就有一個交叉熵損失
- softmax計算出來的概率值 越接近真實值類別onehot編碼的話 表示損失越小
SoftMax計算、交叉熵API
求所有樣本的損失,然後求平均損失
tf.nn.softmax_cross_entropy_with_logits(labels=None,logits=None, name=None)
- 計算logits和labels之間的交叉損失熵
labels
:標籤值(真實值)logits
:樣本加權之後的值(預測值)- return:返回損失列表
tf.reduce_mean(input_tensor)
- 計算張量的尺寸的元素平均值
神經網絡優化-反向傳播算法
就是梯度下降
損失下降API
tf.train.GradientDescentOptimizer(learning_rate)
- 用於梯度下降優化
learning_rate
:學習率minimize(loss)
:最小化損失- return:梯度下降op
準確率計算API
equal_list = tf.equal(tf.argmax(y,1),tf.argmax(y_label,1))
- 找尋特徵得到概率最大值的index,如果與onehot編碼label為1的index相同則為1,不同則為0
tf.argmax(data,row or column)
- 返回data中的最大值index
- 第二個參數為0代表取列中最大值的索引,1則為行中最大值的索引
accuracy = tf.reduce_mean(tf.cast(equal_list, tf.float32))
mnist dataset的基本操作
https://github.com/curtis992250/MachineLearning_StudyNote/blob/master/mnist.ipynb
Example 單層(全連接層)實現手寫數字識別
1 | import tensorflow as tf |