TensorFlowでのSoftmax回帰の実装・可視化・識別器の騙し方
概要
先日の記事では深層学習用の自作PCを構築する方法について書きました。
これからは主にTensorFlowを用いてさまざまなモデルを実装していこうと考えています。
まずは基本的なソフトマックス回帰(他クラスのロジスティクス回帰)を実装し、有名なMNISTデータセットについて手書き数字の識別を行います。これさえできれば、ディープなニューラルネットワークも自然な拡張として簡単に実装することが可能です。
この記事では、TensorFlowの公式のチュートリアル*1を参考にしつつ、
- 一般的なニューラルネットワークへの拡張を容易にすること
- TensorFlowで重要となるComputational Graphの概念を明確にし、Graphの構築と実行をわかりやすく分離すること
- 強力な可視化ツールであるTensorBoardの使い方も同時に理解できるようにすること
- Computational Graph上での機能のまとまりを明確にするために名前空間(name scope)を適切に設定すること
を意識した実装を行いました。また、それだけではつまらないので、
- 重みの可視化
- 学習済みの識別器をだます
- 識別器が自信を持って分類したサンプルほど正答率が高いか検証する
といった実験を行っています。
このブログの内容は、Jupyter Notebook (IPython Notebook) 形式でも公開しています。
Jupyter Notebook Viewer
目次:
- 概要
- 1. MNISTデータセットの用意
- 2. Softmax Regressionの実装
- 2.1 準備
- 2.2 Computational Graphの構築
- 2.3 Computational Graphの実行
- 3. TensorBoardによる可視化
- 3.1 TensorBoardの起動
- 3.2 TensorBoardの画面のスクリーンショット
- 4. 重みの可視化
- 5. 識別器をだましてみる
- 6. 自信があるほどよく当たるのか
- 7. おわりに

国旗には何色がよく使われているのか? - Pythonで色相の頻度分布を調べてみる
概要
Wikipediaを見ると206カ国の国旗が掲載されていますが、国旗にはどのような色が使われる傾向にあるのでしょうか。
ぱっと見では原色系の派手な色が多いような…?
国旗の一覧 - Wikipedia
実際はどうなのか、画像処理によって調べてみました。
具体的には、
- Python + Beautiful Soupによるスクレイピングで国旗画像を取得
- Python + OpenCVによる画像処理で色相の頻度分布を計算
- Javascript + Canvasによって頻度分布を分かりやすく可視化
ということを行います。
目次:
- 概要
- 方法・結果
- 基本的な方針
- 色相
- 頻度の定義
- Pythonによるスクレイピング
- OpenCVによる画像処理
- Javascriptによる頻度の可視化
- 基本的な方針
- 考察
- ソースコード
- Python(スクレイピング・OpenCV・ファイル出力)
- HTML, Javascript(可視化)
- おわりに
- 関連

名曲の楽譜データをMusicXML形式で入手し、プログラムで可視化する方法
はじめに
様々な曲の楽譜をデータとして扱えたら楽しそうだと思いませんか?
かといって手動で入力するのも大変です。どこかでダウンロードできると嬉しい…
調べてみたところ、クラシック音楽の楽譜データの多くがCC Zeroライセンスで公開されていることが分かりました。この記事では、
- 好きな曲の楽譜データを検索・ダウンロードする方法
- 楽譜データのファイル形式・解析方法
- Pythonを使って楽譜データをプログラム中の配列として取り込む方法
- 取り込んだ楽譜データをグラフで可視化する方法
を紹介しています。
目次
- はじめに
- MusicXMLファイルのダウンロード
- MusicXMLファイルの展開
- 拡張子を.mxlから.zipに変更
- 解凍
- 確認
- MusicXMLの内容
- どこが重要か
- パートリスト
- パート
- 1. <measure number="1" width="***">:小節
- 2. <attributes>:調・拍子・音符の最小長さを規定
- 3. <note>:音符や休符
- 3. <backup>:時間の巻き戻し
- Pythonプログラムで扱う方法
- おおまかな流れ
- 使う道具
- ソースコード
- 要点
- 完全版
- 今後の活用
- 資料・関連記事

ブラウザからインタラクティブにコードを実行できる"IPython Notebook"の練習用ノートを作ってみた
前置き
Googleのディープラーニング無料講座がちょっと話題になっていました。
Udacityという無料オンライン学習サイトで公開されているのですが、Udacityの講座を受講して楽しんだ経験があるので、ディープラーニングもはじめてみたところです。
GoogleとUDACITY、「TensorFlow」で学ぶディープラーニング講座を開設 - ITmedia ニュース
Deep Learning | Udacity
で、本題ですが、この講座(Pythonを使います)では課題が"IPython Notebook"というものによって出題されているのです。
IPython Notebookは、Webページのようにブラウザ上で読むことができるノート的なもので、ノート上でPythonのコードがインタラクティブに実行できるすごい奴です。

すごいなーと思ったのと、ディープラーニング講座以前にここでつまずく訳には行かないという理由から、練習用ノートブックを作って公開してみることにしてみました。
本の季節感を可視化してみる【D3.js】【Pythonによるスクレイピング】
目次
はじめに
以前の記事で、読書メーターという読書記録サービスからデータを収集して分析するということをやってみました。roomba.hatenablog.com
この記事では、その応用として「本の季節感を可視化」してみます。より具体的には、Pythonによる「読書メーター」のスクレイピングによって「ある本が何月に読まれることが多いか」を調べ、D3.jsというデータ可視化Javascriptライブラリを用いてブラウザ上にグラフを描画します。
これにより、『クリスマス・キャロル』をクリスマスに読む人は多いのか、『桜の森の満開の下』はやっぱり4月に読む人が多いのか、といったことが分かるようになります。つまり「本の季節感を可視化」できるわけですね。

3Dプリンタに使われるSTLファイルを地理院地図3Dと併せてマスターする
目次

はじめに
ネットから3Dプリントが可能*1になるなど、ふつうの人でも3Dプリンタを使ったものづくりが可能になりつつあります。その際には、
- 3次元設計ソフトなどでデザインする
- その3次元データを3Dプリンタに送り、プリントする
という流れを経ることになると思うのですが、この「3次元データ」にはどのようにして形状の情報が埋め込まれているのでしょうか? それを理解してしまえば、例えば3次元設計ソフトを使わずに自分のプログラムから(数式などに基づいて)3次元データを吐き出させることが可能になり、人生が楽しくなりますね。
ヒマワリと黄金比の関係をインタラクティブなアニメーションにする【Javascript】【Canvas】
はじめに
先日、『数学で生命の謎を解く』という本を読みました。この本の第4章「花の中にみつかるフィボナッチ」には、植物の葉・ヒマワリの種子・パイナップルの模様がフィボナッチ数列*1と深く関わっていることが説明されています。
「花の中のフィボナッチ」は数学と生命科学の関係を述べた文章に必ずと言っていいほど登場する鉄板ネタなのですが、本書には以下のような興味深いモデル(フォーゲルのモデル)が紹介されていました。
1979年にミュンヘン工業大学のヘルムート・フォーゲルが、ヒマワリの種子が取る幾何の単純な数学的表現を考え、それを使って、そのような配置に黄金角が特別適している理由を説明した。*2
フォーゲルのモデルでは、n番目の原基は137.5度のn倍の角度に置かれ、中心からの距離はnの平方根に比例する。これらの二つの数によって原基の位置が決定し、ホフマイスターの生長らせんは、中心から外側へ行くにつれ巻き方がきつくなる、フェルマーらせんと呼ばれるものであることが分かる。
フォーゲルはこのモデルを用いて、同じ生長らせんを使いながらも黄金角137.5度からわずかにずらしたときに、花頭がどうなるかを導き出した。結果は、(中略)黄金角を使ったときにだけ、種子は隙間や重なりを作らずにびっしり並ぶのだ。角度を10分の1度変えただけで、パターンが壊れて一種類のらせんだけになり、種子のあいだに隙間ができてしまう。
『数学で生命の謎を解く』p59 (太字は引用者による)
これを自分で実装し、アニメーションにしてみました!
*2:Vogel, Helmut. "A better way to construct the sunflower head." Mathematical biosciences 44.3 (1979): 179-189.