こんにちは、このPythonチュートリアルへようこそ。
大丈夫だから、私たちの前に土壌があるのはとてもエキサイティングです。
ニューラルネットワークのアーキテクチャを作成することから始めます。ニューラルネットワークはAIの中心にあり、90歳で再生するアクションを返します。
だからこれをやりましょう。
私たちのニューラルネットワークを客観的にしたいので、私たちはそれをクラスにします。
はるかに便利だからです。
あなたはクラスが私たちが作りたいもののモデルだと分かっています。
私たちはニューラルネットワークを構築したいと考えており、クラスにすべて含まれる何らかの指示をする必要があります。
このクラスでは、2つの機能を実現します。
まず、クラスを作るときに常に出てくる関数であるinit関数。
基本的には、ニューラルネットワークであるオブジェクトの変数を定義します。
グローバル変数ではなくオブジェクトに付随する変数を知っています。
入力層のコード化されたベクトルに5つの次元があるので、入力層を定義することがわかっている新しいネットワークのアーキテクチャーを定義する関数です。
次に、いくつかの隠れた層を定義します。
たぶん、あなたは1つの隠れた層から始めるでしょう、そして、あなたはニューラルネットワークの他のいくつかのアーキテクチャを試みることを歓迎するでしょう。
そして、もちろん、私たちは毎回再生できるアクションを含む出力レイヤーを完成させます。
これはまさにこの機能でやることです。
そして、私たちはクラスの中で、フォワード関数であり、ニューラルネットワークのニューロンをアクティブにする関数になる別の関数を作ります。
これが信号をアクティブにすることがわかっているので、純粋に非線形の問題を扱っているため、整流されたアクティベーション関数を使用します。この整流された関数は線形性を破壊します。
しかし、ほとんどの場合、このFord関数はネットワークの出力であるq値を返すように機能しています。
しかし、私たちはそれぞれの行動に対して1つの重要な価値を持っています。
後で、キー値の最大値を取るか、ソフトMaxメソッドを使用して最終的なアクションを返します。
私たちはそれを後で見るでしょう。
したがって、このチュートリアルでは、init関数を実装することから始め、次の関数はforward関数を実装します。
だからこれをやりましょう。
まずクラスを紹介する必要があります。
だから私たちはクラスで始まり、私たちはそれをネットワークと呼ぶことができるクラスに名前を付けます。
そして、このネットワーククラスでは、継承と呼ばれるオブジェクトプログラミングテクニックを使用するつもりです。これは、親クラスのすべてのツールを継承することです。
私たちがしようとしている私たちのネットワーククラスは、より大きいクラスの子テストです。
そしてそのモジュール。
ですから、このモジュールクラスのすべてのツール（もちろん、ニューラルネットワークを実装するツール）を継承するだけです。
これは、オブジェクト指向プログラミングの非常に強力で進化的なトリックです。
そして今、私たちはこのモジュールの親クラスから継承しています。
今、クラス内に入る準備が整いました。
私たちは2つの機能を作っており、エンド機能から始めているので、私は実際にenterを2回押しています。
init関数はこのように2つの名前をつけなければなりません。
そして、やはりこれはPythonの構文であり、私たちはそれをどうやってやるのかということを強調しています。
それから、議論をする必要があります。
だから私たちには3つの議論がある。
最初のものは、実際に自己と自己である強制的な議論です。
私たちが作ろうとしているこのクラスから作成されるオブジェクトを指すそれに関する謎はありません。
私たちはこのクラスを作っていることを知っています。
それは、我々が構築したいこのニューラルネットワークのいくつかのモデルのようなものです。
そして、クラスが準備ができたら、私たちが望むようにネットワークで多くの人を作ることができます。
これらの新しいネットワークのそれぞれは、このクラスのいくつかのオブジェクトになります。私たちは必要な目的のためにこのオブジェクトを使用しますが、オブジェクトの変数は何か、Spudisはこの自己を使ってオブジェクトを参照しています。
だから私は自分のオブジェクトから利用可能なものを使いたいときは、変数の前にselfを使って、これがオブジェクトの変数であることを指定します。
そうです、最初の議論です。そして、入力ニューロンの数と出力ニューロンの数である2つの他の引数があります。
したがって、入力ベクトルは5つの次元から3つの信号プラス方向とマイナス方向、つまり環境の1つの状態を表す符号化された値のベクトルを持つため、入力ニューロンの数は入力サイズと呼ばれ、実際には5です。
これらの5つの値は、環境の状態を表すのに十分です。
私たちは、値が小さいかそれ以上の値を考えていたかもしれませんが、それは私が試したものです。実際には、私たちが実際に私たちの目の前にあるものから、そして、
あなたは、私たちが3つのセンサーで完全に自己駆動できるGoogleの車の上部にある信号のような知っている360信号のために行くことができた車を運転していることを知っています。あなたが到達しようとしていた目標を把握しておいてください。
そして、我々はもちろん、行動に対応する私たちのネットワークの出力ニューロンを持っており、私たちは3つの可能なアクションがまっすぐに行くか、または右に行くことがあります。
それで、私はそれを行動と呼ぶつもりで、そのうち3つがあります。
大丈夫。
これまでは入力に名前を付けるだけで、ニューラルネットワーク内で条件を実行するためにこれらのバレーボールを使用します。
そして、あなたはトーチのトリックで別のものを使うことから始めます。このトリックは、モジュールから実際に継承する関数であるスーパーファンクションです。
そのため、継承を使用してモジュールを継承する必要がありました。
これは初めて使用されます。
したがって、基本的には、このスーパートリックスーパーファンクションを使用するだけで、より効率的なモジュールのツールを使用できるようになります。
スーパーファンクションの内部では、まずネットワークを指定するだけです。
これはモジュールの親クラスから継承されているため、私たちのネットワークchulクラスです。
そして、私はちょうどそれを追加して、このような関数の中に私たちがそれをどのように指定したのかを正確に示しています。
そうだよ、ちょうど私が持っているすべてのツールを使うことだよ。
そしてそのモジュールでは、入力レイヤーを指定する次のステップに進むことができます。
ですから、基本的には、オブジェクトに付加される新しい変数を導入することです。この変数には入力ニューロンの数が含まれます。
入力サイズと混同しないように入力サイズはend関数の引数です。
しかし、それはオブジェクトに付けられた変数ではなく、オブジェクトにアタッチされている変数です。
まあ私が先ほど触れたように、代わりにオブジェクトにアタッチされるように指定する必要があるので、自己学習を使用して、オブジェクトにアタッチされた最初の変数に名前を付けます。
したがって、入力と同じ名前を付けることができます。
入力サイズと呼ぶことができ、引数と入力サイズの関数が等しいと言うことができます。
大丈夫。
ネットワーククラスからオブジェクトを作成するたびに、私は入力サイズを指定しています。たとえば、5を入力しています。
ここには5があります。したがって、この入力サイズは5になるため、オブジェクトの入力サイズ変数の値は5になります。したがって、新しいネットワークには入力レイヤーに5つの入力ニューロンがあります。
大丈夫。
そして、それはオブジェクトにアタッチする他の変数と同じです。
あなたが推測したように、これは出力ニューロンの数の変数になるでしょう。
そして、私たちは私たちのオブジェクトを自分自身で取って、次にそれを呼び出すオブジェクトのこの第2の変数に名前を付けます。
これは、出力ニューロンの数であるアクションの数を考えると、ここではこの議論と同じです。
それで、私たちは実際にアクションと同じに設定し、アクションは3に等しくなります。
したがって、オブジェクトとネットワークに接続された変数とアクションは、3の値を取得します。
実際には、ここでは未定義の名前を示す警告が表示されます。
それでは、ここでは私たちが使用しているからです。
そして、ショートカット。
ここではショートカットを使用する必要があります。
そして、私たちのtorche開始とMudgalのために、それは消えるでしょう。
さあ。
完璧。
今、新しい警告があります。ここでの警告は、私たちがインポートするものがまだ使用されていないことを指定することだけです。
それは後で使用することになります。
さて、オブジェクトのために定義したい別の2つの変数があります。
そして、これは私たちのニューラルネットワークの異なる層の間の完全なつながりです。
だから、今私たちは、世界でただ一つの頭で構成されたニューラルネットワークを作りたいと思うので、二つの完全な接続があります。
入力レイヤーと隠れレイヤーの間に最初の完全な接続が1つあります。
そこにある丘と出力層との間の1秒間の完全な接続。
最初の完全な接続から始めましょう。
私たちはそれをSE1と呼ぶつもりです。そして、私はここで自分自身を使用してFCの問題を解決するための変数を指定します。
FCと同等のもの。
そして、我々はN inモジュールを使い、linear
Rと呼ばれる関数を使うつもりです。それは、ニューロンと入力層の間の完全な接続を、隠れたニューロンへと完全に接続することです。
そして、私は完全な接続によって何を意味しますか？
つまり、入力層のすべてのニューロンは、すべてここのここのすべてのニューロンに接続されます。
そして、この接続を作るために、我々はいくつかの議論をする必要があるこの線形関数を使います。
そして、あなたが見ることができるように、これらの議論は機能にあります。
これは、接続しようとしている2番目のレイヤーのニューロンの数であるフィーチャを接続する最初の法則のニューロンの数です。それは、隠れたレイヤーであり、自転車の真であるレイヤーです。
だから自転車は本当のバイアスを持つためにはデフォルト値を維持します。実行するウェイトにはウェイトが付けられているだけでなく、各レイヤーにはバイアスが1つあります。
それでは、入力する必要があるものを見てみましょう。
したがって、フィーチャの最初の引数は、入力レイヤの入力ニューロンの数です。
そしてそれはどこにあるのですか？
それは実際には不正確です。
それは私たちのinit関数の引数です。これは、後で3つのシグナルの向きとMannusの向きと戦うことができます。
だからここに行く。
最初の引数とputの大きさ、次に2番目の引数が外形であるとき、それは2番目の層に入れたいニューロンの数です。
第1の層に完全に接続される第2の層。
そして今、疑問は、この隠れた層にいくつのニューロンが欲しいかということです。
さて、私は多くのパラメータトレーニングを行いました。
私はたくさんの実験をしました。
それが私たちがやっていることです。それは私たちが深くやっていることです。
一般的に、私たちは特定の問題のための最良のニューラルネットワークが何であるかを見るために多くの実験を行います。
そして、私は多くの価値を試して、私は隠された層で30
30の実行を選ぶことになりました。そして、あなたはこの数でかなり良い結果を得るでしょうが、ニューラルネットワークのアーキテクチャを自由に変えてください。
自由に遊んでください。
ここではニューロンの数を変えるだけでなく、さらにいくつかのレイヤーを追加して、さらに良い車を得ることができますが、30個のヒンダーニューロンが良いニューラルネットワークと良い原因になるでしょう。
それが私たちが行くものです。
そしてそこに行く。
この線形関数との最初の完全な接続があります。
入力層と隠れた脚の間を接続します。
そして今、隠れた層と出力層との間の完全な接続である第2の完全な接続を作る時間があります。
だからそこに行く。
私たちはC2でこの2番目の完全な接続を呼び出すつもりです。
そこに行く。
そしてこれはSaphirを使ってもっと多くのオブジェクトに利用できます。
そしてもう一度使用します。
実際にはこれをコピーすることができます。なぜなら、N inモジュールを使用してから、一次関数を使用するためです。
しかし、最初に議論を変える必要があります。
これは、接続の最初のレイヤーで持っているニューロンの数です。
それはそこに隠されています。
したがって、それは30であり、次に第2引数は接続の第2層のニューロンの数であり、出力層およびそこにある出力に対応する。
実際のニューロンは3つの可能なアクションがあるので3つになりますが、これまでに定義した名前を使用する必要があります。
これはinit関数の引数の名前なので、ここで入力してアクションを実行します。
まず最初に、私たちのタプル接続が再あります。
第二に、イスラエルのあらゆる機能があります。
つまり、ネットワーククラスからオブジェクトを作成するたびにオブジェクトを初期化します。
そして、オブジェクトを作成するとすぐに、これらの変数の変数はすべてここでサイズと反応を入力します。
あなたと2つが定義されます。
それで、私たちが作成するオブジェクトごとに動物ネットワークのアーキテクチャを得る方法です。
各オブジェクトは、5つの入力ニューロン30個の隠れニューロンと3個の出力ニューロンのニューラルネットワークに対応する。
だからそこに行く。
我々はこの第1の機能を終了し、順関数であり、整流器活性化関数を用いてニューラルネットワークのニューロンを活性化するために使用される第2の関数に移行することができ、主に最終的には1つのネットワークのみの出力。
ですから、私は次のチュートリアルでそれをするまで待つことはできません。