神經網路基礎
- 1. 神經網路
- 1.1 感知機(PLA: Perceptron Learning Algorithm))
- 2. playground使用
- 2.1 playground簡單兩類分類結果
- 2.2 單神經元復雜的兩類-playground演示
- 2.3 多個神經元效果演示
- 3. Sequential構建簡單單層神經網路模型
- 3.1 tensorflow構建單層神經網路
- 3.2 完整代碼
1. 神經網路
人工神經網路( Artificial Neural Network, 簡寫為ANN)也簡稱為神經網路(NN),是一種模仿生物神經網路(動物的中樞神經系統,特別是大腦)結構和功能的 計算模型,經典的神經網路結構包含三個層次的神經網路,分別輸入層,輸出層以及隱藏層,

其中每層的圓圈代表一個神經元,隱藏層和輸出層的神經元有輸入的資料計算后輸出,輸入層的神經元只是輸入,
- 神經網路的特點
- 每個連接都有個權值
- 同一層神經元之間沒有連接
- 最后的輸出結果對應的層也稱之為全連接層
神經網路是深度學習的重要演算法,用途在影像(如影像的分類、檢測)和自然語言處理(如文本分類、聊天等)
那么為什么設計這樣的結構呢?首先從一個最基礎的結構說起,神經元,以前也稱之為感知機,神經元就是要模擬人的神經元結構,

一個神經元通常具有多個樹突,主要用來接受傳入資訊;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經元傳遞資訊,軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號,這個連接的位置在生物學上叫做“突觸”,
要理解神經網路,其實要從感知機開始,
1.1 感知機(PLA: Perceptron Learning Algorithm))
感知機就是模擬這樣的大腦神經網路處理資料的程序,
感知機模型如下圖:

感知機是一種最基礎的分類模型,前半部分類似于回歸模型,感知機最基礎是這樣的函式,而邏輯回歸用的sigmoid,這個感知機具有連接的權重和偏置

我們通過一個平臺去演示,就是tensorflow playground
2. playground使用

網址:http://playground.tensorflow.org
那么在這整個分類程序當中,是怎么做到這樣的效果那要受益于神經網路的一些特點

要區分一個資料點是橙色的還是藍色的,你該如何撰寫代碼?也許你會像下面一樣任意畫一條對角線來分隔兩組資料點,定義一個閾值以確定每個資料點屬于哪一個組,
其中 b 是確定線的位置的閾值,通過分別為 x1 和 x2 賦予權重 w1 和 w2,你可以使你的代碼的復用性更強,

此外,如果你調整 w1 和 w2 的值,你可以按你喜歡的方式調整線的角度,你也可以調整 b 的值來移動線的位置,所以你可以重復使用這個條件來分類任何可以被一條直線分類的資料集,但問題的關鍵是程式員必須為 w1、w2 和 b 找到合適的值——即所謂的引數值,然后指示計算機如何分類這些資料點,
2.1 playground簡單兩類分類結果

但是這種結構的線性的二分類器,但不能對非線性的資料并不能進行有效的分類,
感知機結構,能夠很好去解決與、或等問題,但是并不能很好的解決異或等問題,我們通過一張圖來看,有四個樣本資料
與問題:每個樣本的兩個特征同時為1,結果為1
或問題:每個樣本的兩個特征一個為1,結果為1
異或:每個樣本的兩個特征相同為0, 不同為1
根據上述的規則來進行劃分,我們很容易建立一個線性模型

相當于給出這樣的資料


2.2 單神經元復雜的兩類-playground演示

那么怎么解決這種問題呢?其實我們多增加幾個感知機即可解決?也就是下圖這樣的結構,組成一層的結構?

2.3 多個神經元效果演示

3. Sequential構建簡單單層神經網路模型
Sequential模型是層的線性堆疊,我們可以Sequential通過將層實體串列傳遞給建構式來創建模型:
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
])
同樣可以用add方法來添加模型
model = Sequential()
model.add(Dense(32, input_dim=784))
3.1 tensorflow構建單層神經網路
# 2、全連接層神經網路計算
# 全連接層神經網路的計算公式:[None, 784] * [784, 10] + [10] = [None, 10]
# 隨機初始化權重偏置引數,這些是優化的引數,必須使用變數op去定義
with tf.variable_scope("fc_model"):
weight = tf.Variable(tf.random_normal([784, 10]), name="w")
bias = tf.Variable(tf.random_normal([10]), name="b")
# fc層的計算
# y_predict [None, 10]輸出結果,提供給softmax使用
y_predict = tf.matmul(x, weight) + bias
3.2 完整代碼
"""tf.keras模型API介紹"""
from tensorflow.python.keras.models import Sequential, Model
from tensorflow.python.keras.layers import Dense, Flatten, Input
import tensorflow as tf
def main():
# 構建神經網路模型
model_first = Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation=tf.nn.relu),
Dense(10, activation=tf.nn.softmax)
])
print(model_first)
# 通過Model構建模型
data = Input(shape=(784, ))
out = Dense(64)(data)
model_sec = Model(inputs=data, outputs=out)
print(model_sec)
# 獲取層次結構:layers
print(model_first.layers)
# 獲取輸入輸出inputs
print(model_first.inputs)
print(model_first.outputs)
# 獲取模型結構引數摘要
print(model_first.summary())
if __name__ == '__main__':
main()
加油!
感謝!
努力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293507.html
標籤:AI
上一篇:人工智能數學基礎---定積分4:使用換元法計算定積分
下一篇:Pytorch基礎(機器學習)
