lstm是優秀的迴圈神經網路(rnn)結構,而lstm在結構上也比較複雜,對rnn和lstm還稍有疑問的朋友可以參考:recurrent neural networks vs lstm
這裡我們將要使用keras搭建lstm.keras封裝了一些優秀的深度學習框架的底層實現,使用起來相當簡潔,甚至不需要深度學習的理論知識,你都可以輕鬆快速的搭建你的深度學習網路,強烈推薦給剛入門深度學習的同學使用,當然我也是還沒入門的那個。keras:的backend有,theano,tensorflow、cntk,這裡我使用的是tensorflow。
下面我們就開始搭建lstm,實現mnist資料的分類。
step 0 載入包和定義引數
mnist的image是28*28的shape,我們定義lstm的input為(28,),將image一行一行地輸入到lstm的cell中,這樣time_step就是28,表示乙個image有28行,lstm的output是30個。
from keras.datasets importmnistfrom keras.layers importdense, lstmfrom keras.utils importto_categoricalfrom keras.models importsequential#parameters for lstm
nb_lstm_outputs = 30 #神經元個數
nb_time_steps = 28 #時間序列長度
nb_input_vector = 28 #輸入序列
step 1 資料預處理
特別注意label要使用one_hot encoding,x_train的shape(60000, 28,28)
1 #data preprocessing: tofloat32, normalization, one_hot encoding
2 (x_train, y_train), (x_test, y_test) =mnist.load_data()3 x_train = x_train.astype('float32')4 x_test = x_test.astype('float32')5 x_train /= 255
6 x_test /= 255
8 y_train = to_categorical(y_train, num_classes=10)9 y_test = to_categorical(y_test, num_classes=10)
step 2 搭建模型
keras搭建模型相當簡單,只需要在sequential容器中不斷add新的layer就可以了。
1 #build model
2 model =sequential()3 model.add(lstm(units=nb_lstm_outputs, input_shape=(nb_time_steps, nb_input_vector)))4 model.add(dense(10, activation='softmax'))
step 3 compile
模型compile,指定loss function, optimizer, metrics
1 #compile:loss, optimizer, metrics
2 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
step 4 train
模型訓練,需要指定,epochs訓練的輪次數,batch_size。
1 #train: epcoch, batch_size
2 model.fit(x_train, y_train, epochs=20, batch_size=128, verbose=1)
step 5 evaluate
可以使用model.summary()來檢視你的神經網路的架構和參數量等資訊。
1 model.summary()2
3 score = model.evaluate(x_test, y_test,batch_size=128, verbose=1)4 print(score)
我的最後結果是:
keras多層感知機MLP
肯定有人要說什麼多層感知機,不就是幾個隱藏層連線在一起的嗎。話是這麼說,但是我覺得我們首先要自己承認自己高階,不然怎麼去說服 hu nong 別人呢 from keras.models import sequential from keras.layers import dense import n...
keras 1 多層感知機實現
建立於星期二星期六14 42 13 2018 author yuyangyg baseline mlp for mnist dataset import numpy from keras.datasets import mnist from keras.models import從keras.lay...
Keras多層感知器識別手寫數字
from keras.utils import np utils import numpy as np np.random.seed 10 from keras.datasets import mnist x train image,y train label x test image,y test...