Keras手寫識別例子(1)----softmax


轉自:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-2-classifier/#測試模型

下載數據

# download the mnist to the path '~/.keras/datasets/' if it is the first time to be called
# X shape (60,000 28x28), y shape (10,000, )
(X_train, y_train), (X_test, y_test) = mnist.load_data()

data預處理:

X_train = X_train.reshape(X_train.shape[0], -1) / 255.   # normalize
X_test = X_test.reshape(X_test.shape[0], -1) / 255.      # normalize
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)

 

導入包:

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("./", one_hot=True)
X_train=mnist.train.images
Y_train=mnist.train.labels
X_test=mnist.test.images
Y_test=mnist.test.labels

因為(X_train, y_train), (X_test, y_test) = mnist.load_data()需從網上下載數據,由於網絡限制,下載失敗。

可以先在官網yann.lecun.com/exdb/mnist/上下載四個數據(train-images-idx3-ubyte.gz、train-labels-idx1-ubyte.gz、t10k-images-idx3-ubyte.gz、t10k-labels-idx1-ubyte.gz

在當前目錄,不要解壓!

#input_data.py該模塊在tensorflow.examples.tutorials.mnist下,直接加載來讀取上面四個壓縮包。

#四個壓縮包形式為特殊形式。非圖片和標簽,要解析。

from tensorflow.examples.tutorials.mnist import input_data

#加載數據路徑為"./",為當前路徑,自動加載數據,用one-hot方式處理好數據。

#read_data_sets是input_data.py里面的一個函數,主要是將數據解壓之后,放到對應的位置。 第一個參數為路徑,寫"./"表示當前路徑,其會判斷該路徑下有沒有數據,沒有的話會自動下載數據。

mnist = input_data.read_data_sets("./", one_hot=True)  

 

相關的包:

model.Sequential():用來一層一層的去建立神經層。

layers.Dense,表示這個神經層是全連接層。

layers.Activation,激勵函數

optimizers.RMSprop,優化器采用RMSprop,加速神經網絡訓練方法。

Keras工作流程:

  1. 定義訓練數據:輸入張量和目標張量
  2. 定義層組成的網絡(或模型),將輸入映射到目標
  3. 配置學習過程:選擇損失函數、優化器和需要監控的指標
  4. 調用模型的fit方法在訓練數據上進行迭代

代碼:

import numpy as np
np.random.seed(1337)  # for reproducibility
from keras.datasets import mnist
from keras.models import Sequential from keras.layers import Dense, Activation from keras.optimizers import RMSprop #讀取數據,其中,X_train為55000*784,Y_train為55000*10,X_test為10000*784,Y_test大小為10000*10. from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("./", one_hot=True) X_train=mnist.train.images Y_train=mnist.train.labels X_test=mnist.test.images Y_test=mnist.test.labels

#建立神經網絡模型,一共兩層,第一層輸入784個變量,輸出為32,激活函數為relu,第二層輸入是上層的輸出32,輸出為10,激活函數為softmax。 model = Sequential([ Dense(32, input_dim=784), Activation('relu'), Dense(10), Activation('softmax'), ]) #采用RMSprop來求解模型,設學習率lr為0.001,以及別的參數。 rmsprop = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0) #激活模型,優化器為rmsprop,損失函數為交叉熵,metric,里面可以放入需要計算的,比如cost、accuracy、score等 model.compile(optimizer=rmsprop, loss='categorical_crossentropy', metrics=['accuracy']) #訓練網絡,用fit函數,導入數據,訓練次數為20,每批處理32個 model.fit(X_train, Y_train, nb_epoch=20, batch_size=32) #測試模型 print('\nTesting ------------') # Evaluate the model with the metrics we defined earlier loss, accuracy = model.evaluate(X_test, Y_test) print('test loss: ', loss) print('test accuracy: ', accuracy)

 結果:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM