<jupyter_start><jupyter_text>[Python で 超実習ディープラーニング](https://www.seminar-info.jp/entry/seminars/view/1/4174)実践！ 強化学習・画像認識・自然言語処理・ロボティクス![](https://www.seminar-info.jp/entry/img/logo_ov.jpg)<NAME>, all rights reserved.Date: 15/Mar/2019 MIT license<jupyter_code>"""
[Original](mnist_hierarchical_rnn.py)

手書き文字データセット kmnist を系列処理とみなしてリカレントニューラルネットワークによる
系列処理で認識精度を実習する
"""
import numpy as np
import keras
from keras.layers import Dense
from keras.layers import LSTM
from keras.models import Sequential

# Training parameters.
batch_size = 32
num_classes = 10
epochs = 5
# データの入手が未だの場合は以下の行頭の # を削除して本セルを実行してください
#!wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-imgs.npz
#!wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-labels.npz 
#!wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-imgs.npz
#!wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-labels.npz
# 直下行の N=10000 は実習の都合で実際のデータより少なくして学習時間を短くするためです
# 実際には全データ，すなわち N=60000 を使って評価する必要があります。
N=10000
X_train = np.load('kmnist-train-imgs.npz')['arr_0'][:N].reshape(-1,28,28)
X_test = np.load('kmnist-test-imgs.npz')['arr_0'].reshape(-1,28,28)
y_train = np.load('kmnist-train-labels.npz')['arr_0'][:N]
y_test = np.load('kmnist-test-labels.npz')['arr_0']
X_train.shape, y_train.shape, X_test.shape, y_test.shape
# 入出力を keras に入力できるように整形します
x_train = X_train.astype('float32')
x_test = X_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# Converts class vectors to binary class matrices.
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential()   # モデルの作成
model.add(LSTM(32, input_shape=(28, 28), return_sequences=True))
model.add(LSTM(16, return_sequences=False))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.summary()  # 作成したモデルほ表示
# 訓練の開始
epochs = 10
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))

# Evaluation.
scores = model.evaluate(x_test, y_test, verbose=True)
print('Test loss:', scores[0])
print('Test accuracy:', scores[1])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1512884455527847, 'fraction_numerical': 0.029093931837073983, 'mean_word_length': 5.630853994490358, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '541616', 'license': 'MIT', 'n_tokens_mistral': 1199, 'n_tokens_neox': 1129, 'n_words': 140, 'path': 'notebooks/2019si_sequential_kmnist.ipynb', 'repo_name': 'ShinAsakawa/2019seminar_info', 'size': '2413'}