遅延畳み込みニューラルネットワークを防止する方法は?私はKERASでトレーニングした後、「怠惰なCNN」で終わります。入力が何であれ、出力は一定です。問題は何だと思いますか?怠惰な畳み込みニューラルネットワークを防ぐには?
私はNVIDIAのセルフドライブカーのエンドツーエンドラーニングの実験を繰り返そうとしますthe paper。絶対に、私は本当の車を持っていませんが、Udacityのsimulatorです。シミュレータは、車の前景に関する図を生成します。
CNNは姿を受け取り、それがトラックに車を維持するために舵角を与えます。ゲームのルールは、シミュレートされたクルマの走行を安全に保つことです。それほど難しいことではありません。
奇妙なことは、KERASでトレーニングした後、怠惰なCNNで終わることがあります。これは一定のステアリング角度を与えます。シミュレートされた車はトリックを外しますが、CNNの出力には変化はありません。特に、層がより深くなる。 CNNはthe paperです。
このようなCNNを使用すると、トレーニング後に便利なモデルが得られます。
model = Sequential()
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3)))
model.add(Cropping2D(cropping=((70,25),(0,0))))
model.add(Conv2D(24, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(36, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(48, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(50))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('sigmoid'))
model.add(Dense(1))
しかし、深いCNNを使用すると、遅延CNNを受け取る機会が増えます。 具体的には、NVIDIAが好きなCNNを使用すると、トレーニングが終わるたびに怠惰なCNNが届きます。
model = Sequential()
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3)))
model.add(Cropping2D(cropping=((70,25),(0,0))))
model.add(Conv2D(24, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(36, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(48, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(64, 3, strides=(1, 1)))
model.add(Activation('relu'))
model.add(Conv2D(64, 3, strides=(1, 1)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1164))
model.add(Activation('sigmoid'))
model.add(Dense(100))
model.add(Activation('sigmoid'))
model.add(Dense(50))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('sigmoid'))
model.add(Dense(1))
Iは畳み込み層のための「relu」を使用し、完全に接続された層の活性化機能は、「シグモイド」です。私は活性化機能を変更しようとしますが、効果はありません。
私の分析があります。私はプログラムのバグに同意しません。なぜなら、同じコードと簡単なCNNで車を運転することができたからです。理由は、シミュレータまたはニューラルネットワークの構造だと思います。実際の自走車では、舵角であるトレーニング信号にノイズが含まれているはずです。そのため、運転者は実際の車道にまだ車輪を保持していない。しかし、シミュレータでは、トレーニング信号はきれいです。操舵角のほぼ60%はゼロです。オプティマイザは、CNNの出力をゼロに近づけることによって簡単にジョブを実行できます。オプティマイザも怠惰だと思われます。しかし、このCNNの出力が本当に必要なときには、ゼロも与えます。だから、私はこれらのゼロステアリング角度に小さなノイズを加えます。怠惰なCNNを取得する機会は少なくなりますが、それは消えていません。
私の分析についてどう思いますか?私が使用できる他の戦略はありますか? CNNの研究の長い歴史のなかで、同様の問題が解決されたのかどうか疑問に思っています。
リソース:
関連するファイルはGitHubにアップロードされています。これらのファイルを使って実験全体を繰り返すことができます。
関連ファイルは[GitHub] https://github.com/BlueBirdHouse/CarND-Behavioral-Cloning-P3/にアップロードされています。これらのファイルを使って実験全体を繰り返すことができます。 –
コメントスペースを使用して質問を更新しないでください。代わりに投稿を編集してください – desertnaut