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

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

この記事は公開アカウント「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イラストがリアルタイムでアニメーション化されます。中国のプログラマーが制作し、デモはオンラインで入手できます。

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

ブログ    
ブログ    
ブログ    

推薦する

ソフトウェア配信における機械学習の活用方法

現代のほとんどのソフトウェア チームにとって、ソフトウェアの配信は継続的なプロセスです。ソフトウェア...

ByteDance によって否定された中国版 Sora の何がそんなに素晴らしいのでしょうか?

執筆者 | Yun Zhao制作:51CTO テクノロジースタック(WeChat ID:blog)最...

...

テンセントと清華大学が新インフラ分野の最新成果を発表:データセンターのバッテリー設備向けAI診断サービス

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ゲーム理論に基づく大規模データ分析

現代の AI システムは、試験に向けて熱心に勉強する学生のように、画像内の物体を識別したり、タンパク...

ビッグニュース!アリママが自社開発のCTR推定コアアルゴリズムMLRを初公開

1. 技術的背景CTR(Click-Through-Rate)とは、クリック率のことで、インターネッ...

すべての開発者が知っておくべき 6 つの生成 AI フレームワークとツール

翻訳者 | ジン・ヤンレビュー | Chonglou生成 AI は、急速に進化するテクノロジー分野に...

2022年の主要イベントが近づいています。ビッグネームの共演をお見逃しなく

2022年、デジタル化の東風が到来し、新たな技術・産業革命が本格化します。デジタル化の波に立ち、絶え...

文字列マッチングのためのボイヤー・ムーアアルゴリズム

前回の記事では、KMPアルゴリズムを紹介しました。ただし、これは最も効率的なアルゴリズムではなく、実...

人工知能、自動化、新興技術のトレンドが4.6兆ドルの通貨市場に混乱をもたらしている

いくつかのスタートアップ企業は、最新のテクノロジーを活用して、最大かつ最も古いセクターの 1 つであ...

オンラインショッピングデータに基づくスマートドアロック「ショッピングガイド」

ビル・ゲイツは1995年に「The Road Ahead」の中でこう述べています。「将来、スマート家...

...

Googleが絵画におけるAI使用の権利を取り戻す、ネットユーザー「DALL・E 2は発売からわずか1ヶ月で時代遅れ?」

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

韓国の通信事業者SKT、通信業界向け大規模AIモデルの開発のためOpenAIの競合企業に1億ドルを投資

大規模な AI モデルのトレンドは通信業界にも浸透しています。米国のAIスタートアップ企業Anthr...