| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- """
- To know more or get code samples, please visit my website:
- https://mofanpy.com/tutorials/
- Or search: 莫烦Python
- Thank you for supporting!
- """
- # please note, all tutorial code are running under python3.5.
- # If you use the version like python2.7, please modify the code accordingly
- # 8 - RNN Classifier example
- # to try tensorflow, un-comment following two lines
- # import os
- # os.environ['KERAS_BACKEND']='tensorflow'
- import numpy as np
- np.random.seed(1337) # for reproducibility
- from keras.datasets import mnist
- from keras.utils import np_utils
- from keras.models import Sequential
- from keras.layers import SimpleRNN, Activation, Dense
- from keras.optimizers import Adam
- TIME_STEPS = 28 # same as the height of the image
- INPUT_SIZE = 28 # same as the width of the image
- BATCH_SIZE = 50
- BATCH_INDEX = 0
- OUTPUT_SIZE = 10
- CELL_SIZE = 50
- LR = 0.001
- # 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 pre-processing
- X_train = X_train.reshape(-1, 28, 28) / 255. # normalize
- X_test = X_test.reshape(-1, 28, 28) / 255. # normalize
- y_train = np_utils.to_categorical(y_train, num_classes=10)
- y_test = np_utils.to_categorical(y_test, num_classes=10)
- # build RNN model
- model = Sequential()
- # RNN cell
- model.add(SimpleRNN(
- # for batch_input_shape, if using tensorflow as the backend, we have to put None for the batch_size.
- # Otherwise, model.evaluate() will get error.
- batch_input_shape=(None, TIME_STEPS, INPUT_SIZE), # Or: input_dim=INPUT_SIZE, input_length=TIME_STEPS,
- output_dim=CELL_SIZE,
- unroll=True,
- ))
- # output layer
- model.add(Dense(OUTPUT_SIZE))
- model.add(Activation('softmax'))
- # optimizer
- adam = Adam(LR)
- model.compile(optimizer=adam,
- loss='categorical_crossentropy',
- metrics=['accuracy'])
- # training
- for step in range(4001):
- # data shape = (batch_num, steps, inputs/outputs)
- X_batch = X_train[BATCH_INDEX: BATCH_INDEX+BATCH_SIZE, :, :]
- Y_batch = y_train[BATCH_INDEX: BATCH_INDEX+BATCH_SIZE, :]
- cost = model.train_on_batch(X_batch, Y_batch)
- BATCH_INDEX += BATCH_SIZE
- BATCH_INDEX = 0 if BATCH_INDEX >= X_train.shape[0] else BATCH_INDEX
- if step % 500 == 0:
- cost, accuracy = model.evaluate(X_test, y_test, batch_size=y_test.shape[0], verbose=False)
- print('test cost: ', cost, 'test accuracy: ', accuracy)
|