ニューラル ネットワークを構築する超簡単な方法、あなたにもできます!

ニューラル ネットワークを構築する超簡単な方法、あなたにもできます!

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discovery)から転載したものです。

人工知能、ディープラーニング、これらの言葉は、とても高尚で神秘的に聞こえますか?まるで、数学の博士号を持つ人だけが学べる高度な分野のようですか?

違います!Bilibiliが学習ウェブサイトになった今、インターネットで見つからないチュートリアルは何ですか?ディープラーニングは、少なくとも実践的な部分はこのようになっていますが、これまでになく簡単に始められます。

人工ニューラル ネットワークの基本理論は知っているが、実際に作成する方法を学んだことがない場合は、この記事に従って試してみてください。 PyTorch ライブラリで人工ニューラル ネットワーク操作を実装して、これまでに見たことのないデータに対して予測を行う方法について、基本的な理解が得られます。

この記事を読むのにかかる時間は最大でも 10 分です。コードに沿って読みたい場合は、必要なライブラリがインストールされていれば 15 分で済みます。信じてください、そんなに難しいことではありません。

長い話は短くして、始めましょう!

[[325558]]

インポートステートメントとデータセット

この簡単な例では、いくつかのライブラリを使用します。

  • Pandas: データの読み込みと処理用
  • Matplotlib: データの視覚化用
  • PyTorch: モデルのトレーニング用
  • Scikit-learn: トレーニング セットとテスト セットを分割する

単にコピーして貼り付けるだけの場合は、次のインポート ステートメントを参考にしてください。

  1. 輸入トーチ
  2. torch.nnをnnとしてインポートする
  3. torch.nn.function を F としてインポートします。
  4. pandasをpdとしてインポートする
  5. matplotlib.pyplot を plt としてインポートします。
  6. sklearn.model_selection から train_test_split をインポートします

データセットについては、Iris データセットはこの URL にあります。直接インポートする方法は次のとおりです

  1. パンダ:
  2. アイリス= pd .read_csv('https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv')
  3. アイリスヘッド()

最初の数行を以下に示します。

ここで、名前列のアヤメの種名をカテゴリ値に変更または再マッピングする必要があります。 ——それは0、1、2です。手順は次のとおりです。

  1. マッピング= {
  2. 「アイリスセトサ」: 0,
  3. 「アイリス・ベルシカラー」:1、
  4. 「アイリス・バージニカ」:2
  5. }iris['Name'] = iris['Name'].apply(lambda x: マッピング[x])

上記のコードを実行して取得される DataFrame は次のようになります。

おめでとうございます。第一歩を無事に踏み出しました!

トレーニングセットとテストセットを分割する

このセクションでは、Scikit-Learn ライブラリを使用してトレーニング セットとテスト セットを分割します。その後、分割されたデータは Numpy 配列から PyTorch テンソルに変換されます。

まず、Iris データセットを「特徴」と「ラベル セット」、つまり x と y に分割する必要があります。名前列は従属変数であり、残りは「機能」(または独立変数) です。

次にランダムシードも使用するので、以下の結果を直接コピーできます。コードは次のとおりです。

  1. X = iris .drop('名前', axis = 1 ).values
  2. y = iris ['Name'].valuesX_train、X_test、y_train、 y_test = train_test_split (X、y、 test_size = 0.2 random_state = 42 ) X_train = torch.FloatTensor (X_train)
  3. X_test = torch.FloatTensor (X_test)
  4. y_train = torch.LongTensor (y_train)
  5. y_test = torch.LongTensor (y_test)

X_train から始まる最初の 3 行を調べると、次のようになります。

y_train から開始すると、次の結果が得られます。


基礎が築かれ、次のステップはニューラル ネットワークの構築を正式に開始することです。

ニューラルネットワークモデルの定義

モデルのアーキテクチャはシンプルです。注目すべきは、ニューラル ネットワークのアーキテクチャです。

  • 入力層(4つの入力特徴(つまり、Xに含まれる特徴の数)、16の出力特徴(ランダム))
  • 完全接続層(16個の入力特徴(つまり、入力層の出力特徴の数)、12個の出力特徴(ランダム))
  • 出力層(12個の入力特徴(つまり、完全接続層の出力特徴の数)、3個の出力特徴(つまり、異なる品種の数)

それはそれくらいです。また、活性化関数としてReLUが使用されます。以下に、このアクティベーション関数をコードで実装する方法を示します。

  1. クラスANN(nn.Module):
  2. __init__(self)を定義します。
  3. スーパー().__init__()
  4. self.fc1 = nn.Linear ( in_features = 4 out_features = 16 )です。
  5. self.fc2 = nn.Linear ( in_features = 16 out_features = 12 )です。
  6. self.output = nn.Linear ( in_features = 12 out_features = 3 )です。
  7.   
  8. def forward(self, x):
  9. x = F .relu(self.fc1(x))
  10. x = F .relu(self.fc2(x))
  11. x =自己.出力(x)
  12. xを返す

PyTorch で使用されるモデルを宣言するオブジェクト指向の方法は非常に直感的です。コンストラクターでは、すべてのレイヤーとそのアーキテクチャを定義する必要があり、forward() を使用する場合は、フォワード パスを定義する必要があります。

次に、モデル インスタンスを作成し、そのスキーマが上記のものと一致することを確認します。

  1. モデル= ANN ()
  2. モデル

モデルをトレーニングする前に、次の点に注意する必要があります。

  • 評価基準: 損失を計算するために主にCrossEntropyLossを使用する
  • オプティマイザー: 学習率0.01のAdam最適化アルゴリズムを使用する

CrossEntropyLoss と Adam をコードで実装する方法は次のとおりです。

  1. 基準= nn.CrossEntropyLoss ()
  2. オプティマイザー= torch.optim.Adam (model.parameters(), lr = 0.01 )

いよいよ待望のモデルトレーニング編です!

モデルトレーニング

この部分もかなり簡単です。モデルのトレーニングは、時間と損失を追跡しながら 100 エポック実行されます。現在のステータスは 10 ラウンドごとにコンソールに出力され、現在のラウンドと現在の損失が示されます。

コードは次のとおりです。

  1. %%タイムエポック= 100  
  2. loss_arr = []iが範囲内(エポック)の場合:
  3. y_hat =モデル.forward (X_train)
  4. 損失=基準(y_hat, y_train)
  5. loss_arr.append(損失)
  6.  
  7. i % 10 == 0の場合:
  8. print(f'エポック: {i} 損失: {loss}')
  9.  
  10. オプティマイザ.zero_grad()
  11. 損失.後方()
  12. オプティマイザ.ステップ()

最後の 3 行が何のためなのか気になりますか? 答えは簡単です。バックプロパゲーション、つまりモデルが実際に「学習」するための重みとバイアスの更新です。

上記のコードを実行した結果は次のとおりです。


進歩は速いですが、軽視しないでください。

純粋な数字にはまったく興味がない場合は、次の図は損失曲線を視覚化したものです (x 軸は端数、y 軸は損失です)。


モデルのトレーニングは完了しました。次は何をすればよいでしょうか? もちろん、モデルの評価です。このモデルは、これまでに見たことのないデータに基づいて何らかの方法で評価する必要があります。

モデル評価

評価プロセス中に、モデルによって行われた予測を何らかの方法で追跡したいと考えています。 X_test を反復処理して予測を行い、予測値を実際の値と比較する必要があります。

ここでは関数を評価するだけなので、重みとバイアスを更新する必要はなく、torch.no_grad() を使用します。

要約すると、コードは次のようになります。

  1. preds = [] で torch.no_grad() を使用する場合:
  2. X_testのvalの場合:
  3. y_hat = model.forward (値)
  4. preds.append(y_hat.argmax().item())

これで予測結果が preds 配列に保存されます。 Pandas DataFrame は、次の 3 つの値で構築できます。

  • Y: 実際の値
  • YHat: 予測値
  • 正解: 対角線。対角線の値が 1 の場合は、Y と YHat が一致することを示し、値が 0 の場合は一致しないことを示します。

コードは次のとおりです。

  1. df = pd .DataFrame({'Y': y_test, 'YHat':preds}) df['Correct'] = [1 if corr == pred else 0 for corr, pred in zip(df['Y'],df['YHat'])]

df の最初の 5 行を以下に示します。


次の質問は、実際にどのように精度を計算するかということです。

簡単です。Correct 列を合計し、df の長さで割るだけです。

  1. df['正しい'].sum() / len(df) > > > 1.0

このモデルは、これまでに見たことのないデータに対して 100% 正確です。ただし、これは Iris データセットが非常に簡単に分類できるためであり、ニューラル ネットワークが Iris データセットに最適なアルゴリズムであることを意味するものではないことに注意してください。 NN はこの種の問題には少々やり過ぎですが、それはまた別の機会に取り上げます。

これはおそらく、これまでに作成した中で最もシンプルなニューラル ネットワークです。データセットは完全に簡潔で、欠損値はなく、レイヤーとニューロンは最小限です。この記事には高度な内容や難解な内容は一切なく、理解できると思います。

<<:  カメラを開くと、2Dイラストがリアルタイムでアニメーション化されます。中国のプログラマーが制作し、デモはオンラインで入手できます。

>>:  デジタルイノベーション:次の世界的危機に対応するための重要な要素

ブログ    
ブログ    
ブログ    

推薦する

...

危険なAIアルゴリズムを識別し、倫理原則に従ったビッグデータモデルを作成する方法

人工知能がもたらす脅威について議論するとき、スカイネット、マトリックス、ロボットによる終末の世界とい...

あなたたちは AI を大々的に宣伝していますが、AI はまだ 4 歳児ほど賢くありません。

研究によると、人工知能は強力に聞こえますが、現在の高度な人工知能は、人間の 4 歳児が簡単に解決でき...

...

テクノロジー|軽量顔検出アルゴリズムの徹底レビュー

顔検出は、幅広いアプリケーションと多くの研究者を抱えるコンピューター ビジョンの古くからのトピックで...

これほどリアルな効果を生み出すために、原作者を何人食べなければならなかったのですか?文生図はビジュアル「盗作」の疑い

少し前、ニューヨーク・タイムズ紙は、OpenAI が自社のコンテンツを人工知能開発のために違法に使用...

AI は金融業界がランサムウェアに効果的に対抗するのに役立つでしょうか?

[[430265]]ランサムウェアの脅威は目新しいものではありませんが、依然としてニュースの見出し...

...

...

顔認識のためのディープラーニングとオブジェクト検出のステップバイステップガイド

[[277051]]これまでの共有を通じて、顔認識の一般的なプロセスを理解しました。主に次のプロセス...

...

...

推薦システムにおけるランキング学習のための独自のアルゴリズム: Schiram ランキング

著者 | 王昊レビュー | Chonglou近年、推奨システムにおけるランク付け学習の応用は非常に稀...

...