こんにちは、このPythonチュートリアルへようこそ。
さて、再生メモリクラスに実装する最後の機能があります。
これは単純な関数であり、当然、私たちの記憶からランダムサンプルを得ることです。
したがって、この関数はこれらのランダムサンプルを返します。
さて、それに入るように。
私たちはそれを簡単なものと呼ぶつもりです。
さあ。
この関数は2つの引数を入力として受け取ります。
最初の1つはいつものように私たちの将来のオブジェクトはメモリクラスを再生し、2番目の引数はあなたが推測しようとすることができます。
さて、我々は固定サイズのいくつかのサンプルを取っているので、サンプルのサイズを選択する必要があり、より正確にはそれをバッチサイズと呼びます。
これは、2番目の引数バッチサイズに与える名前です。
そしてそこに行く。
2つの議論があり、今では単純な関数を実装することができます。
だから私はちょうど少し技術的になるつもりですが、私は説明するために全力を尽くすつもりですあなたに警告したいと思います。
ですから、サンプル変数を作成することから始めます。
これはメモリのサンプルを含む変数に過ぎません。
大丈夫だからシンプルです
そして今、これらのサンプルをどのように入手するのでしょうか。
まず最初に、私たちは私たちの記憶からサンプルを得ているので、私たちは記憶を取らなければなりません。
サンプルにはバッチサイズのElonが含まれているので、おそらくバッチサイズが必要になります。
だから、バッチサイズが必要な記憶が必要です。そして、これらのサンプルの適切なフォーマットを得るためにtorcheやbisonのトリックが必要になります。
だから、私は何をしようとしているのですか？私はコード行を書くつもりです。次に、その要素を要素ごとに説明します。
だからそれをやりましょう。
私はzip関数をとることから始まります。私はすぐにそれが何をしているのかを説明しようとしています。
この関数の中で私は星を追加します。
私もそれを拡張するつもりです。
あなたが推測しているように、スターとランダムは、私たちがここでインポートしたランダムライブラリです。
これが、私たちがランダムなサンプルを取っているので、このランダムなライブラリをインポートしなければならなかった主な理由です。
だから、このランダムなライブラリから、シンプルな関数を使うつもりです。
これは変数であり、これは関数なので、かっこを追加します。
そして、あなたが見ることができるように、サンプルは関数であり、最初の引数自体を見ることができるようにいくつかの引数を置かなければなりません。
そして実際には自己のことを言いますと、これは私たちのために私たちのリプレイメモリの私たちの将来のインスタンスオブジェクトのメモリセルフトークメモリに対応します。
だから私はここに自分の記憶を追加して、次に2番目の議論は、私たちの記憶からランダムに取ったベチュアナのサイズを推測したかもしれないし、バッチサイズの名前を付けたからです。
だから二番目の議論はバチェッとするつもりです。
大丈夫。
だから、コード行がタイプされ、それが何をしているのかを説明するつもりです。
だから最初に、このランダムなドット単純関数を使って、そのサイズの固定サイズのメモリからいくつかのランダムサンプルを取ります。
それは理解できる。
しかし、このZippのスター機能は何をしますか？
まあそれについての謎はありません。
それはちょうど変形機能のようなものです。
例えば、私はそれを取り除くつもりであることを説明するためにちょっとここに来てください。
例えば、次のような要素のリストがあるとします。
最初の1 2 3。
そして2番目の要素。
四、五、六。
そこで、3つの要素の1つ2つの3つの要素の2つの倍数の一覧があります。
さて、私はそれに星を持つzip関数を適用する場合。
まあ、ジップスターのリストは新しいリストと同じになるだろうが、異なる形と異なる形のものは、2つの3つのものと5つのもののために1つになるだろう。
大丈夫。
それだけでそれは何をしているのですか？
あなたのリストを改造するだけです。
これでZippのスターリストの内容を理解できるようになりました。
さてなぜそれをやらなければならなかったのか説明しましょう。
あなたが理解しているように、私たちはイベントをメモリに追加し、イベントはフォームを持ちます。
まず、状態、次に行動、そして報酬。
しかし、私たちのアルゴリズムでは、実際にこのサンプルを次の形式にしたいと考えています。
フォーマットは、3つのサンプルから構成され、状態の1つのサンプル、アクションの1つのサンプル、および報酬の1つのサンプルから構成される。
たとえば、この1〜3が状態1のアクション1であるとしましょう。
私たちは1つをしてから2つを行動に移したいと思っていました。私たちが望むものは、状態1と状態2のそれぞれのバッチに対して1つのバッチです。
1つはアクション2のアクション1と3つ目のマッチで、私たちは1つで、2つはマッチです。
これは、次に予想される形式です。それで、これらのバッチをパイに入れて、恐ろしいインパクトに向かってラップすることになります。これは、テンソルとグラジエントの両方を含む変数です。
そしてそれは、テンソルと勾配を含むひどい構造の中で、強いものに関して差別化できるようにテンソルに関して区別することができるようにするためです。
ピー・トーチの仕組みはここでも同じです。
要約すると、各状態のアクションと報酬ごとに1つのバッチを作成してから、これらの各バッチを別々のバイトに分割して配置します。これらのバッチはそれぞれが勾配を持つHorribleで、最終的には区別できますそれぞれの
これがZipp関数の目的です。
だから私はこのコメントを削除してみましょう。
そして今、私たちがしなければならないことは、サンプルを返すことだけです。
私が説明したように、単純な理由からサンプルを直接返すことはできません。それは、サンプルをtorcheによって実行可能にすることです。
各サンプルに対してこれを行うには、マップ関数を使用します。このマップ関数は、サンプルからテンソルと勾配を含む拷問変数へのマッピングを行います。
ですから、このマップ関数にはいくつかの引数があります。
最初の引数は関数であり、この関数はサンプルをいくつかのtorche変数に変換する関数になります。
第2引数は、この関数を適用したいものです。
だから、それはこの関数の議論になり、したがってそれは何になるでしょう。
それはもちろんサンプルになるでしょう。
だからここの第二引数はシンボルになるでしょう。
しかし、それから我々が適用したい機能を定義しましょう。
それぞれのシンボル。
だからここで関数を定義するには、関数にラムダを呼び出す名前を与える必要があります。
これはちょうど名前であり、この関数の変数になるXをLendaに与えます。
だから、それは単なる名前であり、変数のために与えることです。
そして、ここでは、このラムダ関数が返すことを望む関数の式を与え、サンプルがトーチ変数に変換され、これを行うようなものになっていることをよく見ています。
これまでのチュートリアルではすでに説明しました。
さて、我々はそれらのVoivode機能を持っています。
ボイスは機能し、トーチダンサーからセンサーと最高のものを含む変数に変換します。
ですから、ここで最初に追加するのは、XをXに変換するつもりの可変変数です。これは、Xがサンプルに適用される単純なものになるためです。
しかし、それでは、私たちが実装する必要がある最後の技術的なことは、サンプルに含まれている各バッチに対して、アクションのバッチとそれを連結しなければならない他のアクション各州に対応する最初のエンジンまで。
なぜこの連結をしなければならないのですか？
すべてがうまく整列しているだけです。
つまり、各行にアクションを記述し、報酬は同じ時間tに対応します。 最終的には、バッチのリストがすべて整列され、それぞれのバッチはVoivodに向かっています。
では、どうやってこの連結を作るのですか？
さて、トーチライブラリーのcat関数を使用する必要があります。
そこでここでXに加えられるトーチを追加しますが、この関数では、その連結を作成する次元を指定する必要があります。
私が指摘したように、これはインデックス時代を迎えた初めてのエンジンです。
ここで関数を用意してLunda関数を用意して、最初のエンジンに関してサンプルを連結し、ついでテンソルとグラジエントの両方を含むいくつかのtorche変数にセンサーを変換して、後でデータの重み付けをするために差別化できるという意味でのキャストに適用します。
この機能は準備が整っています。
そして、ここにmap関数の第2引数があります。
この関数をどのように適用したいかを指定する必要があり、それはすべてのサンプルにあります。
そこに行く。
このラムダ関数をすべてのサンプルに適用して、最終的に各一致が実行可能なPIトーチである一致リストを取得します。
そうですね、それはかなり技術的でしたが、今は少なくともすべてがうまくいくでしょう。
この手法を使いたいと思っています。
その後、私たちはここでそれを使用します。ここでは技術的な詳細を深く理解したくない場合は、トーチで人工知能を作りたい場合は、この3行のコードを単純なメモリにコピーするだけですそれはあなたが望むように。
しかし今や良いニュースは、このリプレイのメモリクラス体験のリプレイが完了したことです。リプレイが実装され、セキュリティモード全体になる次の最後のクラスに進むことができます。
したがって、このモデルでは、リプレイを経験し、残りのすべてのセキュリティアルゴリズムを経験するネットワークを持つことになります。
だから、はるかに大きなクラスになるでしょう。
私たちは約10の機能を作っていきますが、それは何が起きているのかをよりよく理解できるように、このステップを段階的に実行しているからです。
だから私は私たちのセキュリティモデルを実装するのを待つことができません。
そしてそれまで。