roombaの日記

読書・非線形科学・プログラミング・アート・etc...

TensorFlowでのSoftmax回帰の実装・可視化・識別器の騙し方

概要

先日の記事では深層学習用の自作PCを構築する方法について書きました。
これからは主にTensorFlowを用いてさまざまなモデルを実装していこうと考えています。

roomba.hatenablog.com

まずは基本的なソフトマックス回帰(他クラスのロジスティクス回帰)を実装し、有名な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による可視化
  • 4. 重みの可視化
  • 5. 識別器をだましてみる
  • 6. 自信があるほどよく当たるのか
  • 7. おわりに

f:id:roomba:20170420205250p:plain

続きを読む

深層学習用PCを個人で自作するための部品選定ガイド(Amazon・実店舗)

概要

趣味でディープラーニングを行うために自作PCを組んでみました。
自作のメリットとしては、

  • 組み合わせの自由度が高く、ディープラーニング向けの構成を実現できる
  • 必要十分な構成が可能なため、無駄がなく安い
  • 部品の選定を通してハードウェアに関する知識が深まる
  • 組み立てが楽しい

などが挙げられます。
しかしながら、CPUやマザーボード、メモリ等の部品には様々な規格があり、部品の選定には正しい知識が必要です。それを共有するのがこの記事の目的です。


購入にあたっては、Amazonで調べたほか、秋葉原の複数の実店舗*1やそれらのオンラインストアを調査しました。
多くの場合Amazonが安いということが分かりましたが、一部は実店舗やオンラインストアの方が廉価でした。本記事ではすべての部品の購入先と購入価格も記します*2。目安にしてください。


結果として、最新のGPUであるGTX 1080 Ti(10万円ぐらい)を搭載したPCをほぼ20万円ちょうど(税込&ディスプレイ・キーボード代込)で作ることができました。


目次:

  • 概要
  • どのような順番で選ぶ? 大まかな流れ
  • GPU
    • スペック
    • OEMメーカーとFounders Edition
    • 選んだもの
  • CPU
    • スペック
    • 選んだもの
  • メモリ
    • 選んだもの
  • マザーボード
    • 選んだもの
  • 電源ユニット
    • 電力
    • 変換効率
    • 選んだもの
  • SSD
    • 選んだもの
  • ケース
    • 選んだもの
  • ディスプレイ
    • 選んだもの
  • キーボード・マウス
    • 選んだもの
  • やかん
    • 選び方
  • 費用まとめ
  • 市販の深層学習用PCと自作との比較
  • 参考になる本

*1:秋葉原巡りには以下のリンクが参考になりました: ASCII.jp:【2016GW企画】GWだアキバに行こう! アキバPCパーツショップ巡り (1/6)

*2:もちろん価格は時々刻々と変化するので、参考程度に!

続きを読む

国旗には何色がよく使われているのか? - Pythonで色相の頻度分布を調べてみる

概要

Wikipediaを見ると206カ国の国旗が掲載されていますが、国旗にはどのような色が使われる傾向にあるのでしょうか。
ぱっと見では原色系の派手な色が多いような…?
国旗の一覧 - Wikipedia

実際はどうなのか、画像処理によって調べてみました。
具体的には、

ということを行います。

目次:

f:id:roomba:20160629134035p:plain

続きを読む

『シーシュポスの神話』『偶然の音楽』ほか - 2016年3月に読んだ本まとめ

はじめに

「涼風の一過、汗の蒸発、……それと共に消え去る筋肉の存在。……しかし、筋肉はこのときもっとも本質的な働らきをし、人々の信じているあいまいな相対的な存在感覚の世界を、その見えない逞しい歯列で噛み砕き、何ら対象の要らない、一つの透明無比な力の純粋感覚に変えるのである。もはやそこには筋肉すら存在せず、私は透明な光りのような、力の感覚の只中にいた。」


三島由紀夫太陽と鉄 (中公文庫)

2016年3月に読んだ19冊です。
今月は「海外文学」「評論・エッセイ」「理系っぽい本」の3つに分けて紹介します。いつもと比べて評論が充実していました。

各本について、タイトル・リンク・読書メーターに書いた感想(一部追加・修正あり・非ですます調)の順に記します。気に入った文の引用も。↓↓↓

続きを読む

『嘔吐』『重力とは何か』『夜間飛行』ほか - 2016年2月に読んだ本まとめ

はじめに

2016年2月に読んだ17冊です。

今月は海外文学、理系っぽい本、エッセイ・日本文学の3区分に分けて紹介します。
ベストは『嘔吐』。印象が強すぎてしばらく他の小説が頭に入ってこず、理系っぽい本を適当に読んでいました。

各本について、タイトル・リンク・読書メーターに書いた感想(一部追加・修正あり・非ですます調)の順に記します。気に入った文の引用も。↓↓↓

続きを読む

客の来店する時間間隔が指数分布になる直感的な理由と、分布の導出方法

はじめに

何らかのイベントがランダムに発生する(ポアソン過程という)とき、その発生間隔は「指数分布」という確率分布に従うことが知られています。

例えば、1分あたりに2人の客が来る店においては、来客の時間間隔が平均1/2 [分]の指数分布に従います。

でもどうしてそんな分布になるのでしょうか?
数式をほとんど使わず、ゆるふわな説明によって直感的に理解してみましょう。

後半ではもう少し真面目になり、発生間隔が厳密に指数分布になることを示します。
実は、「ランダムなイベントの発生はポアソン過程と呼ばれ、その発生頻度はポアソン分布に従う」ことを知らずとも、「イベントの発生の仕方が時間的に一様である」という条件だけから指数分布が導けてしまうのです!

統計の教科書にもあまり書かれていないことが多いので、ここに紹介します。

  • はじめに
  • ゆるふわな説明
    • 指数分布とはなにか
    • なぜイベントの発生間隔が指数分布っぽくなるのか
      • 単調減少になるはず
      • 指数分布っぽくなるはず
    • ゆるふわな説明のまとめ
  • 真面目な説明
    • 無記憶性を持つなら指数分布である
      • もとになる事実と無記憶性の条件
      • 数式による表現
      • 極限をとり、微分方程式を導出
      • 微分方程式を解き、指数分布を得る
  • まとめ・おわりに
続きを読む

名曲の楽譜データをMusicXML形式で入手し、プログラムで可視化する方法

はじめに

様々な曲の楽譜をデータとして扱えたら楽しそうだと思いませんか?
かといって手動で入力するのも大変です。どこかでダウンロードできると嬉しい…

調べてみたところ、クラシック音楽の楽譜データの多くがCC Zeroライセンスで公開されていることが分かりました。この記事では、

  • 好きな曲の楽譜データを検索・ダウンロードする方法
  • 楽譜データのファイル形式・解析方法
  • Pythonを使って楽譜データをプログラム中の配列として取り込む方法
  • 取り込んだ楽譜データをグラフで可視化する方法

を紹介しています。

目次

  • はじめに
  • MusicXMLファイルのダウンロード
  • MusicXMLファイルの展開
    • 拡張子を.mxlから.zipに変更
    • 解凍
    • 確認
  • MusicXMLの内容
    • どこが重要か
    • パートリスト
    • パート
      • 1. <measure number="1" width="***">:小節
      • 2. <attributes>:調・拍子・音符の最小長さを規定
      • 3. <note>:音符や休符
      • 3. <backup>:時間の巻き戻し
  • Pythonプログラムで扱う方法
  • 今後の活用
  • 資料・関連記事

f:id:roomba:20160203150110p:plain

続きを読む