導入楽になったTensorFlowの中のKeras使う
基礎の基礎。とりあえず体験として備忘録。
少し前までTensorflowをGPUで使う環境作るの少しだけ面倒だったんですけどAnacondaで普通に使えるようになったようなので試しの記事を作成します。
普通にAnacondaをインストール
その後仮想環境作ります。
Environment -> create
▶ボタン押して open terminal
conda install tensorflow-gpu
言うまでもないですが、入ってなかったら
conda install matplotlib
などで入れておきましょう。
入力すると普通に使えるようになる。
バージョンもあっているものに自動でダウングレードするとのことで素晴らしい。
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でモデルと最適化手法を結びつける。
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%正解。
model.evaluate(x_test,y_test)
10000/10000 [==============================] - 1s 55us/step
[0.11360306663459632, 0.9701]
97%です。