私自身の PyTorch の学習過程を思い出すと、最初はいろいろな情報を見つけ、それを書き留めて実行することはできましたが、学習プロセスを体験していませんでした。チュートリアルの中には、CNN を書くところから始まるものもあります。内容は実はとてもシンプルなのですが、いきなり始めると要点を見失い、混乱してしまいがちです。一部のチュートリアルは表面的な内容のみです。インストラクターが入り口まで案内してくれますが、中に入る前にチュートリアルが終わってしまったように感じてしまいます。 そこで私は、自分の元々の学習経路を要約し、引き続き Python Torch の基礎を強化する準備をしました。一方で、Python Torch にまったく触れたことがない状態から始めて、最新の論文の一部を完成させるまで、ゼロからチュートリアルを整理したいと考えていました。メインスレッドは自分の勉強ノートを整理し、誰でも参照できるようにすることです。 最初のノートでは、まず単純な分類器を完成させます。主なプロセスは次の 3 つの部分に分かれています。 1. 2 次元平面上のいくつかのポイントを 2 つのカテゴリに分割したトレーニング セットをカスタマイズして生成します。 2. 特徴に適合する浅いニューラル ネットワークを構築します。主に、PyTorch でネットワーク構造を構築する方法を理解するためです。 3. トレーニングとテストの部分を完了し、pytorch がネットワークをトレーニングおよびテストする方法を理解します。 1. データセットをカスタマイズする
この記事では、ニューラル ネットワーク モデルを最も簡単な方法で理解し、それを PyTorch で構築できるように、まず自分で定義した単純なデータセットに分類を実装することを検討します。 NumPy に精通している学生であれば、このコードの内容を推測できるはずですが、これは NumPy では NumPy 配列であり、PyTorch ではテンソルです。ここでは、考えを整理する必要のある学生を支援するために、これらのコード行の機能を簡単に紹介します。 まず、n_dataは他のデータを生成するために使われるベンチマークデータです。100行2列のテンソルで、値はすべて1です。 x0 は、この n_data によって生成されるデータの種類の座標値です。 具体的な生成方法は、torch.normal() 関数を使用し、最初のパラメータが mean、2 番目のパラメータが std です。したがって、返される結果 x0 は n_data と同じ形状になりますが、データは平均 2、標準偏差 1 の正規分布からランダムに選択されます。 y0は値がすべて0である100次元テンソルです。 x0 と y0 はこのように理解できます。x0 の形状は 100 行 2 列のテンソルです。値は 2 を中心にランダムに分布しており、正規分布に従います。これらの点のラベルは y0 に設定されており、これは 0 です。一方、x1 に対応する中心は -2 で、ラベルは y1 です。つまり、各点のラベルは 1 です。 最終的に生成された x と y はすべてのデータをマージした結果であり、x0 と x1 はデータとしてマージされ、y0 と y1 はラベルとしてマージされます。 2. 浅いニューラルネットワークを構築する
上記の Net() クラスは、ニューラル ネットワークを構築する手順です。 PyTorch を使用してニューラル ネットワークを作成するのが初めてであれば、これは十分に単純な例です。コンテンツは、__init__() 関数と forward() 関数の 2 つの部分で構成されます。 簡単に言えば、__init__() 関数はネットワーク構造、存在するレイヤー、および各レイヤーの機能を定義します。たとえば、この関数では、self.n_hidden は線形フィッティング関数、つまり、隠し層へのマッピングと同等の完全接続層を定義します。入力は n_feature で、出力は隠れ層 n_hidden のニューロン数です。そして、self.out も完全に接続された層です。入力は隠れ層のニューロン数 n_hidden で、出力は最終出力結果 n_output です。 次は forward() 関数です。これはニューラル ネットワークの実行順序を定義することと同じです。ここでは、上記の隠し層関数が最初に入力 x_layer、つまり最初の完全に接続された self.n_hidden() で実行され、次に活性化関数 relu が出力で実行されることがわかります。次に、同じメソッドが繰り返され、出力層 self.out() を通じて最終出力が取得されます。出力 x_layer が返されます。 optimizer はここで定義される最適化手法であり、lr は学習率パラメータです。次に、損失関数としてクロスエントロピー損失関数を選択します。これは上記のコードの最後の行です。アルゴリズムと損失関数を最適化するには、pytorch でさまざまな API インターフェースを直接選択できます。形式に関しては、上記の固定形式を直接参照できます。 3. トレーニングとテストを完了する
次に、トレーニングプロセスがどのように実行されるかを見てみましょう。 net() は Net() クラスからインスタンス化するオブジェクトなので、net() を使用してモデルを直接実行できます。out はモデルによって予測された結果であり、loss はクロスエントロピー損失関数に従って真の値から計算された誤差です。 次の 3 行のコードは、勾配バックプロパゲーションを実行する方法を示した標準形式です。この時点で、トレーニングは実際に完了しており、このネットワークを直接使用してテスト データ セットを予測および分類できるようになりました。
このモデルの役割を誰もがよりよく理解できるように、ここで視覚化作業を行ってモデルの学習効果を確認してみましょう。この目標は、Python で非常に一般的なデータ視覚化ライブラリである matplotlib を通じて達成できます。matplotlib の具体的な使用法についてはここでは紹介しません。 ここでの目的は、トレーニング セットに対するトレーニング済みモデルの分類効果、つまりトレーニング エラーを示すことです。
次に、平均値が 0 であるデータをランダムに生成し、モデルがこれらのデータ ポイントをどのように分類するかを確認します。 トレーニングされたセグメンテーション ラインは描画されていませんが、モデルがデータを 2 つのカテゴリに分割するセグメンテーション インターフェイスを学習したこともわかります。 |
<<: AI温度測定から警備ロボットまで、インテリジェントセキュリティは新たな「ゲートキーパー」となるのでしょうか?
[51CTO.com クイック翻訳] 先週、Intel は分散型ディープラーニング用のオープンソース...
[[274438]]機械学習の分野は数十年にわたって「タンク問題」に悩まされてきました。この話は 1...
最近、教育部は「教育部の高等大学教育の建設を加速し、人材育成能力を全面的に向上させることに関する意見...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
浙江省メディアの報道によると、現在浙江大学医学部第二付属病院で治療を受けている72歳の張さんは、意識...
[[205875]]まず第一に、今日ビジネスを始めようと決めたなら、インターネットよりも人工知能に重...
この記事では、機械学習における回帰と分類のさまざまな指標について説明します。私たちは常に、優れた機械...
インターネットの出現により、伝統的な取引方法は一変しました。第三者保証の取引プラットフォームとして、...
[[434314]]ディープフェイクを使って古い写真をアニメ化し、殉教者を追悼するのは良いことだが、...
先日開催されたCES 2024カンファレンスでは、AI PC(人工知能コンピュータ)のコンセプトや製...
本日 Nature 誌に掲載された論文で、IBM Research のポスドク研究員 Stefano...