こんにちは､ このPythonチュートリアルへようこそ｡
さて､ このinit関数の5つの変数を定義する必要があります｡
それが､ 3つのコンボリューションと2つのフル・コネクションです｡
では､ まず1つ目から｡
コンボリューションは､ 入力画像にコンボリューションを適用するものである｡
それが原画なんですね｡
そして､ このコンボリューションを作ることで､ すべてがとてもシンプルになることがおわかりいただけると思います｡
さて､ 私たちがしなければならないことは､ 実際にある特定のクラスのオブジェクトを作ることです｡ このクラスはRNから取られ､
そしてクラスはできます｡
DHに｡
なぜなら､ 2つのDH画像を扱っているからです｡
そして今度は､ ご覧のように､ いくつかの引数を入力する必要があります｡
1つ目はチャンネルに入れましょう｡
2本目はチャンネルを外しました｡
3つ目はカーネルサイズ､ 残りは破壊してダイレーション群とバイアスを水増しする｡
そして､ これら全てにデフォルト値を設けています｡
だから､ 入力はしない｡
初期値のままにしておきます｡
しかし､ 重要なのは､ チャンネル､ オルトチャンネル､ コルサイズ､ この3つの引数です｡
ということで､ 何に対応しているかわかりますか？
簡単に言うと､ inチャンネルがコンボリューションの入力に､ altチャンネルがコンボリューションの出力に対応します｡
では､ チャンネルでは､ どうなっているのでしょうか？
まあ､ 簡単に言うと､ 画像のチャンネル数になりますね｡
また､ 基本的にモンスターを認識するために色は必要ないので､ 実際には白黒の画像で作業することになります｡
AIは白黒でもモンスターを認識する能力が全然あるので､ 色は必要ないんです｡
形状で認識されるだけなので､ 1チャンネルで使用します｡
つまり､ 1チャンネルは白黒画像のとき､ 3チャンネルはカラー画像のときです｡
したがって､ モノクロの画像を扱うので､ チャンネルは1に等しくなります｡
それから､ 私たちのチャンネル｡
つまり､ チャンネルは､ この畳み込み層の出力である畳み込み層に入れたい画像と同じになるわけです｡
これは､ 元画像から検出したい特徴の数と同じです｡ 検出したい特徴ごとに1枚の画像を作成するので､
基本的にどのように機能するかはご存知の通りです｡
入力画像に1つの特徴検出器を適用して､ 入力画像中の特定の特徴を検出するため､ 出力画像の数が少なくなるのです｡
ここには､ 検出したい特徴の数が書かれています｡
そこで今度は､ いくつの特徴を検出するかが問題になります｡
まあ､ 一般的には32個の特徴量検出器から始めるのが普通でしょう｡
そして､ この最初の畳み込み層で32枚の画像を処理することになるのです｡
つまり､ 入力は1枚の白黒画像､ 実画像なのです｡
そして､ 第1畳み込み層の出力は､ 32枚の処理済み画像である｡
処理とは､ もちろん､ 入力画像に畳み込みをかけ､ 検出された特徴を持つ32枚の新しい画像を得ることです｡
そして､ カーネルサイズを指定する必要がある｡ これは､ 元画像を貫く正方形の寸法にほかならない｡
そして､ 一般的には2×2､ 3×3､ 5×5のいずれかを使用しますが､ 最初の1つは5×5の特徴量検出器を使用することにします｡
それが､ 5×5次元になる特徴検出器です｡
そして､ 次の畳み込み層のために､ このカーネルのサイズを小さくするのです｡
といえば､ まさにこれからです｡
これをコピーして2つ目のコンボリューションを定義することになる｡
それゆえ､ 今ここでそれを基本としています｡
とても面白くて､ とても簡単です｡
ドミノ倒しのようなものです｡
第二畳み込み層の入力チャンネルは､ 第一畳み込み層の出力チャンネルである｡
つまり､ ここの出力数32は､ ここの入力数32と同じ数なのです｡
そして､ この2回目の畳み込みの入力畳み込み層に32枚の画像を入れているからです｡
そして､ この第2畳み込み層に第2畳み込みを適用して､ 第3畳み込み層を返す｡
で､ 今度は､ 同じように新しい画像をいくつ作るかということですが､ 32枚の画像を新たに作りましょう｡
32は､ 実は畳み込みニューラルネットワークでは非常によく使われる数字です｡
アーキテクチャを見ると､ 32が多く見受けられます｡
そして､ カーネル側では､ カーネルサイズ､ つまり､ 特徴検出器の寸法を小さくする必要があります｡
そして､ 今度は5つの目から4つの目､ あるいは3つの目になり､ さらに小さくなっていくわけです｡
わかりました｡
これで2回目の畳み込みは完了です｡
入力として､ 32枚の処理画像を受け取り､ それぞれが元の入力画像の最初の特徴を検出する｡
そして､ この特徴検出器の小型化により､ 32枚の画像を新たに作成することができます｡
そして､ 今度はこれをさらに推し進めましょう｡
そこで､ これをコピーしてここに貼り付け､ 3つ目のコンボリューションを作成して､ いくつかの特徴を検出することにします｡
これで､ 入力チャンネルは同じになりました｡
ここで､ 畳み込み接続の左側にある入力画像の数と､ その前の畳み込み接続の右側にあった処理画像の数である｡
それが32歳なんですね｡
だから､ 私たちは32をここに置いているのです｡
それは完璧だ｡
そして今度は､ やはり新しい画像を何枚検出するかということです｡
64枚の出力､ 処理された画像に対して､ 今64枚をそこに取り込もうとしているのです｡
もちろん､ 今度はカーネルサイズを小さくして､ 2つ取るんです｡
これは畳み込み層の非常に古典的なアーキテクチャで､ 画像内の特徴を高度に検出するのに非常に効率的です｡
わかりました｡
3つの畳み込み層ができたので､ 3つの畳み込み接続のおかげで､ 今度は私が思い出させた2つの完全な接続を得る時が来ました｡
64回をすべて平らにして得たこの巨大なベクトルを､ 32回×32回にする｡
繰り返しになりますが､ これらの畳み掛けから得たイメージです｡
そこで､ これらの画像のすべてのピクセルを平坦化し､ 新しい完全連結ニューラルネットワークの入力となる1つの巨大なベクトルを作成したのです｡
そこで､ まずこの巨大なベクトルと隠れ層の間を完全に接続し､ 次に隠れ層と､
それぞれが可能な行動のq値に対応する出力ニューロンからなる出力層の間を完全に接続する必要があるのです｡
そこで､ この2つを完全に結びつけてしまおうというわけです｡
その方法を知っているんですね｡
それこそ､ 自動運転車のためにやったようなものです｡
では､ もう1度やってみましょう｡
まず､ RNモジュール､ そしてリニアクラスです｡
そして､ （ ）内は､ まあ､ 同じ最初なんですけどね｡
入力特徴量､ つまりその数を入力し､ 次に出力特徴量を入力する｡
それで､ 最初のフル接続のための入力機能､ それは何になるのでしょうか？
これは､ 3つの畳み込み処理後の画像をすべて平坦化した後に得られるこの巨大なベクトルと､
存在するピクセル数に等しくなるんだ｡
それで､ この数字は何なのでしょうか？
実は､ ここにトリックがあるんです｡
この数字､ 実は難しいんです｡
実際には､ その数値を計算するための関数を作る必要があります｡
この数字を出すための変数がないんです｡
計算する必要があるのです｡
それゆえ､ これから何をするか､ 今､ 私たちが持たなければならないプログラミングの心構えを理解することが非常に重要です｡
この障害を克服するためには､ 今､ 何を考えなければならないかというマインドセットに持ち込もうとしているのです｡
というのも､ 最初に､ 「あれ､ フラット化したベクトルにこの数のニューロンがないんだけど､ どうしたらいい？
抜け出せないでいる｡
いやいや､ 実は今できることは､ このニューロン数を表す名前をここに入力するだけなんです｡
だから､ ニューロンの数ということにしています｡
ニューロンの数
そして､ このニューロン数という変数に､ 探しているピクセル数を返す関数を作るだけです｡
だから､ 全然できるんですよ｡
この変数を完全に入れることができます｡
まあ､ もちろんまだ存在しないので警告は出ますが､ その後に関数で作るので､
関数が後から来ても全然OKです｡
だから､ そういう障害が出たときに､ 典型的なプログラミングの考え方をしなければならないのです｡
まあ､ 足りないものを関数で作ればいいんだけどね｡
わかりました｡
そして､ アウトフィーチャーとアウトフィーチャー､ これは隠れ層のニューロンの数で､ 今回はあなた次第ということです｡
それは､ 作りたいニューラルネットワークのアーキテクチャに依存します｡
そうすると､ 良い数字から小さい数字へと順番に変わっていきます｡
ですから､ 例えば40ニューロンでもいいかもしれません｡
増やすようにすればいいのです｡
トレーニングのスピードが遅くないのであれば､ 増やしてみるのもよいでしょう｡
そうすれば､ 予測も改善されるかもしれません｡
でも､ まずは40から｡
その後に増やしていくかもしれませんね｡
わかりました｡
というわけで､ 最初のフル接続はこれで終了です｡
そして､ このページを下にコピーして､ 2回目の完全接続を行います｡
それが､ 隠れ層と出力層の接続です｡
そして､ この内側の特徴が前のレイヤーの外側の特徴になり､ それが40になるわけです｡
そこで､ ここに40を入れた｡
もちろん､ 隠れ層のニューロンの数は､ ニューラルネットワークの出力ニューロンの数と同じになります｡
そして､ 各出力ニューロンが1つのキー値に対応し､ 1つのキー値が1つのアクションに対応するので､ まあ､
ここでの出力ニューロンの数は､ もちろん､ アクションの数である｡
そして､ そのための変数が1つあり､ それがナンバーアクションです｡
そのため､ ここでは数字を入力しています｡
行動する｡
そして､ そこに行く｡
おめでとうございます｡
私たちはニューラルネットワークのアーキテクチャを定義しました｡
私たちのニューラルネットワークは､ 3つの畳み込み層と1つの隠れ層で構成されています｡
全部､ 大きなCNNとこれとで｡
CNNは､ AIが何をしなければならないか､ どこに行かなければならないか､ どこにシュートを打たなければならないかを知るために､
ゲーム内の特徴を検出します｡
そこで､ このステップに入ります｡
それが､ 最初に行われる非常に重要なステップです｡
さて､ 次のステップに進みますが､ それはもちろん､ このまだ足りないニューロンの数を求めることです｡
実は､ そのためにここで警告を発しているのです｡
ニューロン数未定義名ですが､ 心配ありません｡
では､ この巨大なベクトルに含まれるニューロンの数を返す関数を作り､ その数をnumber
neuronsと呼ぶ変数に入れることにしましょう｡
では､ 次のチュートリアルでこれをやってみましょう｡
それが､ 私たちの次のステップです｡
そしてそれまで､ お楽しみに｡
I.