A Day in the Life

TensorFlow.js を使い、ひらがなを推論する

TensorFlow.js を触ってみるがてら、ブラウザのみでひらがなを推論させるデモを作った。

ひらがな推論

元データセットでの正解率は99.0%ほどなのだけど、ペンや筆で書かれた筆跡を学習したためか、ブラウザ上で書く文字だと割と推定ミスをする。「か」とか難しい。

ブラウザでロードしている重みなどの学習データは437KB、モデル情報は49KB。Python の TensorFlow で 48x48ピクセルのグレースケールにしたひらがなデータ約70000万字を、20層100ニューロンの素朴な全結合層で71クラス分類の学習したものを変換して使っている。学習済データのサイズは、keras(高水準API)でのモデルのデータは5MBほどで、tensorflowjs_converter --quantize_uint8 --input_format keras input.h5 output_dir のオプションで JS 向けに変換した所、モデル情報がJSONで49KB、学習済みデータが437KBほどとそこそこ小さくなった。さらに gzip で20%ぐらい削減できる。

ひらがなの元データは、文字画像データセット(平仮名73文字版)で、画像のライセンスはパブリック・ドメイン・マーク 1.0とのこと。このなかから、ゑとゐを除く71文字を利用した。

keras から TensorFlow.js への変換操作自体はドキュメント通りなので簡単なのだけど、サポートしている機能がオフィシャルのAPIのみ。

Models using unsupported ops or layers—e.g. custom layers, Lambda layers, custom losses, or custom metrics—cannot be automatically imported, because they depend on Python code that cannot be reliably translated into JavaScript.

カスタムロス関数等などはよく使うであろうから、素朴な keras (や Python の TensorFlow) 実装のものでないとうまく行かなそう。このへんは TensorFlow.js で利用することを念頭に Python 上でモデルを作るか、もしくは最初から Python を使わず TensorFlow.js でモデル作って学習させてしまったほうが良いかも知れない。いまは node + GPU サポートもあるみたいだし、APIも結構充実している


TensorFlow.js や TensorFlow Lite、制約はあれどブラウザやスマートフォンなど各種エッジデバイス上で推論ができて面白い。今はだいぶ気軽に推論できるようになっているんだなーと感心した。

関連するかもエントリー

2021年3月7日
完熟いちご。まだ食べていない。今日は久しぶりに一日中仕事ではないプログラミングしたなぁ、という日だった。機械学習学習日記 - 34日目scikit-learnとTensorFlowによる実践機械学習の11章の演習課題をやっていなかったので、そこから。課題をやり、keras の最低...
完熟いちご。まだ食べていない。今日は久しぶりに一日中仕事ではないプログラミングしたなぁ、という日だった。機械学習学習日記 - 34日目sci...
2021年4月7日
近くの公園の藤棚、枯れているような藤の木で、咲かないのだろうなぁと思っていたら小規模ながらも咲いていた。きれいな藤棚、というわけではないけど風情があって良い。先日見たテレビでボルシチを作っていて、なんだかボルシチを食べたくなり、ロシア料理点のミーフ・バーへ。ロシア料理はぜんぜん食...
近くの公園の藤棚、枯れているような藤の木で、咲かないのだろうなぁと思っていたら小規模ながらも咲いていた。きれいな藤棚、というわけではないけど...
2021年3月14日
アウトドア用の椅子である、ヘリノックスのチェアツーが届く。組み立て収納も簡単、座り心地も悪くない感じで一台買って良さそうだったので、妻も一台買って、天気の良い今日、早速海辺の公園に行って本を読む。公園は平和で、風が吹くと少々寒いとはいえ快適に過ごせた。ちょくちょく外でゆっくりした...
アウトドア用の椅子である、ヘリノックスのチェアツーが届く。組み立て収納も簡単、座り心地も悪くない感じで一台買って良さそうだったので、妻も一台...