Keras中將LSTM用於mnist手寫數字識別
阿新 • • 發佈:2019-02-14
使用如下結構,10個epochs,就可以使得測試集的準確率達到98.3%左右import keras from keras.layers import LSTM from keras.layers import Dense, Activation from keras.datasets import mnist from keras.models import Sequential from keras.optimizers import Adam learning_rate = 0.001 training_iters = 20 batch_size = 128 display_step = 10 n_input = 28 n_step = 28 n_hidden = 128 n_classes = 10 (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.reshape(-1, n_step, n_input) x_test = x_test.reshape(-1, n_step, n_input) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 y_train = keras.utils.to_categorical(y_train, n_classes) y_test = keras.utils.to_categorical(y_test, n_classes) model = Sequential() model.add(LSTM(n_hidden, batch_input_shape=(None, n_step, n_input), unroll=True)) model.add(Dense(n_classes)) model.add(Activation('softmax')) adam = Adam(lr=learning_rate) model.summary() model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=batch_size, epochs=training_iters, verbose=1, validation_data=(x_test, y_test)) scores = model.evaluate(x_test, y_test, verbose=0) print('LSTM test score:', scores[0]) print('LSTM test accuracy:', scores[1])
_________________________________________________________________
Layer (type) Output Shape Param #=================================================================
lstm_1 (LSTM) (None, 128) 80384
_________________________________________________________________
dense_1 (Dense) (None, 10) 1290
_________________________________________________________________
activation_1 (Activation) (None, 10) 0
=================================================================
Total params: 81,674
Trainable params: 81,674
Non-trainable params: 0
_________________________________________________________________
總共有81674個引數需要訓練。