2017年11月06日

Unityで簡易映画館

いつの間にか11月ですね。amazonのプライムビデオをOculus Riftで見たかったのですが、Oculus Videoは動画用でブラウザなどは見られない?ようでしたので、Unityでデスクトップ表示をすることにしました。

Oculus VideoのCinemaが映画館っぽくていい感じでしたので、デスクトップ表示は凹みtips様のuDesktopDuplication[1]をそのまま使用させていただき、フリー素材を使って壁と椅子を作りました。どうも空中にディスプレイが浮いていると、大きな画面に見えないというか違和感があるのと、暗めにしていれば手抜きでもあまり目立たないのでとりあえず満足です。

実行結果

unity_ss_001.png

[1] http://tips.hecomi.com/?page=1482504118
web拍手 by FC2
posted by シンドラー at 23:23 | Comment(0) | Unity 5 | このブログの読者になる | 更新情報をチェックする

2017年10月05日

Google Financeからのデータ取得

Gain Capitalは1週間が終わったらデータが公開されるようですので、最新データの取得は恐らくできないと思います。直近のデータを取得する場合、Google Financeの非公式APIを使うのが良いみたいです[1]。

実行結果

rosoku_005.png

Gain Capitalにデータがある場合はcsvからデータ取得をして、Gain Capitalにない最新データに関してはGoogle Financeから取得するようにしてみました。

データの取得は大体できるようになったので類似チャート検索でも試してみようかと思います。時系列データの機械学習でいいライブラリとかあるんでしょうか。

[1] Real-Time Google Finance API を使って株価を取得する

web拍手 by FC2
posted by シンドラー at 20:31 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2017年09月18日

ローソク足と指数平滑平均について

株価のサイトなどでよく見るグラフですが、ローソク足というみたいですね[1]。始値、終値、高値、安値の4つを表したものということで、特に難しい計算は必要ないですね。もう一つは移動平均で、指数的な重みを使うものを指数移動平均とか指数平滑平均というみたいです[2][3]。

実行結果

rosoku_004.png

計算が合っているのかわかりませんが、とりあえず図示してみました。USD-JPYのBidですが、為替の取引は土曜日がないみたいで空いています。休みを挟んで終値と始値が一致していないのがよくわからないですが。後BidとAskのデータがあるのですが、普通のサイトに載っているのはどっちなんでしょうね。

[1] http://toushi-kyokasho.com/fx-chandle-chart/
[2] http://toushi-kyokasho.com/idouheikinnsenn/
[3] Wikipedia - 移動平均
web拍手 by FC2
posted by シンドラー at 23:06 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2017年09月14日

文字コード対策メモ

GAIN Capitalから取得したcsvファイルですが、文字コードがShift_JIS系とUTF-16LE(BOM付き)が混ざっていて困りました。BOMが付いていなければ仕方ないですが、付いていれば対応はできるので、[1]を参考にとりあえずBOMが付いているかどうか確認して、付いていてUTF-8かUTF-16であれば[2][3]を利用させていただいてstd::stringに変換するサンプルプログラムを作成してみました。

ソースコード
char_code.cpp

ソースコードを使用して損害等が発生したとしても責任は取りません。

Pythonの方は試してないですが、文字コードとかもうまく処理してくれるんですかね。

[1] バイトオーダーマーク
[2] C++でShift-JIS, UTF-8, UTF-16 BOM有無とエンディアンを考慮してファイルの読み込みをする
[3] Visual C++における文字コード変換
web拍手 by FC2
posted by シンドラー at 22:39 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2017年09月13日

C++でWeb上のデータ取得のテスト

PythonではWeb上のデータを取得して統計解析するようなことが簡単にできるみたいですね[1]。あまり意味はないですがC++で同じようなことを試してみます。

1.Web上のデータの取得
httpもしくはhttpsでアクセスしてデータ取得できるサイトも多いようです。C++でURLからデータ取得ということで、[2]のlibcurlを使用しました。404 Not foundの判別などはしたかったので、[3]を参考にさせていただき、Zaif[4]のサイトからJSONデータを取得するようにしてみました。

2.JSONデータの解析
解析というほど複雑ではないですが、自前で分割したりするのは面倒でしたので、C++でJSONを取り扱えるライブラリを探しました。[5]のサイトで[6]のμjsonが紹介されていましたので、それを使用して取得したデータを解析しました。大体サンプルそのままですが、構造体を定義してそこにデータを入れていく感じです。

3.ZIPファイルの解凍
[1]によると、為替レートのデータがGAIN Capital[7]にまとめられているようですが、zipファイルで置かれていますので、curlでダウンロードして解凍してcsvファイルを取得する必要があります。unzipできるライブラリとして、今回はzlib[8]とそれを使ったclx[9]を使って解凍しました。

4.グラフの描画
いつものようにOpenGL+AntTweakBarを使って描画してみました。

unzip_001.png

割と手間がかかりましたのでやっぱりPythonだと簡単ですね。

[1] 個人投資家のためのFinTechプログラミング (日経BPムック)
[2] https://curl.haxx.se/libcurl/
[3] libcurl 404 detection
[4] Zaif Exchange APIドキュメント
[5] C++ 向けの扱いやすい json ライブラリ μjson
[6] μjson
[7] GAIN Capital
[8] zlib
[9] CLX C++ Library

web拍手 by FC2
posted by シンドラー at 22:30 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2017年09月06日

畳み込みニューラルネットワークのテスト その4

バグはある程度修正したのですが、まだまだ動作が怪しい気がします。とりあえず[1]などを参考にさせていただき、復習がてらニューラルネットワークの基本部分を見直してみました。

NN_006.png

とりあえずわかりやすいように入力層2+1個、中間層2+1個、出力層1個のネットワークで考えます。Pythonなどで扱いやすいこともあり、1個1個のユニットというよりは行列計算で考えることが多いようです。

NN_007.png

逆伝搬は基本的には偏微分を計算してチェインルールで戻していく感じです。微分のところは使用する活性化関数で変わってくるのでそのまま微分表記にしています。

NN_008.png

逆伝搬も行列で考えることができますが、バイアス項が邪魔だったりします。古典的なニューラルネットワークではバイアス項も入れ込んで同次座標系で考えますが、もうバイアスとして個別に扱った方がいいのかもしれません。

NN_009.png

ミニバッチ処理の場合、バッチひとまとまりは一括学習でいいんですかね。

NN_010.png

[1] 誤差逆伝播法のノート
web拍手 by FC2
posted by シンドラー at 21:12 | Comment(0) | Machine Learning | このブログの読者になる | 更新情報をチェックする

2017年08月24日

畳み込みニューラルネットワークのテスト その3

[1][2]を参考にさせていただき、畳み込み層の逆伝搬を実装してみました。一応フィルタらしきものが学習されているみたいですが、あまり精度が出ていないのと、フィルタの数を多くすると落ちるのでバグがありそうです。まだSGDもDropOutも実装していないので局所解に陥っているだけかもしれませんが。

NN_005.png

0〜9の手書き数字画像計800枚ぐらいをクラスタリングしてみました。枚数が少なすぎかもしれませんので、後でMNISTで試してみたいと思います。第1層は3枚、第2層は3×3枚のフィルタを1000回更新した結果です。教師データに対して77%ぐらいの精度しかでていません。

とりあえずC++とEigen使って実装して一通り動いたということで、仕組みは何となく理解できてきたかと思います。

[1] DeepLearning(4): CNNの逆伝播完成?
[2] 数式で書き下す Convolutional Neural Networks (CNN)

web拍手 by FC2
posted by シンドラー at 18:56 | Comment(0) | Machine Learning | このブログの読者になる | 更新情報をチェックする

2017年08月21日

畳み込みニューラルネットワークのテスト その2

昨日の続きです。昨日の画像を見るとReLUを通すのを忘れていますね…。

畳み込み層のところで勘違いしていた点で、前層出力が3枚で、フィルタを4枚準備した場合、出力は3×4で12枚の特徴マップになるのではと思っていたので、4枚の特徴マップが次の層で6枚の特徴マップになっててなんでだろうと思っていました。

[1]のサイトにも説明がありますが、前層の出力チャンネル数分のフィルタを、今の層で出力したい特徴マップ数分だけ用意する必要があるということで、4枚を6枚にするときは、4×6で24枚のフィルタが必要ということだと思います。

NN_003.png

NN_004.png

[1]のサイトには畳込み層、プーリング層の逆伝搬の方法も載っていましたので、そこを参考に実装を進めたいと思います。

[1] DeepLearning(2): まずは順伝播(下)
web拍手 by FC2
posted by シンドラー at 18:45 | Comment(0) | Machine Learning | このブログの読者になる | 更新情報をチェックする

畳み込みニューラルネットワークのテスト その1

DropOut[1][2]は一応実装できたので、畳み込みニューラルネットワークの準備に入りたいと思います。畳み込みに使うフィルタを学習するのが特長だと思いますが、いきなりそこまでの処理を実装するのは大変なので、少しずつ進めていきたいと思います。

というわけで、Gaborフィルタ[3]を使って畳み込みとプーリングの処理を試してみました。
NN_002.png
4枚のフィルタを掛けてMax poolingでさらに小さくしてそれを全結合NNに入れて分類しています。BPによる重み更新はNNしかしていません。[4]のLeNetでいうところの(C1)から(S2)への畳み込み処理がよくわかっていないのと、全結合より前の畳み込みのところのフィルタの更新方法がよくわかっていないので、[5]などを見て色々調べてみたいと思います。

[1] Dropoutの実装と重みの正則化
[2] Dropout を実装する
[3] ガボールフィルタ
[4] Convolutional Neural Networks (LeNet)
[5] Theano で Deep Learning [3] : 畳み込みニューラルネットワーク

web拍手 by FC2
posted by シンドラー at 02:23 | Comment(0) | Machine Learning | このブログの読者になる | 更新情報をチェックする

2017年08月18日

ニューラルネットワークのテスト

以前実装していたのですが、設計などが微妙でしたのでほぼ書き直しています。結構忘れていたので参考サイト[1]〜[3]辺りを見直してみましたが、計算自体は問題なさそうでした。

あまり分類が難しい問題は実装が合っているのかどうか確認しづらいので、とりあえず下記のような簡単な3クラス分類の問題にしてみました。

NN_001.png

教師画像300枚は、3枚の画像を100枚ずつランダム回転させて増やしたものですので、ものすごく簡単に分類できるかと思います。実際、2、30エポックで誤差が0.01未満になって教師データは100%の認識率です。1エポックは300枚からランダムに100枚選んで学習としました。

Softmax関数とReLU関数は問題ないみたいですので、後はDropOutを実装してから畳込みニューラルネットワークに入りたいと思います。

[1] 誤差逆伝播法のノート
[2] 誤差逆伝播法をはじめからていねいに
[3] ニューラルネットワーク
web拍手 by FC2
posted by シンドラー at 18:39 | Comment(0) | Machine Learning | このブログの読者になる | 更新情報をチェックする