LoginSignup
12
7

More than 5 years have passed since last update.

[Jupyter Advent Calendar 2017] 実際に書いた手書き数字を当てるデモをした話

Last updated at Posted at 2017-12-01

これは Jupyter Advent Calendar 2017の第1日目の記事です。

経緯

手書き数字の識字率がめちゃくちゃ高いという話は聞いたことあったけど、

自分で書いた文字を識別させたことはなかったので、

いい機会だと思い、デモを作った。

環境

jupyter-notebook は、 ubuntu docker 上で起動している。

python -V

Python 3.6.2

使うライブラリ等

import numpy as np
import fileupload
import matplotlib.pyplot as plt
import ipywidgets as widgets
from IPython.display import display
from PIL import Image
from keras.models import model_from_json

jupyter widgets
file upload と button widgets を利用している。

https://qiita.com/driller/items/0730325bf5c1cd689979
https://qiita.com/shinya7/items/745486ef2dae61ae49ca

とてもわかり易く書いてあるので、このあたりを参考にインストールすると良い。

(widgets を使わない場合、少しコードの修正が必要になる。)

事前準備

3層のニューラルネットを作って、学習させた。

ネットワークはこんな感じ。

Dense(512, relu) -> Dense(512, relu) -> (10, sigmoid) 

ライブラリには、Keras を使用した。

本デモでは、事前にトレーニングした重みを読み込み利用している。

コード

コードは、gist に登録している。

https://gist.github.com/gorogoroyasu/76cffe71ac828e29d43580cea201d0f4
(上述の通り、widgets が必要)

デモ

デモは、jupyter を使って行った。

必要なボタンは、以下の3つ。

advent_calendar.png

browser

これで、ファイルを探してくる。
iPad Pro の GoodNotes というアプリを使って手書き文字を書き、
ファイルを Google Drive にアップロードした。
アップロードしたファイルをjupyter から探すというしかけ。
また、アップロードしたファイルは、下記のとおり前処理を行った。

画像をチェックする (オプション)

入力した画像とニューラルネットに入れる画像をチェックすることができる。

advent_calendar.png

予想する

このボタンを押したら、ニューラルネットが入力された画像を予想してくれる。

advent_calendar.png

前処理

画像に対して、
- グレースケール
- リサイズ
- 白黒反転
という処理を行った。
特に、白黒反転をしなくてはならないことを知らなかったので、焦った。

感想

widgets が、とても便利でした。
lambda を乱用しなくてはならないのが難点ですが、
基本的にはとても使いやすかったです。
毎回 shift + enter を押して実行する必要もないし、
なんか、見た目もかっこよくなるし。

ただ、Browser ボタンを押してアップロードする前に予測するボタンを押しちゃうとエラーになっちゃったりするので、
その辺を改善する必要はありそうです。
できるんだろうけど。

ということで、実際に動くdocker 環境を作っときます。
作ったら追記させて頂きます〜。

以上です。

Advent Calendar、盛り上げていきましょう!!

12
7
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
12
7