搭建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...