Keras を使用して、30 行未満のコードで最初のニューラル ネットワークを記述します。

Keras を使用して、30 行未満のコードで最初のニューラル ネットワークを記述します。

[51CTO.com クイック翻訳] 私が初めて AI に触れたときのことを振り返ると、いくつかの概念がいかに難しそうに思えたかをはっきりと覚えています。ニューラル ネットワークの簡単な入門書を読むと、これまで見たことのない記号を使った数式が書かれた科学論文にたどり着くことがよくありますが、最初のニューラル ネットワークを書き始めるのは実際にはずっと簡単です。

では、ニューラル ネットワークとは何でしょうか?

それは素晴らしい質問です! Python で簡単なニューラル ネットワークを記述する前に、ニューラル ネットワークについて、そしてそれがなぜ魅力的なのかについてお話ししましょう。

HNC Software の共同創設者である Robert Hecht-Nielsen 博士は、次のように簡単に述べています。

…ニューラル ネットワークは、動的な状態で外部入力に応答して情報を処理する、単純だが高度に相互接続された多数の処理ユニットで構成されたコンピューティング システムです。

—ニューラルネットワーク入門:パート1、人工知能の専門家モーリーン・コーディル著、1989年2月

本質的に、ニューラル ネットワークは、情報やデータ内のパターンを認識するのに適した一連の数式です。ニューラル ネットワークは人間の知覚を模倣することでこれを実現しますが、人間のように画像を見るのではなく、ベクトルまたはスカラー (ベクトルには 1 つの数値のみが含まれます) に数値的に含まれる情報を表します。

この情報はレイヤーを介して渡され、1 つのレイヤーの出力は次のレイヤーへの入力として機能します。これらのレイヤーを通過する際に、入力は重みとバイアスによって変更され、アクティベーション関数に送信されて出力がマッピングされます。次に、実際の出力と目的の出力を比較するコスト関数を通じて学習が行われ、バックプロパゲーションと呼ばれるプロセスを通じて、関数が重みとバイアスを変更および調整してコストを最小限に抑えるのに役立ちます。

実装するニューラル ネットワークの例では、MNIST データセットを使用します。

図1. MNISTサンプルデータセット

MNIST は、ニューラル ネットワークの機能を非常に簡潔に示すため、「Hello World」データセットに似ています。データセットは手書きの数字で構成されており、これらの数字を認識して分類するニューラル ネットワークをトレーニングします。

ケラスが登場

実装を容易にするために、Keras フレームワークを使用します。 Keras は、TensorFlow や Theano などの一般的なフレームワーク上で実行される Python で記述された高レベル API であり、機械学習の専門家に抽象化レイヤーを提供して、ニューラル ネットワークの記述に伴う複雑さを軽減します。

API を実際に理解するには、Keras のドキュメント (https://keras.io/) を詳しく調べることをお勧めします。また、このチュートリアルのインスピレーションとなった Francois Chollet 著の『Deep Learning with Python』という本も強くお勧めします。

GPUをテストする時が来た

このチュートリアルでは Keras と TensorFlow バックエンドを使用します。どちらもまだインストールされていない場合は、ターミナルで次のコマンドを実行するだけで今すぐインストールできます。単純な入門例以上のことを学習したい場合は、Anaconda 環境を構築し、conda を使用して以下をインストールするのが最適です。

  1. pip3 Kerasをインストールする 
  2. pip3 Tensorflowをインストールする

最初のニューラル ネットワークに必要なものがすべてインストールされたので、お気に入りの IDE を開いて、必要な Python モジュールをインポートしましょう。

  1. keras.datasetsからmnistをインポートする 
  2. kerasからモデルをインポート 
  3. kerasからレイヤーをインポート 
  4. keras.utilsからto_categoricalをインポートする

Keras には学習に役立つデータセットが多数ありますが、幸運なことに MNIST データセットがあります。 Models モジュールと Layers モジュールはニューラル ネットワークの構築に役立ち、to_categorical はデータのエンコードに使用されますが、これについては後で詳しく説明します。

必要なモジュールをインポートしたので、データセットをトレーニング セットとテスト セットに分割する必要があります。これはたった 1 行で実行できます。

  1. (train_images, train_labels), (test_images, test_labels) = mnist.load_data()

この例では、ニューラル ネットワークは出力をラベル付きデータと比較して学習します。これは、ニューラル ネットワークに大量の手書きの数字を推測するように依頼し、その推測を実際のラベルと比較するようなものです。次に、結果をモデルに入力して重みとバイアスを調整し、全体的なコストを最小限に抑えます。

トレーニング セットとデータセットの準備ができたので、モデルを構築する準備が整いました。

  1. ネットワーク = models.Sequential()  
  2. ネットワーク。 (layers.Dense(784, activation= 'relu' , input_shape=(28 * 28,)))を追加します  
  3. network.add (layers.Dense(784, activation= 'relu' , input_shape=(28 * 28,)))network.add ( layers.Dense(10, activation= 'softmax' ))network.compile(optimizer= 'adam' ,  
  4. 損失 = 'カテゴリクロスエントロピー'  
  5. メトリック=[ '精度' ])

コードが多すぎるように思えるかもしれませんが、分解してみましょう。ネットワークと呼ばれるシーケンシャルモデルを初期化します。

  1. ネットワーク = models.Sequential()

次に、ニューラル ネットワーク レイヤーを追加します。この例では、高密度レイヤーを使用します。密な層とは、各ニューロンが前の層のすべてのニューロンから入力を受け取る層です。 [784]と[10]は出力空間の次元を指し、これは後続の層への入力数に類似しています。私たちが解決しようとしている分類問題には10個のクラス(0から9の数字)があるため、最終層の潜在的な出力は10単位です。アクティベーション パラメータは、使用するアクティベーション関数を指します。アクティベーション関数は、指定された入力に基づいて実際に出力を計算します。 最後に、28*28 の入力形状は、画像のピクセル幅と高さを表します。

  1. ネットワーク。 (layers.Dense(784, activation= 'relu' , input_shape=(28 * 28,)))を追加します  
  2. ネットワーク。 (layers.Dense(784, activation= 'relu' , input_shape=(28 * 28,)))を追加します  
  3. network.add (layers.Dense(10, activation= 'softmax' ))

モデルが定義され、ニューラル ネットワーク レイヤーが追加されたら、選択したオプティマイザー、選択した損失関数、およびモデルのパフォーマンスを評価するために使用するメトリックを使用してモデルをコンパイルするだけです。

  1. network.compile(optimizer= 'adam' ,  
  2. 損失 = 'カテゴリクロスエントロピー'  
  3. メトリック=[ '精度' ])

おめでとうございます!初めてのニューラル ネットワークを構築しました。

まだいくつか疑問が残っているかもしれません。例えば、relu と softmax とは何ですか? Adam とは誰ですか? これらはすべて、考える価値のある質問です... これらの問題については、今後の記事で詳しく説明します。

作成したモデルにデータを入力する前に、入力をモデルが読み取れる形式に整形する必要があります。入力の元の形状は [60000, 28, 28] であり、これは実際には高さと幅が 28x28 の 60000 ピクセルの画像を表します。データをトレーニング用 [60000] 画像とテスト用 [10000] 画像に再構成できます。

  1. train_images = train_images.reshape((60000, 28 * 28))  
  2. train_images = train_images.astype( 'float32' ) / 255  
  3. test_images = test_images.reshape((10000, 28 * 28))  
  4. test_images = test_images.astype( 'float32' ) / 255

データを整形するだけでなく、データをエンコードする必要もあります。この例では、カテゴリ エンコーディングを使用します。これは、基本的に多くの機能を数値表現に変換します。

  1. train_labels = to_categorical(train_labels)  
  2. test_labels = to_categorical(test_labels)

データセットをトレーニング セットとテスト セットに分割し、モデルをコンパイルし、データを再形成してエンコードしたら、ニューラル ネットワークをトレーニングする準備が整いました。これを行うには、fit 関数を呼び出して、必要なパラメーターを渡します。

  1. ネットワーク.fit(train_images、train_labels、エポック=5、バッチサイズ=128)

トレーニング画像とそのラベル、エポック、バッチ サイズを渡します。前者は後方パスと前方パスの数を示し、後者は後方/前方パスごとのトレーニング サンプルの数を示します。

また、モデルのパフォーマンスを確認するためにパフォーマンス測定を設定することも必要です。

  1. test_loss、test_acc = network.evaluate(test_images、test_labels)  
  2. 印刷( 'test_acc:' , test_acc, 'test_loss' , test_loss)

これで完了です。独自のニューラル ネットワークを作成し、データセットを整形してエンコードし、トレーニング済みのモデルを適合させました。 Python スクリプトを初めて実行すると、Keras は MNIST データセットをダウンロードし、5 エポックのトレーニングを開始します。

テスト出力を使用したエポックのトレーニング

テストの精度は約 98% になるはずです。つまり、テストを実行したときにモデルが数字を 98% 正しく予測したということです。これは、初めてのニューラル ネットワークとしては悪くありません。実際、モデルが過剰適合/不足適合しているかどうかを適切に把握するには、テスト結果とトレーニング結果の両方を確認する必要があります。

レイヤーの数、オプティマイザー、損失関数、エポック、バッチ サイズをいろいろ試して、それぞれがモデルの全体的なパフォーマンスにどのように影響するかを確認することをお勧めします。

原題: Keras を使って 30 行未満のコードで初めてのニューラル ネットを書く、著者: David Gündisch

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  テラデータ、Vantage Customer ExperienceとVantage Analystを発表

>>:  テスト効率が2倍になりました!第2回NCTS中国クラウドテストサミットがAIテストの新たなパラダイムを切り開く

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

人工知能は転移学習を使用して、自然画像から抽出した特徴を使用してイラスト分類の精度を向上させます

人工知能は転移学習を利用して、自然画像から抽出した特徴を利用してイラスト分類の精度を向上させます (...

製造業における AI 活用事例 10 選

製造企業は、ビジネスのやり方を合理化し、効率を高めるために人工知能に注目しています。一般的な使用例を...

...

...

13Bモデルはあらゆる面でGPT-4を圧倒しますか?この裏にあるトリックは何でしょうか?

130 億のパラメータを持つモデルが実際にトップの GPT-4 に勝つのでしょうか?下の図に示すよ...

...

...

Gemini ProはGPT-3.5ほど優れていません。CMUは徹底的な比較研究を実施し、公平性、透明性、再現性を確保しています。

Google Gemini はどれほど強力ですか?カーネギーメロン大学は、専門的かつ客観的な第三者...

スポットロボット犬が古代ポンペイの警備員として活躍!墓泥棒を防ぐだけでなく、宙返りや3Dモデリングもできる

ボストン・ダイナミクスのロボット犬は、ダンスビデオを毎年リリースしているほか、さまざまな産業や警察署...

...

人工知能を正しく実装するにはどうすればいいでしょうか?

[[264479]]人工知能 (AI) が私たちの日常の仕事や生活にますます普及し、企業がさまざま...

AIと機械学習でデータセンターを強化

人工知能(AI)と機械学習は、インテリジェントデータセンターにおいてますます重要な役割を果たしていま...

ドローンは人気があり、3つの主要なアプリケーションが農家の役に立つ

今日は二十四節気の一つ、白露節気です。白露節気の季節には、我が国のほとんどの地域が秋の収穫期に入り、...

...

AR のヒント | 説明する時間はありません。今すぐ保存してください。

[51CTO.com からのオリジナル記事] 近年、AR は常に資本追求の焦点となってきました。 ...