Python は、オープンソースの ML ライブラリ Pytorch のおかげで、データ サイエンスと機械学習の主力言語として確立されました。 Pytorch の強力なディープ ニューラル ネットワーク構築ツールと使いやすさにより、データ サイエンティストの間で人気を博しています。人気が高まるにつれて、Tensorflow から Pytorch に移行する企業が増えており、今こそ Pytorch を使い始めるのに最適な時期です。 今日は、Pytorch がなぜ人気なのか、Pytorch の基本的な使い方を理解し、最初の計算モデルを作成するお手伝いをします。
PyTorch とは何ですか? PyTorch は、コンピューター ビジョン (武器を使用) や自然言語処理などのディープラーニング実装用のオープン ソースの機械学習 Python ライブラリです。これは2016年にFacebookのAI研究所(FAIR)によって開発され、それ以来データサイエンスやMLの分野で採用されてきました。 Pytorch は、Python にすでに精通しているユーザー向けに直感的なマシンを提供し、OOP サポートや動的計算グラフなどの優れた機能を備えています。 Pytorch は、ディープ ニューラル ネットワークの構築に加えて、GPU アクセラレーションにより複雑な数学計算にも適しています。この機能により、Pytorch はコンピューターの GPU を使用して計算を大幅に高速化できます。 このユニークな機能と PyTorch の比類のないシンプルさの組み合わせにより、PyTorch は Tensorflow に匹敵する最も人気のあるディープラーニング ライブラリの 1 つになりました。 PyTorch を使用する理由は何ですか? Pytorch が登場する前は、開発者は高度な計算を使用して、バックプロパゲーション エラーとノードの重みの関係を調べていました。より深いニューラル ネットワークでは、ますます複雑な操作が必要となり、機械学習の規模と容易さが制限されます。 今では、ML ライブラリを使用してすべての計算を自動的に実行できます。ML ライブラリは、あらゆるサイズや形状のネットワークを数秒で計算できるため、より多くの開発者がより大規模で優れたネットワークを構築できます。 Pytorch は、標準の Python と同様に動作することで、このアクセスをさらに一歩進めます。新しい構文を学習する代わりに、既存の Python の知識を使用して Python をすぐに使い始めることができます。さらに、Pycharm デバッガーなどの一般的なデバッガーなど、追加の Python ライブラリを Pytorch で使用することもできます。 PyTorch と TensorFlow。 Pytorch と Tensorflow の主な違いは、シンプルさとパフォーマンスのトレードオフです。Pytorch は学習が簡単です (特に Python プログラマーの場合)。一方、Tensorflow は学習曲線がありますが、パフォーマンスが優れており、より広く使用されています。
PyTorch の基礎 1. テンソル Pytorch テンソルは、すべての高レベル操作の基礎となる多次元配列変数です。標準の数値型とは異なり、テンソルは CPU または GPU アクセラレーション操作を使用するように割り当てることができます。 これらは N 次元の量に似ており、たった 1 行で Numpy 配列に変換することもできます。 テンソルには 5 つの種類があります。
すべての数値型と同様に、保存する必要があるメモリに適合する最小の型を使用する必要があります。 PyTorchはすべてのテンソルのデフォルト型としてFloatTensorを使用しますが、これを次のように使用することもできます。
2 つの FloatTensor を初期化します。
テンソルは、他の数値型と同様に、単純な数学演算で使用できます。
モバイル GPU の CUDA を使用してテンソルを処理することもできます。
Pytorch ではテンソルは行列なので、テンソルを設定して数値の表を表すことができます。
ここでは、テンソルが 2x2 の正方形になるように指定します。 vone() 関数を使用すると正方形が塗りつぶされ、 rand() 関数を使用すると乱数が塗りつぶされます。 2. ニューラルネットワーク Pytorch は、画像分類や畳み込みニューラル ネットワーク (CNN) などの分類モデルに優れているため、ニューラル ネットワークの構築によく使用されます。 ニューラル ネットワークは、接続され重み付けされたデータ ノードの層です。各レイヤーにより、モデルは入力データを最も一致するカテゴリに分類できます。 ニューラル ネットワークの性能はトレーニングによってのみ決まるため、モデルがすでに習得しているデータに基づいて、より難しいトレーニング データを生成する大規模なデータセットと GAN フレームワークが必要になります。 Pytorch は Torch.NN パッケージを使用してニューラル ネットワークを定義します。このパッケージには、ネットワークの各層を表すモジュールのセットが含まれています。 各モジュールは入力テンソルを受け取り、出力テンソルを計算し、それらを組み合わせてネットワークを作成します。 torch.nn パッケージは、ニューラル ネットワークのトレーニングに使用する損失関数も定義します。ニューラル ネットワークを構築する手順は次のとおりです。
以下は Pytorch のニューラル ネットワークの例です。
NN.Module は、これがニューラル ネットワークになることを指定し、2D 畳み込みを実行する 2 つの Conv2D レイヤーと、線形変換を実行する 3 つの Linear レイヤーでこれを定義します。 次に、前方伝播を前方に要約する forward メソッドを定義します。 Pytorch にはデフォルトで backward() 機能が含まれているため、逆伝播メソッドを定義する必要はありません。 今はわかりにくいかもしれませんが心配しないでください。このチュートリアルの後半で、よりシンプルな Pytorch 実装について説明します。 3. オートグラッド Autograd は、ニューラル ネットワークの動作に必要な導関数を計算するための Pytorch パッケージです。これらの導関数は勾配と呼ばれます。フォワードパス中、Autograd は勾配テンソルに対するすべての操作を記録し、テンソルとすべての操作の関係を見つけるために非巡回グラフを作成します。この一連の操作は自動微分と呼ばれます。 このグラフの葉は入力テンソルであり、根は出力テンソルです。 Autograd は、グラフをルートからリーフまでトレースし、連鎖律を使用して各勾配を乗算して勾配を計算します。 勾配を計算した後、導関数の値はテンソルの grad 属性として自動的に設定されます。
デフォルトでは、RESCEL_GRAD は FALSE に設定されており、PyTorch は勾配を追跡しません。初期化中に RESECT_GRAD を TRUE に指定すると、PyTorch は特定の操作を実行するときにその特定のテンソルの勾配を追跡するようになります。 このコードはYを見て、それが(x-1)(x-2)(x-3)から来ていることを知り、勾配dy/dx、3x^2 - 12x + 11を自動的に作成します。 この命令は、勾配の数値も解き、それを x の実際の値 3.5 とともにテンソル x に配置します。 勾配は3 (3.5 3.5) - 12 * (3.5) + 11 = 5.75になります。 > 画像出典: 著者 グラデーションはデフォルトで累積されるため、リセットしないと結果に影響する可能性があります。各勾配の後にグラフをゼロに戻すには、Model.zero_grad() を使用します。 4. オプティマイザー オプティマイザーを使用すると、モデル内の重みとバイアスを更新してエラーを減らすことができます。これにより、全体を再構築することなく、モデルの動作を編集できます。 すべての Pytorch オプティマイザーは Torch.optim パッケージに含まれており、各最適化スキームは特定の状況に合わせて設計されています。 torch.optim モジュールを使用すると、引数のリストを渡すだけで抽象的な最適化スキームを構築できます。 Pytorch には選択できるオプティマイザーが多数あるため、ほとんどの場合、ニーズに最適なオプティマイザーが見つかります。 たとえば、一般的な最適化アルゴリズムである SGD (確率的勾配降下法) を実装して、データを平滑化することができます。
モデルを更新した後、optimizer.step() を使用して Pytorch にモデルを再計算するように指示します。オプティマイザーを使用する場合、ループを使用してモデル パラメータを手動で更新する必要があります。
全体として、オプティマイザーは、データの重み付けを最適化し、必要に応じて再定式化することなくモデルを変更できるようにすることで、多くの時間を節約します。 5. PyTorch 計算グラフの使用 Pytorch とニューラル ネットワークをより深く理解するには、計算グラフを使用して練習することができます。これらのグラフは、本質的にはニューラル ネットワークの簡略化されたバージョンであり、システムの出力が入力によってどのように影響を受けるかを理解するために使用する一連の操作です。 つまり、入力 x は y を見つけるために使用され、次に y は出力 z を見つけるために使用されます。 > 画像出典: 著者 Y と Z が次のように計算されるとします。
しかし、出力 Z が入力 X によってどのように変化するかに興味があるので、いくつかの計算を実行する必要があります。
これを使用すると、x = 3.5 を入力すると z = 14 になることがわかります。 各テンソルが他のテンソルに関してどのように定義されているか (y に関して x、z に関して、他のテンソルに関して z、y に関してなど) を知ることで、pytorch はこれらのテンソルがどのように接続されているかを示す図を作成できます。 > 画像出典: 著者 この図は計算グラフと呼ばれ、Pytorch が舞台裏でどのように動作するかを理解するのに役立ちます。 このグラフを使用すると、各テンソルが他のテンソルの変化によってどのように影響を受けるかを確認できます。これらの関係は勾配であり、トレーニング中にニューラル ネットワークを更新するために使用されます。 これらのグラフは、手作業よりも Pytorch を使ってプロットする方がはるかに簡単です。舞台裏で何が起こっているのかがわかったところで、試してみましょう。
これにより、手作業で見つけたのと同じように Z = 14 が見つかります。 6. Pytorch を使った練習: マルチパス計算グラフ 単一の関係を持つ計算グラフを確認したので、より複雑な例を試してみましょう。 まず、入力として使用する 2 つのテンソル a と b を定義します。グラデーションを下の線まで縮小できるように、必ず RESECT_GRAD = TRUE を設定してください。
次に、入力とニューラル ネットワークの各層 (x、y、z) との関係を設定します。 z は x と y によって定義され、x と y は入力値 a と b を使用して定義されることに注意してください。
これにより、Pytorch がデータ間のすべての関係を理解するために追跡できる関係のチェーンが構築されます。 これで、z から a へのパスをたどることで、勾配 Dz/da を解くことができます。 パスは 2 つあり、1 つは x を経由し、もう 1 つは y を経由します。これらに従って、両方のパスの表現を加算する必要があります。これは、a から z への両方のパスが z の値に寄与するため、理にかなっています。 Chain の規則の計算を使用して DZ/DA を解くと、同じ結果が得られます。 > 画像出典: 著者 最初のパス X では 2*2 が得られ、2 番目のパス Y では 3*10A が得られます。したがって、Z が 4+30A で変化する速度です。 A が 22 の場合、DZ/DA は 4 + 30 * 2 = 64 になります。 z からの逆伝播を追加し、a の勾配 (または導関数) を求めることで、これを確認できます。
学習の次のステップ おめでとうございます。これでクイックスタートが完了し、Pytorch とニューラル ネットワークの初心者になりました。計算グラフを完成させることは、ディープラーニング ネットワークを理解する上で重要な部分です。 高度なディープラーニングのスキルとアプリケーションについて学習する際には、次の点について検討する必要があります。
楽しい学習を! オリジナルリンク: https://ai.plainenglish.io/pytorch-tutorial-a-quick-guide-for-new-learners-180957cb7214 |
>>: 再ハッシュ: ブルームフィルタアルゴリズムの実装原理を理解する
まとめディープフィードフォワードシーケンスメモリネットワークに基づく音声合成システムを提案します。こ...
2020 年は混乱と混乱が共存しましたが、騒動は落ち着き、小売業者は新年に再編成し、新たな常態に向か...
米国国土安全保障省および米国国税庁の元最高情報責任者であり、現在は Learning Tree In...
Gartner, Inc. は、人工知能のデータ需要を満たすために急速に進化している分野であるデータ...
[[353439]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...
この記事では機械学習入門、ディープラーニング、自然言語処理などを網羅した関連講座10選を紹介します。...
「まあまあ、今のところ需要はないんですが、ありがとうございます。」今週、子供向け番組を「販売」する...
この記事では、開発者がデータを解析、クリーンアップ、表現し、既存のアプリケーションに機械学習を実装す...
チップを作る上で最も重要な部分は何ですか? より高度な製造プロセスを使用してトランジスタ密度と計算能...
ディープラーニングは急速に発展していますが、過去 2 年間に登場した多くのディープラーニング フレー...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...