[technology][AI][COZMO][Deep Learning][Chainer]Donkey COZMOのCNNを少し小さくしてみる
rc30-popo.hatenablog.com
の続きです。
最初に作ったDONKEY COZMOの畳み込みニューラルネットワークの学習データをファイル保存すると180MBあったので、少しコンパクト化を試みました。
最初はチャンネル数16と32の畳み込みでしたが、これを8と16に変更。全結合層の中間層1024ノードを256ノードに減らしました。
class czCnn(Chain): def __init__(self): super(czCnn, self).__init__( conv1 = L.Convolution2D(in_channels=1, out_channels=8, ksize=4, stride=1, pad=1), conv2 = L.Convolution2D(in_channels=8, out_channels=16, ksize=4, stride=1, pad=1), l0 = L.Linear(None,256), l1 = L.Linear(None,3), bncv1 = L.BatchNormalization(8), bncv2 = L.BatchNormalization(16), bn0 = L.BatchNormalization(256), ) def forward(self, x,ratio=0.5): h = F.reshape(x,(len(x),1,160,120)) h = F.max_pooling_2d(F.relu(self.bncv1(self.conv1(h))),2) h = F.max_pooling_2d(F.relu(self.bncv2(self.conv2(h))),2) h = F.dropout(F.relu(self.bn0(self.l0(h))),ratio=ratio) h = self.l1(h) return h
これで前回の走行データを学習させましたが、20epochくらいで学習データに対するフィッティングは100%正解が出る様になりました。
10epochだとちょっとまだ足りない感じです。学習データのサイズは1/10くらいに。
実際に走らせてみると挙動不安定感が元のネットワークより増した様な気もします。
更に別のコースを作って、そちらもテスト。前回はコース10周分くらい学習させましたが、今回は6周くらい。
だいたい上手く行くのですが、うまく曲がらずに壁にぶつかるケースがありました。
このコースももう少し学習用データを増やして、更に最初のコース用データと合わせて学習してどちらのコースでも走行可能なネットワークを作ってみたいと思います。
7/6: 学習データのサイズに誤りがあったので訂正。