今日から始めるDeepLearning

  • このエントリーをはてなブックマークに追加

こんにちはRyujiです。

今日は機械学習とDeepLearningを勉強したので、それについて書いていきます。

Contents

今日何作ったか

今日はTensorFlowとKerasを使ってDeepLearningを勉強しました。

手書きの数字が入力画像

手書きの数字を入力として与えて、

たくさん学習させた後、コンピュータが認識した結果を出力するプログラム

企画

朝9時さぁ今日は何をしようかなー

周りにpythonやり始めた人が多いからpythonで機械学習を勉強しよう!

ということでchainer入門チュートリアルで学習を始めました。

軽く勉強してアプリ作ろっかな^^って軽い気持ちで手を出しました。(結果機械学習は1日でどうこうできる代物ではなかったです。)

学習

Chainer Tutorialさんで勉強させてもらいました。

https://tutorials.chainer.org/

Chainerチュートリアル

ここで勉強したことです。

  • 機械学習とは
  • 微分
  • 線形代数
  • pythonの文法

微分と線形代数は大学で勉強したので、少し覚えていました。

微分の基礎

xの二乗を微分すると2xになります。xを微分すると1になります。定数を微分すると消えて無くなります。

微分の基礎

線形代数の基礎

行列の掛け算は縦横で計算します。

(1)ならば1×3+2×4

(2)ならば上の段に1×5+2×6、下の段に3×5+4×6みたいな

アプリを作りたい

とてもよいチュートリアルですが、アプリとして作るにはかなり時間がかかることがわかりました。

やばい!1日1アプリの宣言が2日目で崩れてしまう!

ということで急遽学習教材の変更!すでにおやつの時間帯です。

学習2

Aidemyさんの無料教材で学習することにしました。

https://aidemy.net/

初めてのDeapLearningの教材としては最強なんじゃないかな!

ここで学んだこと

  • DeapLearningの仕組み
  • ニューロン、ニューラルネットワーク
  • python

DeepLearning

Aidemyのチュートリアルの最後で楽しい演習があったので、それを今日のアプリとすることにしました。(よかった!目標達成できそう!)

ソースコードは以下です。python知らない人でも概要だけわかるように説明を後述します。ので読み飛ばしてください。

import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.layers import Activation, Dense
from keras.models import Sequential, load_model
from keras.utils.np_utils import to_categorical
from keras.utils.vis_utils import plot_model

# mnist.load_data()で手書き画像のデータセットを取得する。
# mnistで60000枚の学習データ、10000枚のテストデータが用意されている。
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# X:入力データを6000枚にする。 Y:テストデータを1000毎にする。
# reshape はデータの順番と総数をそのままに、配列の形だけ変える関数。2次元なので、1次元に直している
X_train = X_train.reshape(X_train.shape[0], 784)[:6000]
X_test = X_test.reshape(X_test.shape[0], 784)[:1000]
y_train = to_categorical(y_train)[:6000]
y_test = to_categorical(y_test)[:1000]

# Deep Learningで使用するネットワークのモデルを作成する。
model = Sequential()
# 一層ずつaddしていく
model.add(Dense(256, input_dim=784))
model.add(Activation("sigmoid")) #活性化関数
model.add(Dense(128))
model.add(Activation("sigmoid")) #活性化関数
model.add(Dense(10))
# 最後はsoftmax関数を適用する。
model.add(Activation("softmax"))
# 学習処理を設定、モデルの生成終了
model.compile(optimizer="sgd", loss="categorical_crossentropy", metrics=["accuracy"])

# model.fit(X_train, y_train, verbose=True)
#学習を実行 batch_sizeのデータの個数、nb_epochの周回分学習
model.fit(X_train, y_train, nb_epoch=500, batch_size=1000)

# 結果の生成
print(np.argmax(model.predict(X_test[0:10]), axis=1))

# 画像の生成
for i in range(10):
    plt.subplot(1, 10, i+1)
    plt.imshow(X_test[i].reshape((28,28)), "gray")
plt.show()

簡単な説明

import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.layers import Activation, Dense
from keras.models import Sequential, load_model
from keras.utils.np_utils import to_categorical
from keras.utils.vis_utils import plot_model

まずはここでいろんなモジュールやらライブラリやらを引っ張ってきています。

(X_train, y_train), (X_test, y_test) = mnist.load_data()

さっき読み込んだ「mnist」ってモジュールが手書き数字の60000枚画像データ、10000枚のテストデータを用意してくれるようです。それを生成しています。

X_train = X_train.reshape(X_train.shape[0], 784)[:6000]
X_test = X_test.reshape(X_test.shape[0], 784)[:1000]
y_train = to_categorical(y_train)[:6000]
y_test = to_categorical(y_test)[:1000]

60000枚はちょっと多いんで6000枚で入力値X、正しい答えである目標値Yとしています。

model = Sequential()

DeepLearningは下の絵みたいな感じで学習していくんですよね!なので、その全体をmodelって変数に定義しました。

引用:https://tutorials.chainer.org/ja/src/13_Basics_of_Neural_Networks_ja.html
model.add(Dense(256, input_dim=784))
model.add(Activation("sigmoid")) #活性化関数
model.add(Dense(128))
model.add(Activation("sigmoid")) #活性化関数
model.add(Dense(10))
model.add(Activation("softmax"))

さっきのmodelに一層ずつaddしていきます。

活性化関数とかは説明難しいので割愛!

model.compile(optimizer="sgd", loss="categorical_crossentropy", metrics=["accuracy"])

modelの生成を完了しています。

model.fit(X_train, y_train, nb_epoch=500, batch_size=1000)

ここでnb_epochの回数分学習をしています。

成果物

そんなこんなで学習した結果、入力画像の数字がなんなのか判別してみました。

入力画像
入力が
[7,2,1,0,4,1,4,9,5,9]

ですね!500回学習させた結果が下です。

500回学習した結果
[7,2,1,0,4,1,4,9,6,9]

惜しい!最後から二番目が6って出てる!

ほぼほぼあっているけど、1つ異なりました。でも高い精度ですよね。入力画像の5は6に見えないこともないです(笑)

まぁそんなわけでほぼチュートリアルですが2日目のアプリはこれで勘弁してください。

感想と反省

結論:DeepLearningは1日でやる分量ではない!

今日は数学チックで少し難しい内容でしたが、ここまで読んでくれた皆さんありがとうございました。

(補足)環境構築

私が実施したpythonの環境構築を書いておきます。

$brew update
$brew install python3
$python3 -V
Python 3.7.3
$pip3 install numpy
$pip install matplotlib
$mkdir ~/.matplotlib
$vi ~/.matplotlib/matplotlibrc
(追記)
backend : TkAgg
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

スポンサードリンク

コメント

コメントを残す

*