深度學習 實驗四 Keras基礎與簡單應用

2021-10-05 16:23:51 字數 4855 閱讀 6631

搭建keras開發環境,掌握基於tensorflow的高階api框架keras的基本用法,通過mnist手寫數字體資料集,搭建基於keras api的神經網路,並用來識別手寫數字體。

1.匯入模組

匯入實驗所需的相關模組——datasets模組中匯入資料集mnist模組、layer.core模組匯入dense和activation模組、optimizers 模組匯入sgd模組、utils模組匯入np_utils模組、models模組匯入sequential和model。

2.資料預處理

2.1 通過mnist模組的load_data方法載入訓練集和測試集。

2.2 利用numpy模組的reshape方法重塑訓練集和測試集的形狀,適用實驗訓練。

2.3 為了方便神經網路的計算,對x_train和x_test的資料進行歸一化,從0255的取值壓縮到01之間。

2.4 通過utils模組的to_categorical方法對y_train和y_test的one-hot編碼。

3.搭建神經網路

3.1 新增層

使用序列模型(即sequential模型)搭建最簡單的神經網路——感知機訓練模型。

3.2 編譯神經網路

通過model物件的compile方法來對模型進行編譯。

3.3 訓練神經網路

用model物件的fit方法進行模型的訓練。

3.4 評估神經網路

使用model物件的evaluate方法來評估模型,並將evaluate的返回值儲存到變數score中,然後列印score的第一項和第二項值,檢視總的損失值和準確率。

4.優化神經網路

調整神經網路中的模型構建——適當增加隱藏層、更改隱藏層的節點數、更換啟用函式和對訓練時引數調整進一步優化神經網路,提高測試的準確率。

# coding: utf-8

# 導包

from keras.datasets import mnist

from keras.layers.core import dense,activation,dropout

from keras.optimizers import sgd

from keras.utils import np_utils

from keras.models import sequential, model

# 1.資料預處理

# 1.1 載入訓練集和測試集

(x_train,y_train)

,(x_test,y_test)

= mnist.load_data(

)print

(x_train.shape)

print

(y_train.shape)

print

(x_test.shape)

print

(y_test.shape)

# 1.2 重塑訓練集和測試集的形狀

x_train = x_train.reshape(

60000

,784

)x_test = x_test.reshape(

10000

,784

)x_train = x_train.astype(dtype=

'float32'

)x_test = x_test.astype(dtype=

'float32'

)print

(x_train.shape)

print

(x_test.shape)

print

(x_train.dtype)

print

(x_test.dtype)

# 1.3 歸一化,從0~255的取值壓縮到0~1之間

x_train /=

255x_test /=

255# 1.4 one-hot編碼

y_train = np_utils.to_categorical(y_train,num_classes=10)

y_test = np_utils.to_categorical(y_test,num_classes=10)

# 2. 搭建神經網路

# 2.1 新增層

model = sequential(

)model.add(dense(

10, input_shape=

(784,)

))model.add(activation(

'softmax'))

model.summary(

)# 2.2 編譯神經網路

model.

compile

(loss =

'categorical_crossentropy'

, optimizer =

'sgd'

, metrics=

['accuracy'])

# 2.3 訓練神經網路

history = model.fit(x_train, y_train, batch_size=

128, epochs=

200, verbose=

1, validation_split=

0.2)

# 2.4 評估神經網路

score = model.evaluate(x_test, y_test, verbose=1)

print

('test score:'

, score[0]

)print

('test accuracy:'

, score[1]

)# 3. 優化神經網路

# 3.1 模型改進

model2 = sequential(

)model2.add(dense(

128, input_shape=

(784,)

))model2.add(activation(

'softmax'))

model2.add(dense(

128)

)model2.add(activation(

'relu'))

model2.add(dense(10)

)model2.add(activation(

'softmax'))

model2.summary(

)# 3.2 編譯神經網路

model2.

compile

(loss =

'categorical_crossentropy'

, optimizer =

'sgd'

, metrics=

['accuracy'])

# 3.3 訓練神經網路

history = model2.fit(x_train, y_train, batch_size=

128, epochs=

20, verbose=

1, validation_split=

0.2)

# 3.4 評估神經網路

score = model2.evaluate(x_test, y_test, verbose=1)

print

('test score:'

, score[0]

)print

('test accuracy:'

, score[1]

)# 4. 模型優化2

# 4.1 模型改進

model3 = sequential(

)model3.add(dense(

512, input_shape=

(784,)

))model3.add(activation(

'relu'))

model3.add(dropout(

0.2)

)model3.add(dense(

512)

)model3.add(activation(

'relu'))

model3.add(dropout(

0.2)

)model3.add(dense(10)

)model3.add(activation(

'softmax'))

model3.summary(

)# 4.2 編譯神經網路

model3.

compile

(loss =

'categorical_crossentropy'

, optimizer =

'rmsprop'

, metrics=

['accuracy'])

# 4.3 訓練神經網路

history = model3.fit(x_train, y_train, epochs=

10, batch_size=

128,

verbose =

1, validation_data=

[x_test, y_test]

)# 4.4 評估神經網路

score = model3.evaluate(x_test, y_test, verbose =0)

print

('test score:'

, score[0]

)print

('test accuracy:'

, score[1]

)

Keras深度學習(四)

今天測試前幾天所提到的演算法 1.使用keras定義簡單的神經網路 from future import print function import numpy as np from keras.datasets import mnist from keras.models import seque...

基於Python的Keras深度學習基礎

keras 的核心資料結構是 model,一種組織網路層的方式。最簡單的模型是 sequential 順 序模型,它是由多個網路層線性堆疊的棧。對於更複雜的結構,你應該使用 keras 函式式 api,它允許構建任意的神經網路圖。sequential 順序模型如下所示 from keras.mode...

keras深度學習(二)

上一次,我學到了感知機,多層感知機,啟用函式等 寫出了第乙個keras 例項 import keras.models import sequential model sequential model.add dense 12,input dim 8,kernel initializer random...