変わりモノがいい!

変わりモノには価値がある・・・ハズ?

PiCar-V Self-driving tensorflow + keras編 進捗報告-3

tensorflow + kerasでのコードの問題点が判りました。

Chainerを使った学習の次にチャレンジしたtensorflow + kerasではコードの間違いが修正できずに一旦休止し、廻り道でPytorchでの学習を行い、tensorflow + kerasの学習に戻り、速度とステアリング角度の同時学習をやるのではなく、ステアリング角度のみの学習ができるようになった、というのが前回の記事までの概要です。
Chainerでの学習を始めて1ヶ月半、最初のtensorflow + kerasの学習から1ヶ月、ネットにある情報を調べ、手持ちの本も調べ、試行錯誤してきましたが、tensorflow + kerasで躓いた原因がおぼろげながらではありますが判りました。

f:id:ken2017:20201015124545p:plain

何が原因だったかというと、一言で言えば複数出力に対応したモデルを作ることができなかった、ということです。
なんだ、って思われるかも知れませんが、結構奥が深い。
tensorflow + kerasでのモデルの作り方には下の記事にあるように大きく分けて3種類のやり方があります。

www.atmarkit.co.jp

Sequencialモデル、Functional API、Subclassingモデルです。
複数出力(速度とステアリング角度)への対応ということもあり、当初はSubclassingモデルを使ってのモデル構築に挑みましたが成功せず、でした。
色々やってみましたがエラーを無くせませんでした。
では、ということでFunctional APIでのモデル構築に挑みました。
ここでも複数出力対応の壁に行手を阻まれました。
下の記事なども参考にしてやってみましたが上手くいきませんでした。

note.nkmk.me

qiita.com

qiita.com諦めるしかないのか、と思っていましたが、どんくさいやり方でもいいと割り切り、思いついたのが、単独出力の学習を連続で行うというやり方。
Chainerでの学習は、一つのモデルの中に2つの出力への対応の仕組みを組み込んでいました。
tensorflow + kerasでも実現したかったのですが、実力伴わずで、速度用とステアリング角度用のモデルをそれぞれ用意し、それを同じ入力を使って連続して学習させるというスタイルに変えました。
単一出力対応のSubclassingモデルを作りました。
一つの学習モデルの原型を別の名前で2回コンパイルすることで2つのモデルを作っています。
コンパイルした2つのモデルを速度の学習とステアリング角度の学習に使うことで学習済みモデルを2つ作ります。
ちょっと、どんくさいやり方ではありますが、できないよりはいいだろうと思い、これでいくことにしました。
現在、学習実施中です。
学習自体は順調に進んでいますので、週末か来週にはSelf-drivingに入りたいと思います。
但し、来週は、オンラインでの仕事が4日入っているので時間的な制約がありますが。
また、本日、手配していたOculus Quest2が届くので遊んでしまいそうです。

まあ、こういう時があっても良いでしょう。
えっ、おもちゃ買いすぎって? そうですね、反省です。
でもね、ボケ防止にはうってつけです。

では、また。

 

プライバシーポリシー お問い合わせ