まず必要なライブラリをインポートする。
いろいろ見た事ないものがあるので、調べてみると、
Flattenは2次元のデータを1次元のベクターにするのに使うらしい。
Conv2Dは2次元配列の畳み込み演算するのに使う。
MaxPooling2Dは、画像の圧縮をするのに使う。
import numpy from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from keras.layers import Flatten from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D from keras.utils import np_utils from keras import backend as K K.set_image_dim_ordering('th')
そしてお馴染みのランダムにシードの設定
# fix random seed for reproducibility seed = 7 numpy.random.seed(seed)
第1層がConv2Dになるのだが、そこに読み込める形にデータを整形する。
KerasのConv2Dに入力するためには、[画像数][pixles(グレースケールは1)][width][height]の4次元配列にする必要があるのでshapeを使う。
# load data (X_train, y_train), (X_test, y_test) = mnist.load_data() # reshape to be [samples][pixels][width][height] X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32') X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')
前回もやった0 - 255を0 - 1にNormalizeと教師データの整形を今回もやる。
# normalize inputs from 0-255 to 0-1 X_train = X_train / 255 X_test = X_test / 255 # one hot encode outputs y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) num_classes = y_test.shape[1]
モデルの定義をする。
1層目はConv2Dで32フィルター、フィルタのサイズ5 x 5、input_shapeは[1(グレースケール)][width][height]で指定。
2層目はMaxPooling2Dを使って画像を圧縮。slidesは指定がなければ、pool_sizeと同じになるようなので、2 x 2の領域が1つのPixcelにされるので14 x 14 の配列になるはず。
3層目はDropoutを使って20%のneuronsを伝播させない。これを入れるとover fittingを避けられるらしい。
4層目は2次元配列を1次元のベクターに変更
5層目は全結合のレイヤーで128 output
6層目は0 - 9の10のoutputでsoft max関数で確立に変換している。
# create model model = Sequential()
model.add(Conv2D(32, (5, 5), input_shape=(1, 28, 28), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(num_classes, activation='softmax')) # Compile model model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
そしてモデルの学習。前回と同じように200サンプルごとにパラメタのアップデートして、10回繰り返し。
# Fit the model model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200, verbose=2) # Final evaluation of the model scores = model.evaluate(X_test, y_test, verbose=0) print("Baseline Error: %.2f%%" % (100-scores[1]*100))
最終出力は以下。おお、エラー率が1%以下になっている。99%は判別できるという事。素晴らしい。
Train on 60000 samples, validate on 10000 samples Epoch 1/10 172s - loss: 0.2310 - acc: 0.9347 - val_loss: 0.0825 - val_acc: 0.9743 Epoch 2/10 170s - loss: 0.0736 - acc: 0.9780 - val_loss: 0.0467 - val_acc: 0.9841 Epoch 3/10 175s - loss: 0.0531 - acc: 0.9839 - val_loss: 0.0432 - val_acc: 0.9856 Epoch 4/10 165s - loss: 0.0401 - acc: 0.9878 - val_loss: 0.0406 - val_acc: 0.9869 Epoch 5/10 179s - loss: 0.0337 - acc: 0.9893 - val_loss: 0.0346 - val_acc: 0.9886 Epoch 6/10 156s - loss: 0.0275 - acc: 0.9916 - val_loss: 0.0309 - val_acc: 0.9893 Epoch 7/10 163s - loss: 0.0232 - acc: 0.9927 - val_loss: 0.0359 - val_acc: 0.9877 Epoch 8/10 158s - loss: 0.0204 - acc: 0.9937 - val_loss: 0.0324 - val_acc: 0.9887 Epoch 9/10 164s - loss: 0.0166 - acc: 0.9947 - val_loss: 0.0300 - val_acc: 0.9901 Epoch 10/10 178s - loss: 0.0143 - acc: 0.9958 - val_loss: 0.0310 - val_acc: 0.9905 Baseline Error: 0.95%
ちなみに今回構築したモデルを可視化すると以下のようになっていた。
It as very straightforward to find out any topic on net as compared to trainings,courses, I found this article at this site.
返信削除Oracle Cloud Administration online training
Oracle Cloud Administration training
Oracle Data Integrator online training
Oracle Data Integrator training
Oracle DBA online training
Oracle DBA training
Oracle Enterprise Manager online training