Python深度學習02 神經網路的數學基礎

2022-06-29 16:45:12 字數 4204 閱讀 2744

2.1 初始神經網路

mnist資料集:手寫數字的灰度影象(28 畫素×28 畫素),包含 60 000 張訓練影象和 10 000 張測試影象。

類:分類問題中的某個類別叫作類(class)

樣本:資料點叫作樣本(sample)

標籤:某個樣本對應的類叫作標籤(label)

損失函式(loss function):網路如何衡量在訓練資料上的效能,即網路如何朝著正確的方向前進。

優化器(optimizer):基於訓練資料和損失函式來更新網路的機制。

在訓練和測試過程中需要監控的指標(metric):本例只關心精度,即正確分類的影象所佔的比例

使用 keras 庫,載入資料集,**如下:

1

from keras.datasets import

mnist

2from keras import

models

3from keras import

layers

4from keras.utils import

to_categorical56

#載入 keras 中的 mnist 資料集

7 (train_images, train_labels), (test_images, test_labels) =mnist.load_data()89

#標籤10 train_labels =to_categorical(train_labels)

11 test_labels =to_categorical(test_labels)

1213

#準備影象資料

14 train_images = train_images.reshape((60000, 28 * 28))

15 train_images = train_images.astype('

float32

') / 255

16 test_images = test_images.reshape((10000, 28 * 28))

17 test_images = test_images.astype('

float32

') / 255

1819

#構建網路模型

20 network =models.sequential()

21 network.add(layers.dense(512, activation='

relu

', input_shape=(28 * 28,)))

22 network.add(layers.dense(10, activation='

softmax'))

2324

#編譯的三個引數

25 network.compile(optimizer='

rmsprop',

26 loss='

categorical_crossentropy',

27 metrics=['

accuracy'])

2829

#擬合模型

30 network.fit(train_images, train_labels, epochs=5, batch_size=128)

3132

#檢視測試集效能

33 test_loss, test_acc = network.evaluate(test_images, test_labels)

2.2 神經網路的資料表示

張量:當前所有機器學習系統都使用張量作為基本資料結構,張量的維度(dimension)通常叫作軸(axis)。

標量(0d 張量):僅包含乙個數字的張量叫作標量(scalar)

1

import

numpy as np

2 x = np.array(12)3x

45 array(12)67

x.ndim

89 0

向量(1d 張量):數字組成的陣列叫作向量(vector)或一維張量(1d 張量)。一維張量只有乙個軸。

1 x = np.array([12, 3, 6, 14, 7])2x

34 array([12, 3, 6, 14, 7])56

x.ndim

78 1

注:這個向量有 5 個元素,所以被稱為5d 向量。5d 向量只有乙個軸,沿著軸有 5 個維度。

5d 張量有 5 個軸(沿著每個軸可能有任意個維度)。

矩陣(2d 張量):向量組成的陣列叫作矩陣(matrix)或二維張量(2d 張量)。矩陣有 2 個軸(通常叫作行和列)。

1 x = np.array([[5, 78, 2, 34, 0],

2 [6, 79, 3, 35, 1],

3 [7, 80, 4, 36, 2]])45

x.ndim

67 2

注:[5, 78, 2, 34, 0] 是 x 的第一行, [5, 6, 7] 是第一列。

3d 張量與更高維張量:可以將其直觀地理解為數字組成的立方體。

1 x = np.array([[[5, 78, 2, 34, 0],

2 [6, 79, 3, 35, 1],

3 [7, 80, 4, 36, 2]],

4 [[5, 78, 2, 34, 0],

5 [6, 79, 3, 35, 1],

6 [7, 80, 4, 36, 2]],

7 [[5, 78, 2, 34, 0],

8 [6, 79, 3, 35, 1],

9 [7, 80, 4, 36, 2]]])

1011

x.ndim

12 3

張量的關鍵屬性:

形狀:整數元組,表示張量沿每個軸的維度大小(元素個數)。

前面矩陣示例的形狀為 (3, 5) ,3d 張量示例的形狀為 (3, 3, 5) 。向量的形狀只包含乙個元素,比如 (5,) ,而標量的形狀為空,即 () 。

資料型別:(在 python 庫中通常叫作 dtype ),張量的型別可以是 float32 、 uint8 、 float64 等。

切片:可以沿著每個張量軸在任意兩個索引之間進行選擇。

1

#所有影象的右下角選出 14 畫素×14 畫素的區域

2 my_slice = train_images[:, 14:, 14:]

2.3 神經網路的『齒輪』:張量運算

點積兩個向量的點積:對應維度的元素相乘,再相加,結果是乙個標量。

注:只有元素個數相同的向量之間才能做點積。

1

import

numpy as np

23 x = np.array([1,2,3])

4 y = np.array([4,5,6])

5 z =x.dot(y)6z

78 32

計算過程:1*4+2*5+3*6=32

矩陣與向量的點積,返回乙個向量。

注:「矩陣點積向量」的結果與「向量點積矩陣」的結果不同。

矩陣點積向量

1

import

numpy as np

23 a = np.array([[1,2],[3,4]])

4 x = np.array([5,6])

56 y1 =a.dot(x)7y1

89 [17 39]

計算:[1 * 5 + 2 * 6 , 3 * 5 + 4 * 6] = [17, 39]

向量點積矩陣

1 y2 =x.dot(a)2y2

34 [23 34]

計算:[5 * 1 + 6 * 3 , 5 * 2 + 6 * 4] = [23, 24]

兩個矩陣的點積:矩陣乘法

2.4 神經網路的「引擎」 : 基於梯度的優化

訓練(機器學習中的學習):根據反饋訊號逐漸調節這些權重,這個逐漸調節的過程叫作訓練。

導數:斜率 a 被稱為 f 在 p 點的導數(derivative)

更新方向:想減小f(x)的值,只需將x沿著導數的反方向移動一小步。

梯度(gradient):是張量運算的導數,它是導數這一概念向多元函式導數的推廣。

Python深度學習 迴圈神經網路

rnn存在的問題 梯度較容易出現衰減或 bptt 控迴圈神經 絡 捕捉時間序列中時間步距離較 的依賴關係 重置 有助於捕捉時間序列 短期的依賴關係 更新 有助於捕捉時間序列 期的依賴關係。長短期記憶long short term memory 遺忘門 控制上一時間步的記憶細胞 輸入門 控制當前時間步...

Python深度學習 神經網路剖析

訓練神經網路主要圍繞以下四個方面。它們之間的關係如下圖所示 神經網路的基本資料結構是層。層是乙個資料處理模組,將乙個或多個輸入張量轉換為乙個或多個輸出張量。有些層是無狀態的,但大多數的層是有狀態的,即層的權重。權重是利用隨機梯度下降學到的乙個或多個張量,其中包含網路的知識。不同的張量格式與不同的資料...

TensorFlow入門02 簡單的神經網路

在本文中會先介紹一些概念,然後給出乙個簡單的完整神經網路樣例程式。首先啟用函式可以解決線性不可分問題。讀者可以訪問通過網頁瀏覽器就可以訓練簡單神經網路並實現視覺化過程。截圖如下所示 神經網路模型的效果以及優化的目標是通過損失函式 loss function 來定義的。分類問題 如手寫數字識別 如何判...