俺にも執筆活動させろボケ

いったん整理

y=Xw

yが予測

Xがプレースホルダ(訓練データだったりテストデータ)

wがパラメータでこれをいじって正解率を上げたりする。

qiita.com

  1. inference() - 予測のためにネットワークを前進実行するグラフを作成します。
  2. loss() - 損失を生成する操作をグラフに追加します。
  3. training() - 勾配を計算し適用する操作をグラフに追加します。

前進実行とはなんだ。

tf.Variable

はwでパラメーター

あかん英語・日本語・専門用語・プログラミングチャンプルされ過ぎてて読み進まん。

この先は専門書で学ぶことにする。

チュートリアル最初を飛ばしてた


qiita.com

メカニクス行く前に一番最初の飛ばしてることに気づいて最初から。

”Variablesは学習可能なパラメータをグラフに追加することを可能にします。

その値は変わることはありません。対象的に、変数(variables)はtf.Variableを呼んでも初期化されません。TensorFlowプログラムですべての変数を初期化するためには明示的に以下のような特別な操作をしなければなりません:

init = tf.global_variables_initializer()
sess.run(init)
initがすべてのグローバル変数を初期化するTensorFlow sub-graphのハンドルであると認識することは重要です。sess.runを呼ぶまで、それらの変数は初期化されません。”

tf.contrib.learn

ってのがあるのね

optmizeの動きがいまいちわからん、プレースホルダに誤差が小さくなるような値が代入されるときに具体的にoptがやってるってことだよなあ。

 

2つ目の消化。

qiita.com

引きつづき引用を黒、メモを青で。

 

高効率のC ++バックエンドに依存しています。このバックエンドとの接続をセッションと呼びます。

まずグラフを作成し、セッションでそれを起動することです。

コードを構造化する方法についてTensorFlowをより柔軟にする便利なInteractiveSessionクラスを使用します。

Pythonコードの役割は、この外部計算グラフを構築し、計算グラフのどの部分を実行すべきか記述することです。詳細については基本的な使用方法計算グラフの節を参照してください。

概要がなんとなくうっすら本当にうっすらわからんでもない。

線型レイヤーってなんやねん。

 

shape引数はオプションですが、これを指定するとTensorFlowは一貫性のないテンソル形状から生じるバグを自動的にキャッチすることができます。

sess.run(tf.global_variables_initializer())

セッション内で変数を使用する前に、そのセッションを使用して変数を初期化する必要があります。このステップでは、すでに指定されている初期値(0で満たされたテンソル)をとり、各変数に割り当てます。これは、一度にすべての変数について行うことができます。

変数は一度に初期化しておく。

例えば、tf.argmax(y,1)はモデルが各入力に対して最も可能性が高いと考えているラベルで、一方、tf.argmax(y_,1)は正しいラベルです。予測が真実に一致するかどうかをチェックするためにtf.equalを使用することができます。

畳み込み一回勉強したけどちゃんとわかってないことが分かった。

実際に手を動かすべきだなあこのへんは。

 

QRNNをやりたいというかやるためのチュートリアル

qiita.com

チュートリアルちゃんとやるために翻訳されたところを見つけた、ありがてえ。

英語は苦手や。

 

メモ

”画像を「x」、ラベルを「y」”

「1-ホットベクトル」=3 は、[0,0,0,1,0,0,0,0,0,0]

https://camo.qiitausercontent.com/36b1352f8185982e4f9eb032b50b79bc6b2de5af/68747470733a2f2f7777772e74656e736f72666c6f772e6f72672f76657273696f6e732f6d61737465722f696d616765732f6d6e6973742d747261696e2d79732e706e67

”次の図は、あるモデルが、これらのクラスのそれぞれについて学習した重みを示しています。赤色が負の重みを表し、青色が正の重みを表します。”

https://camo.qiitausercontent.com/dfbde259a956f79f0cbc6ce22c6694f6e84f31b9/68747470733a2f2f7777772e74656e736f72666c6f772e6f72672f76657273696f6e732f6d61737465722f696d616765732f736f66746d61782d776569676874732e706e67

ああ、ソフトマックス回帰とソフトマックス関数って別の言葉か。ごっちゃになってたわ。

https://camo.qiitausercontent.com/2355e0dce3dbb82afba844cb8fa8fc0b10a7e201/68747470733a2f2f7777772e74656e736f72666c6f772e6f72672f76657273696f6e732f6d61737465722f696d616765732f736f66746d61782d72656772657373696f6e2d766563746f726571756174696f6e2e706e67

”28x28=784”

”形状 [None, 784] で表します。(ここで None は、次元が任意の長さをとることができることを意味します。)”

”これをコストまたは損失と呼び、モデルが希望する結果からどの程度離れているかを表します”

「交差エントロピー」は今度ちゃんと覚える。

”tf.reduce_mean は、バッチ内のすべてのサンプルにわたる平均を計算します。”

 tf.argmax はいくつかの軸に沿ったテンソルで最も高い要素のインデックスを与える非常に便利な関数です。”

tf.argmaxは後でちゃんと解説ググる

一日一個やな、分かったようなわからないような。

 

根性で予定していたプログラムを書ききった(えらい

とりあえずワーニング出ちゃったけど各periodごとに相関係数を算出した。

f:id:nemui3900:20180109223405j:plain

無理やりfor文でやったけど絶対もっといい方法がある。

つーかゼロ除算してるっぽいなあ

そもそも対数変化率でやるのやめるか?

相関係数の乖離はjpyでそのままやるかね

とりあえず一日ごとに分解して対数変化率のスランプグラフと

相関係数のデータをnpzにして保存するのをスケジュール組んでスクリプトで勝手にやらせるようにしておきたい。

圧倒的にクオンツの知識が足りていないのと本を読む時間がとれていない。

俺が難しい本を読む速度が大幅に上がらないとそもそも解決しない気がしてきたので突貫工事で誤魔化していきたい。

基礎は大事だが何か作って表現しないとさすがにストレスがたまりすぎている。

対数変化率をプロット

.cumsum()でスランプグラフにして並べてみる

f:id:nemui3900:20180109171708j:plain

まあこんなもんか

ヒストグラムを描く

と思ったけど変化率もプロット

f:id:nemui3900:20180109172726j:plain

fxのほうの外れ値やべえな(どうにかして困惑)

まあしかとしてヒストグラム

f:id:nemui3900:20180109173912j:plain

時間的なアノマリー入れないとあんまり乖離閉じてなさそう。

maxdd的なのの用語忘れたけどその辺も計測する必要がある。

振動の幅の予測に何を用いるのが一般的なんだろう?

 

相関係数を出す、periodどうするかね。

ひとまずここまで、コーヒー淹れよう。

 

DBに接続して対数変化率のグラフのプロットから

今考えているのは

bfとbffxで相関係数を比べて

bf↓bffx↑の方向で乖離しすぎた場合

bfjpy買いbffxjpyで売り。戻ってきたとこで決済。

というのを考えているが

必要な入金額的にはbfjpyに10万bffxに3万とかかな、

もっと安くてもやれると思うけど。

まあ自前でデータ取ってるDBに

pythonで接続するところから。

pandasにあるpandas.io.sql.read_sqlをつかう

とりあえず全部読み込む

0.5秒ごとのティックを記録してるので二日分でも大量

%%timeitで計測

216458 rows × 12 columns

8.52 s ± 78.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

1分20秒弱か全部はちょっとだめだというのが分かったので

減らすか、一日単位で区切るとして。

.npz形式のファイルで対数変化率と相関係数を出力

(メモ)このへんはとりあえず今後自動化したいところ。

8日のカラムbidとbidf(fx),askとaskf(fx)を

sqlで取り出す日付は一度忘れてカラムだけ

select id,time,bid,bidf,ask,askf from bf;

itref.fc2web.com

dfl = pd.io.sql.read_sql("SELECT * FROM bf where time between '2018-01-08' and '2018-01-09';", cnx)

これだと9日の00:00:00が入っちゃうなあ、

そんなに問題でもないけど。08 23:59:59にするか。

dfl = pd.io.sql.read_sql("SELECT id,time,bid,bidf,ask,askf FROM bf where time between '2018-01-08' and '2018-01-08 23:59:59';", cnx)

pandasのdfにするだけで偉い苦労したわ

とりあえずプロット

f:id:nemui3900:20180109135655j:plain

横軸を時間じゃなくてIDにするかなあ、

一発で対数変化率には出来ないくさいなあ。

なんか方法あったら教えてほしい。

対数変化率に変換するので長さを取得

>>>len(dfl.index)

134269

(メモ)0を含んでいる数で出る

lenA=len(dfl.index)
lnp = np.array(dfl.bid[:lenA-2])
lnp2 = np.array(dfl.bid[1:lenA-1])
p=(lnp2-lnp)/lnp2

ここまでやってbfで買いbffxで売りなんだから

askとbidfで計算しないとダメだと気付く。

修正した、npzで保存して終わろう。

f:id:nemui3900:20180109150222j:plain

loadして保存できているのを確認。

プロットしないといけないなあと思いつつ疲れた

データサイエンティストだったらこっからいろいろやれるはずだが私は違うのでかなしいなあ。

ぼやいててもしょうがないので勉強しつつ手を動かすのであるが。

一億円への道は遠い。