LoginSignup
2
3

More than 5 years have passed since last update.

[GPU]機械学習基礎 Anaconda Tensorflow(Keras)でMnist文字認識

Posted at

導入楽になったTensorFlowの中のKeras使う

基礎の基礎。とりあえず体験として備忘録。
少し前までTensorflowをGPUで使う環境作るの少しだけ面倒だったんですけどAnacondaで普通に使えるようになったようなので試しの記事を作成します。

普通にAnacondaをインストール

その後仮想環境作ります。

Environment -> create
▶ボタン押して open terminal

conda install tensorflow-gpu

言うまでもないですが、入ってなかったら
conda install matplotlib
などで入れておきましょう。

入力すると普通に使えるようになる。
バージョンもあっているものに自動でダウングレードするとのことで素晴らしい。

mnist.py
import tensorflow
from tensorflow import keras
%matplotlib inline
import matplotlib.pyplot as plt

# Mnistをダウンロードして分けてくれる
(x_train, y_train),(x_test, y_test) = keras.datasets.mnist.load_data()

# 正規化 小数にするので.0忘れずに
x_train, x_test = x_train / 255.0 , x_test / 255.0

0~255までの数値入っているので正則化で255で割るとよいです。.0つけないとほぼ0になりますので注意。

条件を設定していく。Flatten()でデータを1次元化
Dense 512 中間層512 活性化関数をrelu
Dropout 20%減らすことで偏り減らす。
Dense 10 10個のノードに。多クラス分類なのでsoftmaxにしてみる。
1分類ならsigmoidでも。

model.compileでモデルと最適化手法を結びつける。

mnist.py
model = keras.models.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(512, activation='relu'),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)

epochを増やしたり、lossを変えたり、optimizer変えると結果が変わります。とりあえずadam。※SGDとかRMSpropとかあります。

One-Hot-Encodingでないのでcategorical_crossentropyでなく
sparse_categorical_crossentropy

metrics=['accuracy']入れるとaccuracyでて便利。

poch 1/5
60000/60000 [==============================] - 5s 85us/step - loss: 0.0299 - acc: 0.9904
Epoch 2/5
60000/60000 [==============================] - 5s 84us/step - loss: 0.0270 - acc: 0.9918
Epoch 3/5
60000/60000 [==============================] - 5s 83us/step - loss: 0.0246 - acc: 0.9925
Epoch 4/5
60000/60000 [==============================] - 5s 86us/step - loss: 0.0226 - acc: 0.9931
Epoch 5/5
60000/60000 [==============================] - 5s 89us/step - loss: 0.0203 - acc: 0.9936

こんなだけで十分ですね。99%正解。

Mnist.py
model.evaluate(x_test,y_test)
10000/10000 [==============================] - 1s 55us/step
[0.11360306663459632, 0.9701]

97%です。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3