# Reinforcement Learning : day 8 CartPole(CNN)
# Aproach
NNにCNNを組み込んで学習させる。
通常得られる4つの状態(カート位置、カート速度、棒角度、棒角速度)は使用せず、ゲーム画像のみを使用する。
CNNを使ったアプローチとして下記を検討する
1. 状態$S^{t}$ のみの画像を状態とする
2. 状態$S^{t}$ と 過去状態$S^{t-i}$ の画像を状態とする
## Aproach 1.
状態$S^{t}$ のみの画像をinputとする
## Structure of NN

詳細はこちら
※独自クラスの定義ですが、雰囲気で察してください
``` python
nn = TorchNN(3,
Layer("conv1", torch.nn.Conv2d, 32, None, (), {"kernel_size":3, "stride":1,}),
Layer("relu1", torch.nn.ReLU, None, None, (), {}),
Layer("pool1", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}),
Layer("conv2", torch.nn.Conv2d, 32, None, (), {"kernel_size":2, "stride":1,}),
Layer("relu2", torch.nn.ReLU, None, None, (), {}),
Layer("pool2", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}),
Layer("conv3", torch.nn.Conv2d, 32, None, (), {"kernel_size":2, "stride":2,}),
Layer("relu3", torch.nn.ReLU, None, None, (), {}),
Layer("pool3", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}),
Layer("conv4", torch.nn.Conv2d, 16, None, (), {"kernel_size":2, "stride":2,}),
Layer("relu4", torch.nn.ReLU, None, None, (), {}),
Layer("pool4", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}),
Layer("conv5", torch.nn.Conv2d, 16, None, (), {"kernel_size":2, "stride":1,}),
Layer("relu5", torch.nn.ReLU, None, None, (), {}),
Layer("pool5", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}),
Layer("view6", torch.nn.Identity, 16*2*4,"reshape(x,-1)", (), {}),
Layer("fc6", torch.nn.Linear, 64, None, (), {}),
Layer("norm6", torch.nn.BatchNorm1d, 0, None, (), {}),
Layer("relu6", torch.nn.ReLU, None, None, (), {}),
Layer("fc7", torch.nn.Linear, 16, None, (), {}),
Layer("norm7", torch.nn.BatchNorm1d, 0, None, (), {}),
Layer("relu7", torch.nn.ReLU, None, None, (), {}),
Layer("output",torch.nn.Linear, self.env.env.action_space.n, None, (), {}),
)
```
## Learning
400 episode まで試したがうまく収束せず.

## Aproach 2.(1)
状態$S^{t}$ と 状態$S^{t-2}$ と 状態$S^{t-4}$の画像をinputとする
CNNは3段構成
## Structure of NN

## Learning
1000 episode 以上試したがうまくいかず・・・。

## Aproach 2.(2)
状態$S^{t}$ と 状態$S^{t-1}$の画像をinputとする
CNNは1段構成
## Structure of NN

## Learning
300 spisode とかの中では一番マシな気がする

# Discussion
似たようなことをしている[サイト](https://pylessons.com/CartPole-PER-CNN/)
台の速度や棒の角速度を数フレームで捉えるのは難しい。
ただ、台の位置や速度、棒の角度や角速度を正確に得られるシーンは少ないため、画像での学習というのがノーマルな気はする。
ただ、学習が遅いのが難点。