投稿者「tetro」のアーカイブ

自己組織化マップ

web上で見た自己組織化マップ(self organizing map)のデモプログラムがカッコ良かったので,自分でも実装してみました.実装の際は,以下のサイトが説明がわかりやすく非常に参考になりました.
自己組織化特徴マップ(SOM)

学習データはMNISTの手書き数字画像データセットを使っています.学習時の様子はこんな感じです.

各グリッド(ノード)の色がそのグリッドに割当てられたラベル(数字)を表していて,赤色のグリッドは入力データに最も近いノードです.緑色はマウスクリックで選んだノードで,そのノードに対応する画像データが右上に表示されています.

mnist_som_
最終結果はこんな感じです.学習が進むにつれて,数字形状に応じていい感じにクラスタができていくのが面白いですね.形の似ている4と9なんかは近い位置にまとまっていて,境界はあやふやな感じになっています.

実行ファイルを置いておきますが,利用は自己責任(略)でお願いします.VC++2013ランタイムが要求されるかもしれません.
mnist_som.zip

ヨコスカサマーフェスタ

横須賀海上自衛隊基地であった,ヨコスカサマーフェスタに行ってきました.
本当は米軍基地のほうのイベントに行きたかったのですが,身分証明で免許+なんとか票(警察署でもらえる)が必要みたいで手間だったのと,かなり混みあうと聞いていたので今回は自衛隊基地のみに行ってきました.
会場はお祭りのような感じで出店やら吹奏楽隊の演奏やらで賑やかでした.海軍カレーおいしかったです.

 
護衛艦きりしま

続きを読む

カンマの罠

最近,C++で引っかかったこと.
以下の様なコードが期待した通りに動作しなくて,ちょっと悩んだ.

// double func( int i ) と
// double func( int i, int j ) のようにオーバーロードされている

double x = func( static_cast<int>( x, y ) );  // func( int i )が実行される
double y = func( static_cast<int>( x ), y );  // func( int i, int j )が実行される

引数を2つ取る方の関数を呼びたかったのですが,一回目の関数呼び出しのようにカッコの位置が間違っていて,オーバーロードされている他の関数が呼ばれてしまうというミスでした.このミスのわかりづらいところが,static_castに引数を2つ渡しても(渡すように見える書き方をしても)エラーにはならないというところです.

これまでstatic_castを関数のように捉えていたのですが,実際は関数ではなく演算子です.そのため,static_castのカッコ内にカンマで区切られた複数の変数があると,カンマオペレータが適用されて一つの変数と評価されるため,エラーとはならないんですね.

普段,カンマオペレータを使う頻度が少ないせいか,なかなか原因に気づけないでちょっと引っかかりました.このタイプの罠には初めて引っかかったので,改めてC++の奥深さを実感しました.

aquarium

GW中の昨日今日にsierraさんとrabiさんが遊びに来てくれたので,昨日は名古屋港の水族館に行ってきました.グロ系のさかなはsierraさんの担当だったので,ぼくはキュートな哺乳類系の写真を多めに撮ってました.
今回は写真大きめ多めです.

シャチ
P5040031_

続きを読む