投稿

MNISTの解凍済みデータ

イメージ
ディープラーニングとかで話題のニューラルネットワーク。 このニューラルネットワークの代表的な応用例として、手書き文字の認識というのがあります。 これはその名のとおり、お絵かきツールなどでフリーハンドで書いた数字が、0から9のどれにあたるのかを判定するものです。 ニューラルネットの練習としてこの手書き文字(数字)認識を実装してみようとすると、訓練データが必要となります。この訓練データはまじめに用意しようとすると大変なんですが、幸いなことに MNIST にデータが公開されています。 ただし、このデータはIDX file formatというフォーマットで圧縮されているために、そのままでは利用できません。 その場合は、下記のような方法でデータを利用することができます。 Nodejs mnist というnodejsのアプリを使うと、json形式の訓練データとテストデータを取得することができます。取得自体にはnodejsが必要ですが、テキスト形式で取得できるので、その後どんな言語にでも利用することができます。jsonで取得できるのはうれしいですが、nodejsの環境が手元にないと使えないところが少々不便。 Python deeplearning.net にPickle形式のデータが公開されています。pythonでサンプルを書こうと思ってる方はこちらのほうが手っ取り早いでしょう。 しかし、IDXフォーマットとか非常に面倒ですね。データ圧縮率とか優れているのかも知れませんが、普通にzipとかにしてもいまどき大して困らなかった気がするんですが。理論上の性能を追い求めるあまり、利便性を犠牲にしている気がします。

Javaにデバック用のログを追加できるライブラリLogAdderを公開

LogAdder はJavaの各メソッドの先頭にトレース用のログを埋め込むことができるオープンソースソフトウェア。 下記の順にメソッドが実行されるJavaのソースがあったとする。 public static void main(String[] args){ step1() step2() step3() } public static void step1(){ } public static void step2(){ } public static void step3(){ } このソースコードに対してLogAdderを実行すると、下記のようにトレースが追加される public static void main(String[] args){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); step1() step2() step3() } public static void step1(){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); } public static void step2(){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); } public static void step3(){ System.out.println("I'm at " + new Exception().getStackTrace()[0].toString()); } そして、このログ追加済みのソースコードを実行すると、下記のような標準出力が出される。これを見ると、ログ(この場合は標準出力)を見ることによって、実行順序がわかる。 I'm at com.github.kentan.logadder.sample.da...

react.jsとjquery mobile

reactjsで書いたコンポーネントをjquery mobile風にしたくて試してみた。 まず単純に、react.jsのコードにjquery mobileのコードを書いてみた。 render()メソッドの中に書く。 <body> <script type="text/jsx"> React.render(         <ul data-role="listview">           <li><a href="acura.html">Acura1</a></li>           <li><a href="audi.html">Audi1</a></li>           <li><a href="bmw.html">BMW1</a></li>         </ul> ); </script> </body> すると何も表示されない。 次に、htmlのbodyタグ直下に書いて見る。 <body>     <div id="content"></div>         <ul data-role="listview">          <li><a href="acura.html">Acura</a></li>          <li><a href="audi.html">Audi</a></li>     ...

Koansでreacjs入門

koans はreact.jsを手を動かしながら学ぶコンセプトで作られたプロジェクト。 node.jsのユニットテストを利用し、正しく実装できるとテストが合格する。 ちょうどreact.jsに入門したかったこともありやってみた。 いい感じに入門できる。 javascriptと、ある程度のプログラミングに対する前提知識があればきちんとついていけるようにできている。 githubのreadmeに本の紹介があるけど、プロモーションの一貫なんだろうか。 http://blog.arkency.com/rails-react/ 49ドルはちょっと高い気がするが、koanの出来の良さを考えると、お値段分の価値はあるかもしれない。 サンプル があるので、まずはこれを読んでみるか。

ゲーム理論のナッシュ均衡と最適戦略

用語の整理。 定義上、ナッシュ均衡は全プレイヤーがbest responseを取った状態のことであるが、これを「わかりやすく」説明しようと試みた結果、逆にわかりにくかったり、正確ではない言い方になっていることが多かったので、自分の言葉でまとめなおした。 ・ナッシュ均衡 すべてのプレイヤーが最適戦略(best response)である戦略をとっている状態 a ∗ = (a ∗ 1 , · · · , a ∗ n ) ∈ A is a Nash Equilibrium if    a ∗ i ∈ Bi(a ∗ −i ) for every i ∈ N.  ・Best Response ほかのプレイヤーの戦略を固定値としたまま、自分の戦略だけを動かして、最大値を取れる戦略。数式で書くと以下の定義。 ai ∈ Ai is a best response to a−i ∈ A−i if  ui(ai , a−i) ≥ ui(a*i , a−i) for all a*i ∈ Ai ポイントはbest response(最適戦略)であろうか。bestあるいは最適という言葉に引きづられて、あたかもナッシュ均衡を目指す戦略がもっとも報酬が高い戦略であるという風に説明されていることもおおいように思える。 しかし、囚人のジレンマなどでも有名なようにナッシュ均衡は必ずしも、全プレイヤーに最高の結果をもたらす戦略ではない。あくまでも、自力でがんばれる範囲(=ほかのプレイヤーの戦略値を固定値としたまま) でもっとも報酬が高い(=その環境において最適な)戦略を全プレイヤーがとった状態だ。自分だけでは戦略を変更しても、メリットはないため均衡に陥る。 均衡の定義自体はわかりやすいが、定義したことのメリットがわかりづらいため、いろいろな説明が生まれて、その結果混乱の元になっているのだろうか。 参考文献 http://www.econ.ucla.edu/iobara/Nash201B.pdf

Ubuntu on ESXi on VMWare Player on Win7

下記の構成で、ESXiの検証環境を作れたのでメモ 1. まず物理環境 OS:Windows 7 CPU: Xeon e5440 2. 1の上にVMWare Player 7.1.0 (Build 2496824)をインストール 3. 2の上にESXi 6.0.0 (249585)をインストール 4. 3の上にUbuntu 32bitをインストール。 なお、Xeon e5440はEPT(Extended Page Table)機能がないために、4として64ビットOSをインストールすることが出来ない。 参考文献 CPUの機能要件についてはこちらが詳しい Having Difficulties Enabling Nested ESXi in vSphere 5.1? VM Player上でESXiの動作が公式にサポートされているのかは見つけられなかったが、vmware.comドメインで運営されている下記でVMWare Playerに言及されているので、公式にサポートされているとみなしても良さそう。 Running Nested VMs 他にも個人運営のブログ等ではESXiをVMWare Player上で動かした際の情報がたくさん見つかる。古いバージョンの話なので、最新のバージョンの動作保証とするには少々微妙だが。

VMWare上のWindows 2008R2でMSFC

VMware Playerの上で動かしたwin2008R2同士でクラスタを組んだ。 どっちも同じvmdkファイルをコピーして使いまわしていたら、フェールオーバクラスタマネージャの構成の検証でネットワーク周りのエラーが出た。 こんな感じのエラー ネットワークトポロジを読み込み中にエラーが発生しました 0x90070005 無視して進もうにも、クラスターの作成、のウィザードで「アクセスが拒否されました」とエラーメッセージが出て進めなかった。 いろいろ調べたところ、原因はvmdkファイルを使いまわしたことによってドメインSIDが重複していることがわかった。これは、クラスターのノードとなる2008R2のアプリケーションログを見ることによって発見した。 下記のページの手順に沿ってSIDを再度設定しなおしたところ、構成の検証が通るようになった。 Windows 2012 R2でSysprepを実行してゲストOSを初期化してみる ドメインSIDについてはこちらを参照 オブジェクトを識別するSIDとは?