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

これは 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、盛り上げていきましょう!!


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。