深度學習day3(深度網路的數學基礎)

2021-10-10 04:18:51 字數 4808 閱讀 9712

1.什麼是深度學習?

前兩篇流水賬大概了解一下子深度學習是什麼,現在正是進入學習

如:使用 python 的 keras 庫來學習手寫數字分類

解決的問題是,將手寫數字的灰度影象(28 畫素×28 畫素)劃分到 10 個類中(0~9)。

使用的資料集:mn這個資料集包含 60 000 張訓練影象和 10 000 張測試圖

像,由美國國家標準與技術研究院st 資料集(它是機器學習領域的乙個經典資料集)

1. 類與標籤

關於類和標籤的說明在機器學習中,分類問題中的某個類別叫作類(class)。資料點叫作樣本(sample)。某個樣本對應的類叫作標籤(label)。

2. 載入keras中的mnist資料集、

from keras.datasets import mnist

(train_images, train_labels)

,(test_images, test_labels)

= mnist.load_data(

)

第一句:載入keras中的mnist資料集

【mnist資料集預先載入在keras中,其中包括了4個numpy陣列】

第二句:train_images與』train_labels組成了訓練集(training set ),模型將從這些資料中進行學習。然後在測試集(test set,即train_images和test_lables)上隊模型進行測試。

【在訓練集中進行學習學,在測試集中進行測試】

影象在編碼為nump陣列,而標籤是數字陣列,取值範圍0~9.影象和標籤一一對應

3. 觀察訓練集與測試集

>>

> train_images.shape//訓練集資料特徵的大小

(60000,28

,28)>>

>

len(train_labels)

//訓練集標籤的長度

60000

>>

> train_labels//列印出標籤

array([5

,0,4

,...

,5,6

,8], dtype=uint8)

>>

> test_images.shape

(10000,28

,28)>>

>

len(test_labels)

10000

>>

> test_labels

array([7

,2,1

,...

,4,5

,6], dtype=uint8)

4. 進入神經網路學習

1)工作流程概述

首先,將訓練資料(train_images 和 train_labels)輸入神經網路;

其次,網路學習將影象和標籤關聯在一起;

最後,網路對 test_images 生成**,

而我們將驗證這些**與 test_labels 中的標籤是否匹配。

2)網路架構

from keras import models

from keras import layers

network = models.sequential(

)network.add(layers.dense(

512, activation=

'relu'

, input_shape=(28

*28,)

))network.add(layers.dense(

10, activation=

'softmax'

))

3)層的設定

keras定義網路層的基本方法,其**如下:

keras.layers.dense(units,

// 該層有幾個神經元

activation=

none

,// 該層使用的啟用函式

use_bias=

true

,// 是否新增偏置項

kernel_initializer=

'glorot_uniform'

,//權重初始化方法

bias_initializer=

'zeros'

,// 偏置值初始化方法

kernel_regularizer=

none

,//權重規範化函式

bias_regularizer=

none

,//偏置值規範化方法

activity_regularizer=

none

,//輸出的規範化方法

kernel_constraint=

none

,//權重變化限制函式

bias_constraint=

none

)//偏置值變化限制函式

3). 舉個例子

keras.layers.dense(

512, activation=

'sigmoid'

, input_dim=

2, use_bias=

true

)

dense層的基礎講解

深度dense的講解

4).softmax函式

】4)編譯步驟

1. 編譯步驟中的三個重要引數

network.

compile

(optimizer=

'rmsprop',//

compile

:自定義生成的函式,optimizer:即我覺得是優化器。以後知道了來改改

loss=

'categorical_crossentropy'

,//設定損失函式

metrics=

['accuracy'])

//監控指標

【拓展】【關於優化器的,樣例使用了rmsprop,具體介紹一下rmsprop優化器】

5)準備影象資料

步驟說明:在開始訓練之前,我們將對資料進行預處理,將其變換為網路要求的形狀,並縮放到所有值都在 [0, 1] 區間。

2.例子: 比如之前訓練影象儲存在乙個 uint8 型別的陣列中,其形狀為(60000, 28, 28),取值區間為 [0, 255]。我們需要將其變換為乙個 float32 陣列,其形狀為 (60000, 28 * 28),取值範圍為 0~1。

train_images = train_images.reshape(

(60000,28

*28))

//初始的大小

train_images = train_images.astype(

'float32')/

255test_images = test_images.reshape(

(10000,28

*28))

test_images = test_images.astype(

'float32')/

255

6)準備標籤

from keras.utils import to_categorical

train_labels = to_categorical(train_labels)

test_labels = to_categorical(test_labels)

開始訓練網路,在 keras 中這一步是通過呼叫網路的 fit 方法來完成的——我們在訓練資料上擬合(fit)模型。

>>

> network.fit(train_images, train_labels, epochs=

5, batch_size=

128)

epoch 1/5

60000

/60000[==

====

====

====

====

====

*****==

]- 9s - loss:

0.2524

- acc:

0.9273

epoch 2/5

51328

/60000[==

====

====

====

====

====

=>..

...]

- eta: 1s - loss:

0.1035

- acc:

0.9692

訓練過程中顯示了兩個數字:乙個是網路在訓練資料上的損失(loss),另乙個是網路在訓練資料上的精度(acc)。來檢查一下模型在測試集上的效能。

>>

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

>>

>

print

('test_acc:'

, test_acc)

test_acc:

0.9785

【拓展】測試集精度為 97.8%,比訓練集精度低不少。訓練精度和測試精度之間的這種差距是過擬合(overfit)造成的。過擬合是指機器學習模型在新資料上的效能往往比在訓練資料上要差

3 數學基礎與深度學習

紮實的數學基礎是學習和研究深度學習的前提。沒有線性代數和統計學相關的知識,無法真正理解任何機器學習演算法的核心思想。在此要求所有的新生學習相關的數學基礎課程。prof.gilbert strang在mit講的線性代數 膜拜 是工科領域最強線代。來自cmu,世界上最好的工科統計學教材。學習內容 書上全...

Day3 前端學習

組成部分 標題 表頭 主體 表尾 table 定義乙個 caption 定義 的標題 thead 定義表頭部分 tbody 定義 主體部分 tfoot 定義表尾,一般來顯示彙總資訊 tr 定義一行 th td 定義資料項 單元格 th一般用於表頭,有加粗的樣式 td 一般用於主體部分,沒有加粗的樣式...

學習記錄Day3

以類的方式組織 以物件的形式封裝資料 抽象特性 封裝,繼承,多型 方法定義 方法呼叫 呼叫非靜態方法需要例項化類 new student student new student student.方法 static方法與類同時建立 一般方法得等執行到那 值傳遞與引用傳遞 物件是乙個類的例項化 類是抽象...