日経平均株価の予測をTensorFlowで機械学習させ精度の向上を試みた　62％から68％位になった


#はじめに
[TensorFlowを投資につかうまで 衝撃のサンプル編 (5)](http://qiita.com/verizi/items/40f77af5e079c9406a99)のコードを使用します。
大元はGoogleの[財務時系列データを使用した機械学習](https://cloud.google.com/solutions/machine-learning-with-financial-time-series-data?hl=ja)です。
ここまででは62%位の精度でした。

#環境
Tensorflow1.3
python3.5.2
windows10


#予測の前提

- 日経平均株価の当日のcloseが前日のcloseより価格が上か下か予測します。
- 判断に使用するデータはすべて1日以上前のデータを使用します。
- 予測のタイミングは当日の取引開始時間の前です。

最初に学習させるデータのインデックスは以下です。
N225  # Nikkei 225, Japan
HSI   # Hang Seng, Hong Kong
GDAXI # DAX, German
DJI   # Dow, US
GSPC  # S&P 500, US
SSEC  # Shanghai Composite Index (China)
BVSP  # BOVESPA, Brazil

2007-08-23 ~ 2017-08-21の約10年分の日足のヒストリカルデータを使用しています。
最新のヒストリカルデータ80%を学習に使用し、残り20%のヒストリカルデータをテストに使用します。
評価はテストデータからのaccuracyのみ考慮します。

#試すもの
Optimizerの変更
学習データの変更
学習回数の変更
隠れ層、ニューロンの数の変更

#隠れ層、ニューロンの数について
いまさらですが隠れ層のレイヤーとニューロンの数について概要だけ記載します。

![tikz11.png](https://qiita-image-store.s3.amazonaws.com/0/198768/f1a40057-c0ba-9e4f-5958-d29a98ea8485.png)

神経細胞を模した作りで〇がニューロン、矢印がシナプスです。
input layerが入力層、hidden layerが隠れ層、output layerが出力層です。
今回の場合入力層のニューロンの数が学習させたデータの種類数と同じになり出力層のニューロンの数は上がるか下がるかの２つになっています。
また隠れ層は入力層、出力層に関係なくニューロンの数と層の数を変更できます。
これがニューラルネットワークをつかった深層学習と呼ばれているものです。

#Optimizerの検証
Optimizerはどのようにニューラルネットワークのニューロンとシナプスの中の数値を調整していくかのアルゴリズムです。
試験するOptimizerは以下になります。
AdamOptimizerが評価が高いそうですが、簡単にためせるものは全部ためし今回の財務時系列データが得意なOptimizerを探します。

- AdamOptimizer
- AdadeltaOptimizer
- AdagradOptimizer
- GradientDescentOptimizer
- FtrlOptimizer
- ProximalGradientDescentOptimizer
- ProximalAdagradOptimizer
- RMSPropOptimizer

隠れ層は以下を使います。配列の長さが層の数で数値がニューロンの数です。


- []　#隠れ層なし
- [50] #隠れ層１層でニューロン50個
- [50,25]　#隠れ層２層でニューロン50個と25個
- [10, 20, 10]　#隠れ層３層でニューロン10個と20個と10個
- [25, 50, 25]　#隠れ層３層でニューロン25個と50個と25個

80000回学習させます。

                                  |[]       | [50]    |[50,25]    | [10,20,10]| [25,50,25]|
|:--------------------------------|:--------|:--------|:----------|:----------|:----------|
AdamOptimizer                     |0.601227 | 0.623722|  0.625767 |  0.631902 |  0.625767 |
AdadeltaOptimizer                 |0.517382 | 0.623722|  0.629857 |  0.517382 |  0.517382 |
AdagradOptimizer                  |0.517382 | 0.517382|  0.517382 |  0.517382 |  0.517382 |
GradientDescentOptimizer          |0.611452 | 0.625767|  0.517382 |  0.517382 |  0.517382 |
FtrlOptimizer                     |0.517382 | 0.517382|  0.517382 |  0.517382 |  0.517382 |
ProximalGradientDescentOptimizer  |0.611452 | 0.629857|  0.517382 |  0.517382 |  0.517382 |
ProximalAdagradOptimizer          |0.517382 | 0.517382|  0.517382 |  0.517382 |  0.517382 |
RMSPropOptimizer                  |0.609407 | 0.625767|  0.654397 |  0.623722 |  0.619632 |

RMSPropOptimizerの[50,25]が65%　次に　AdamOptimizerの[10,20,10]が63% なのでこの２つを使用することにします。

隠れ層なし[]も隠れ層がある時より精度が高くなっていることはないので排除します。
しかし隠れ層についてはどれがいいのかこれではよくわかりません。後程検証します。

#入力データの検証
## HSI SSECを除く
前日のデータでの相関の低かったHSI,SSECはノイズになっている可能性があるので無くしてみます。
HSIの当日のデータの相関は0.5程度あり高いですが、時間帯が同じなので予測には使えません。

隠れ層[50],[50,25],[10, 20, 10],[25, 50, 25],[100,50]で30000回学習させます。

HSI,SSEC有

|                 | [50]     |[50, 25]    |[10, 20, 10]| [25, 50, 25] |[100, 50]    |
|:----------------|----------|------------|------------|--------------|-------------|
|AdamOptimizer    | 0.623016 | 0.626984   |  0.626984  |   0.619048   | 0.623016    |
|RMSPropOptimizer | 0.638889 | 0.638889   |  0.638889  |   0.626984   | 0.621032    |

HSI,SSEC無

|                 | [50]     |[50, 25]    |[10, 20, 10]| [25, 50, 25] |[100, 50]    |
|:----------------|----------|------------|------------|--------------|-------------|
|AdamOptimizer    | 0.615079 | 0.632937   |  0.632937  |   0.609127   |  0.611111   |
|RMSPropOptimizer | 0.613095 | 0.628968   |  0.634921  |   0.603175   |  0.607143   |

オオウ、これはかなり判断しにくいです。
AdamOptimizerはHSI,SSECを除くと性能が上がることがありますが、RMSPropOptimizerはHSI,SSECを除くと性能が明らかに落ちました。
相関の低かったHSI,SSEC有無によって精度が上がるか下がるか一概には判断できずあまり影響がない事がわかりました。

## 外国為替の情報を入れてみる
隠れ層は[50]で30000回学習させます。
USD/JPY,AUD/JPY,EUR/JPYを順次追加していきます。

|                 | USD/JPY     |USD/JPY AUD/JPY    |USD/JPY AUD/JPY　EUR/JPY| 
|:----------------|----------|------------|------------|
|AdamOptimizer    | 0.632936507937 | 0.666666666667 |  0.662698412698 | 
|RMSPropOptimizer | 0.668650793651 | 0.676587301587 |  0.674603174603  

ずいぶん精度があがりました。ちびっとですがEUR/JPYを追加すると精度がさがったのでUSD/JPY・AUD/JPYだけ追加します。

## もっと前の日のデータも判断材料にいれてみる
元々は1~3日前のデータを判断材料としていれていますがこれを1~5日前まで伸ばしてみます。
隠れ層は[50]で30000回学習させます。

|                 | 1~3日前    |1~4日前    |1~5日前| 
|:----------------|----------|------------|------------|
|AdamOptimizer    | 0.666666666667 | 0.666666666667 |  0.670634920635 | 
|RMSPropOptimizer | 0.676587301587 | 0.686507936508 |  0.650793650794 |
1~4日前のRMSPropOptimizerは68%まで改善しました。
5日前までいれるとAdamOptimizerは改善しましたが、RMSPropOptimizerは65%まで下がってしまいました。

2回目

|                 | 1~3日前    |1~4日前    |1~5日前| 
|:----------------|----------|------------|------------|
|AdamOptimizer    | 0.644841269841| 0.660714285714|  0.650793650794| 
|RMSPropOptimizer | 0.672619047619| 0.668650793651|  0.640873015873|

Optimizerの話になってしまいますが、ここまでの検証で全体的にRMSPropOptimizerのほうが精度がかなり高く出るタイミングがありますが同様に精度が低くでることもありました。
検証回数も１，２回程度ではだめそうですね。今回は一通り試すのを目的とし日付に関してはあまり根拠にはならないですが、68%の精度の出た1~4日前のデータを使用し判断するとして検証を進めます。

#隠れ層の数とニューロンの数の検証
見つけられてないだけかもしれませんが、調べてみると確立したものは無いという理解になりました。
入力層のニューロン数や出力の仕方でも変化するそうなので総当たりするしかなさそうです。

参考　
[multi-layer perceptron (MLP) architecture: criteria for choosing number of hidden layers and size of the hidden layer?
](https://stackoverflow.com/questions/10565868/multi-layer-perceptron-mlp-architecture-criteria-for-choosing-number-of-hidde)[How to choose the number of hidden layers and nodes in a feedforward neural network?](https://stats.stackexchange.com/questions/181/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netw)

以下の２点は共通して参考に書かれていました。
・隠れ層１層でだいたいなんとかなる。
・隠れ層のニューロンの数は（今回の場合）入力層の数より少なくてよい
隠れ層１層から試せという記述もありましたがとりあえず手あたり次第試してみます。


出力層は上がるか下がるかの2ニューロン、入力層は以下の40ニューロンになっています。

```
AORD_1,AUDJPY_1,BVSP_1,DJI_1,GDAXI_1,GSPC_1,HSI_1,N225_1,SSEC_1,USDJPY_1,AORD_2,AUDJPY_2,BVSP_2,DJI_2,GDAXI_2,GSPC_2,HSI_2,N225_2,SSEC_2,USDJPY_2,AORD_3,AUDJPY_3,BVSP_3,DJI_3,GDAXI_3,GSPC_3,HSI_3,N225_3,SSEC_3,USDJPY_3,AORD_4,AUDJPY_4,BVSP_4,DJI_4,GDAXI_4,GSPC_4,HSI_4,N225_4,SSEC_4,USDJPY_4
```
＊アンダーバー数値は何日前の意味です。

今回は一通り動きが見たくて隠れ層の変更と学習回数は手あたり次第１個ずつやっていきました。
学習の経過をグラフで出してくれるtensorboardを使用して学習途中でテストすれば早くできると思います。

##結果
隠れ層は１層で十分な精度がでていました。
隠れ層１層のニューロンの数は20~50で試験しましたがあんまり変わんなそう。
それぐらいしかわかりませんでした。
元々の精度が66%程度と低いからかそんなに頑張る必要なさそうです。
90%から96%に改善する場合やもっと複雑な出力の時に必要になるのでしょうか。

テスト結果を置いておきます。グラフにしようと思ったらバラバラ過ぎてまとまりませんでした。

|テストデータでの正確さ|隠れ層|Optimizer|学習回数|
|:----------------|----------|------------|------------|
|0.688492063|[40]|RMSPropOptimizer|32000|
|0.688492063|[50,20]|RMSPropOptimizer|32000|
|0.68452381|[10,20,10]|AdamOptimizer|33000|
|0.680555556|[30]|RMSPropOptimizer|31000|
|0.680555556|[20]|AdamOptimizer|32000|
|0.680555556|[40]|RMSPropOptimizer|33000|
|0.678571429|[50]|AdamOptimizer|31000|
|0.678571429|[30]|RMSPropOptimizer|32000|
|0.678571429|[50]|RMSPropOptimizer|32000|
|0.676587302|[50,20]|RMSPropOptimizer|28000|
|0.676587302|[30,10]|RMSPropOptimizer|30000|
|0.676587302|[30]|AdamOptimizer|32000|
|0.676587302|[50]|AdamOptimizer|32000|
|0.676587302|[30]|AdamOptimizer|33000|
|0.676587302|[30]|AdamOptimizer|33000|
|0.676587302|[30]|RMSPropOptimizer|33000|
|0.674603175|[50]|RMSPropOptimizer|19000|
|0.674603175|[50]|RMSPropOptimizer|19000|
|0.674603175|[30,10]|RMSPropOptimizer|24000|
|0.674603175|[40]|AdamOptimizer|28000|
|0.674603175|[40]|RMSPropOptimizer|30000|
|0.674603175|[50,20]|RMSPropOptimizer|31000|
|0.674603175|[40]|AdamOptimizer|33000|
|0.674603175|[40,20]|RMSPropOptimizer|33000|
|0.672619048|[50]|RMSPropOptimizer|21000|
|0.672619048|[50]|RMSPropOptimizer|21000|
|0.672619048|[30,10]|RMSPropOptimizer|26000|
|0.672619048|[50]|RMSPropOptimizer|28000|
|0.672619048|[40]|AdamOptimizer|31000|
|0.672619048|[20]|AdamOptimizer|33000|
|0.670634921|[10,20,10]|RMSPropOptimizer|30000|
|0.670634921|[15,30,15]|RMSPropOptimizer|30000|
|0.670634921|[40]|AdamOptimizer|24000|
|0.670634921|[40,20]|RMSPropOptimizer|24000|
|0.670634921|[40]|AdamOptimizer|26000|
|0.670634921|[50,20]|RMSPropOptimizer|26000|
|0.670634921|[20]|AdamOptimizer|28000|
|0.670634921|[30,10]|RMSPropOptimizer|28000|
|0.670634921|[10,20,10]|RMSPropOptimizer|28000|
|0.670634921|[30]|RMSPropOptimizer|30000|
|0.670634921|[50]|RMSPropOptimizer|30000|
|0.670634921|[30]|AdamOptimizer|31000|
|0.670634921|[40]|RMSPropOptimizer|31000|
|0.670634921|[20]|RMSPropOptimizer|32000|
|0.670634921|[10,20,10]|AdamOptimizer|32000|
|0.670634921|[20]|AdamOptimizer|33000|
|0.670634921|[20]|RMSPropOptimizer|33000|
|0.670634921|[40,20]|RMSPropOptimizer|33000|
|0.668650794|[30]|RMSPropOptimizer|24000|
|0.668650794|[10,20,10]|AdamOptimizer|24000|
|0.668650794|[40,20]|RMSPropOptimizer|26000|
|0.668650794|[30]|AdamOptimizer|28000|
|0.668650794|[20]|AdamOptimizer|30000|
|0.668650794|[40]|AdamOptimizer|30000|
|0.668650794|[30,10]|RMSPropOptimizer|32000|
|0.668650794|[30]|RMSPropOptimizer|33000|
|0.668650794|[30,10]|RMSPropOptimizer|33000|
|0.666666667|[50]|RMSPropOptimizer|22000|
|0.666666667|[50]|RMSPropOptimizer|22000|
|0.666666667|[40]|RMSPropOptimizer|24000|
|0.666666667|[20]|AdamOptimizer|26000|
|0.666666667|[30]|RMSPropOptimizer|26000|
|0.666666667|[40]|RMSPropOptimizer|26000|
|0.666666667|[40,20]|RMSPropOptimizer|30000|
|0.666666667|[40,20]|RMSPropOptimizer|32000|
|0.666666667|[20]|RMSPropOptimizer|33000|
|0.66468254|[10,20,10]|RMSPropOptimizer|30000|
|0.66468254|[10,20,10]|RMSPropOptimizer|20000|
|0.66468254|[20]|RMSPropOptimizer|24000|
|0.66468254|[50,20]|RMSPropOptimizer|24000|
|0.66468254|[20]|RMSPropOptimizer|26000|
|0.66468254|[50]|RMSPropOptimizer|26000|
|0.66468254|[20]|RMSPropOptimizer|28000|
|0.66468254|[30]|RMSPropOptimizer|28000|
|0.66468254|[50]|AdamOptimizer|28000|
|0.66468254|[50]|AdamOptimizer|30000|
|0.66468254|[50,20]|RMSPropOptimizer|30000|
|0.66468254|[50]|AdamOptimizer|33000|
|0.66468254|[30,10]|RMSPropOptimizer|33000|
|0.66468254|[50,20]|RMSPropOptimizer|33000|
|0.662698413|[50]|RMSPropOptimizer|20000|
|0.662698413|[40]|AdamOptimizer|20000|
|0.662698413|[40]|RMSPropOptimizer|22000|
|0.662698413|[30]|AdamOptimizer|24000|
|0.662698413|[50]|RMSPropOptimizer|24000|
|0.662698413|[10,20,10]|RMSPropOptimizer|30000|
|0.662698413|[50]|RMSPropOptimizer|33000|
|0.662698413|[40]|RMSPropOptimizer|33000|
|0.662698413|[50]|AdamOptimizer|33000|
|0.660714286|[50]|RMSPropOptimizer|30000|
|0.660714286|[10,20,10]|RMSPropOptimizer|21000|
|0.660714286|[10,20,10]|RMSPropOptimizer|21000|
|0.660714286|[20]|AdamOptimizer|22000|
|0.660714286|[20]|AdamOptimizer|24000|
|0.660714286|[50]|AdamOptimizer|26000|
|0.660714286|[20]|RMSPropOptimizer|30000|
|0.660714286|[30]|AdamOptimizer|30000|
|0.660714286|[50]|RMSPropOptimizer|31000|
|0.660714286|[40]|AdamOptimizer|32000|
|0.660714286|[50,20]|AdamOptimizer|33000|
|0.660714286|[40]|AdamOptimizer|33000|
|0.660714286|[50]|RMSPropOptimizer|33000|
|0.658730159|[50]|RMSPropOptimizer|30000|
|0.658730159|[50]|RMSPropOptimizer|18000|
|0.658730159|[10,20,10]|RMSPropOptimizer|22000|
|0.658730159|[10,20,10]|AdamOptimizer|18500|
|0.658730159|[40]|AdamOptimizer|19500|
|0.658730159|[50]|AdamOptimizer|20000|
|0.658730159|[50,20]|RMSPropOptimizer|33000|
|0.656746032|[20]|RMSPropOptimizer|30000|
|0.656746032|[20,40,20]|RMSPropOptimizer|30000|
|0.656746032|[10,20,10,5]|RMSPropOptimizer|30000|
|0.656746032|[15,30,15]|RMSPropOptimizer|22000|
|0.656746032|[10,20,10]|RMSPropOptimizer|24000|
|0.656746032|[10,20,10]|RMSPropOptimizer|26000|
|0.656746032|[40,20]|RMSPropOptimizer|28000|
|0.656746032|[40,20]|AdamOptimizer|30000|
|0.656746032|[20]|RMSPropOptimizer|31000|
|0.656746032|[10,20,10]|RMSPropOptimizer|32000|
|0.654761905|[15,30,15]|RMSPropOptimizer|19000|
|0.654761905|[50]|RMSPropOptimizer|30000|
|0.654761905|[10,20,10]|RMSPropOptimizer|30000|
|0.654761905|[15,30,15]|RMSPropOptimizer|19000|
|0.654761905|[30]|RMSPropOptimizer|20000|
|0.654761905|[30]|AdamOptimizer|22000|
|0.654761905|[40,20]|RMSPropOptimizer|22000|
|0.654761905|[50]|AdamOptimizer|24000|
|0.654761905|[40]|RMSPropOptimizer|28000|
|0.654761905|[10,20,10]|RMSPropOptimizer|33000|
|0.652777778|[50,25]|RMSPropOptimizer|30000|
|0.652777778|[5,10,5]|RMSPropOptimizer|30000|
|0.652777778|[10,20,10]|RMSPropOptimizer|19000|
|0.652777778|[10,20,10]|RMSPropOptimizer|19000|
|0.652777778|[20]|AdamOptimizer|18500|
|0.652777778|[40]|AdamOptimizer|18500|
|0.652777778|[50]|RMSPropOptimizer|18500|
|0.652777778|[20]|AdamOptimizer|19500|
|0.652777778|[10,20,10]|AdamOptimizer|19500|
|0.652777778|[20]|AdamOptimizer|20000|
|0.652777778|[50,20]|RMSPropOptimizer|22000|
|0.652777778|[30]|AdamOptimizer|26000|
|0.652777778|[50,20]|AdamOptimizer|28000|
|0.652777778|[10,20,10]|AdamOptimizer|28000|
|0.652777778|[30,10]|AdamOptimizer|33000|
|0.650793651|[15,30,15]|RMSPropOptimizer|21000|
|0.650793651|[10,20,10]|RMSPropOptimizer|18000|
|0.650793651|[15,30,15]|RMSPropOptimizer|21000|
|0.650793651|[30,10]|RMSPropOptimizer|19500|
|0.650793651|[40]|RMSPropOptimizer|20000|
|0.650793651|[50]|RMSPropOptimizer|20000|
|0.650793651|[30,10]|RMSPropOptimizer|20000|
|0.650793651|[30]|RMSPropOptimizer|22000|
|0.650793651|[50]|RMSPropOptimizer|22000|
|0.650793651|[30,10]|RMSPropOptimizer|22000|
|0.650793651|[30,10]|AdamOptimizer|24000|
|0.648809524|[50]|RMSPropOptimizer|40000|
|0.648809524|[30]|RMSPropOptimizer|18500|
|0.648809524|[30,10]|RMSPropOptimizer|18500|
|0.648809524|[30]|AdamOptimizer|19500|
|0.648809524|[40,20]|RMSPropOptimizer|19500|
|0.648809524|[10,20,10]|AdamOptimizer|20000|
|0.648809524|[20]|RMSPropOptimizer|22000|
|0.648809524|[30,10]|AdamOptimizer|26000|
|0.648809524|[10,20,10]|RMSPropOptimizer|33000|
|0.646825397|[20]|RMSPropOptimizer|18500|
|0.646825397|[30]|AdamOptimizer|18500|
|0.646825397|[40]|RMSPropOptimizer|18500|
|0.646825397|[50,20]|RMSPropOptimizer|18500|
|0.646825397|[40,20]|RMSPropOptimizer|18500|
|0.646825397|[30]|RMSPropOptimizer|19500|
|0.646825397|[40]|RMSPropOptimizer|19500|
|0.646825397|[50]|AdamOptimizer|19500|
|0.646825397|[50]|RMSPropOptimizer|19500|
|0.646825397|[40,20]|AdamOptimizer|20000|
|0.646825397|[40,20]|RMSPropOptimizer|20000|
|0.646825397|[40]|AdamOptimizer|22000|
|0.64484127|[50,20]|RMSPropOptimizer|19500|
|0.64484127|[50]|AdamOptimizer|22000|
|0.64484127|[10,20,10]|AdamOptimizer|26000|
|0.642857143|[50]|RMSPropOptimizer|15000|
|0.642857143|[20]|RMSPropOptimizer|19500|
|0.642857143|[30]|AdamOptimizer|20000|
|0.642857143|[30,10]|AdamOptimizer|20000|
|0.642857143|[10,20,10]|RMSPropOptimizer|22000|
|0.640873016|[50,100,50]|RMSPropOptimizer|30000|
|0.640873016|[50]|AdamOptimizer|18500|
|0.640873016|[30,10]|AdamOptimizer|18500|
|0.640873016|[20]|RMSPropOptimizer|20000|
|0.640873016|[50,20]|RMSPropOptimizer|20000|
|0.640873016|[30,10]|AdamOptimizer|33000|
|0.638888889|[10,20,10]|RMSPropOptimizer|18500|
|0.638888889|[30,10]|AdamOptimizer|28000|
|0.638888889|[10,20,10]|AdamOptimizer|33000|
|0.636904762|[25,50,25]|RMSPropOptimizer|30000|
|0.636904762|[10,20,10]|RMSPropOptimizer|19500|
|0.636904762|[10,20,10]|RMSPropOptimizer|20000|
|0.634920635|[40,20]|AdamOptimizer|18500|
|0.634920635|[40,20]|AdamOptimizer|19500|
|0.634920635|[40,20]|AdamOptimizer|22000|
|0.634920635|[40,20]|AdamOptimizer|26000|
|0.634920635|[40,20]|AdamOptimizer|28000|
|0.634920635|[40,20]|AdamOptimizer|33000|
|0.634920635|[40,20]|AdamOptimizer|33000|
|0.632936508|[10,20,10]|RMSPropOptimizer|40000|
|0.632936508|[10,20,10]|RMSPropOptimizer|15000|
|0.632936508|[30,10]|AdamOptimizer|22000|
|0.632936508|[10,20,10]|AdamOptimizer|22000|
|0.632936508|[40,20]|AdamOptimizer|24000|
|0.632936508|[40,20]|AdamOptimizer|32000|
|0.630952381|[50,20]|AdamOptimizer|19500|
|0.630952381|[50,20]|AdamOptimizer|32000|
|0.628968254|[50,20]|AdamOptimizer|18500|
|0.628968254|[30,10]|AdamOptimizer|19500|
|0.628968254|[50,20]|AdamOptimizer|20000|
|0.628968254|[50,20]|AdamOptimizer|22000|
|0.628968254|[50,20]|AdamOptimizer|24000|
|0.628968254|[50,20]|AdamOptimizer|26000|
|0.628968254|[50,20]|AdamOptimizer|30000|
|0.628968254|[10,20,10]|AdamOptimizer|30000|
|0.626984127|[50,20]|AdamOptimizer|31000|
|0.626984127|[50,20]|AdamOptimizer|33000|
|0.623015873|[30,10]|AdamOptimizer|30000|
|0.619047619|[50]|RMSPropOptimizer|10000|
|0.619047619|[30,10]|AdamOptimizer|32000|
|0.613095238|[10,20,10]|RMSPropOptimizer|10000|

#まとめ
学習させるデータを変更したのが一番精度があがったので学習させるデータを探すのが一番重要そうです。まあ当たり前のような気もします。
その後隠れ層は１層で試験しAdamかRMSPropOptimizerを使っていこうと思います。今回のようなAIの場合ニューラルネットワーク自体の調整はさほど変なことしなければ大丈夫という感じを受けました。
今回やった検証内容は試したいことの一部でしたが不確定な要素も多く判断しにくかったです。
フェイスブックがAI同士で会話させていたようにAIの精度をかってに上げてくれる仕組みも考えなければならなそうです。

68%の正確さをもつAIができあがりました。
落ち着け自分。まだあわてるような時間じゃない。