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テストの新たなパラダイムを切り開く

ブログ    
ブログ    

推薦する

...

ビジネス上の問題を機械学習の問題に変換するにはどうすればよいでしょうか?

[[196752]]機械学習が価値を変革するための最も重要なステップは何ですか?ビジネス上の問題に...

新しいIT運用・保守管理にはインフラストラクチャとデータの両方が必要

AIビッグモデルの時代、データはIT担当者に「新たな使命」を与える今日、IT プロフェッショナルは企...

7つの変革的技術トレンド:第4次産業革命をリードする

テクノロジーは常に進化し、私たちの未来を形作っています。第四次産業革命は、さまざまな産業に革命をもた...

...

2019 年のインターネット キャンパス採用の給与が発表されました。いくらもらえるか見てみましょう!

2019年秋学期のキャンパスリクルートメントは終了に近づいています。近年、特にインターネット業界で...

グラフニューラルネットワークに基づくOPPOの検索推奨アルゴリズムと実践

1. グラフニューラルネットワーク入門グラフ ニューラル ネットワークについて説明する前に、まずグラ...

二足歩行ロボットは撮影以外にも応用シーンが多すぎて問題になっている

揚子江は東に流れ、その波はすべての英雄たちを押し流す。ジャッキー・チェン、ジェット・リー、ジャン=ク...

ChatGPTが公式検出ツールを削除、AIテキストは識別できないことを認める

OpenAI は、何の発表もなく、ひっそりと AI テキスト検出ツールをシャットダウンし、ページは直...

...

マルチモーダル生体認証の利点は何ですか?

マルチモーダル生体認証とは何ですか? マルチモーダル生体認証は、さまざまなシナリオやセキュリティ レ...

独身者は幸せだ!スタンフォード大学の教授がキューピッドに変身、AIアルゴリズムの矢印が真実の愛を見つけるのを手伝う

今日の多くの若い男女にとって、オンラインデートは恋愛関係を見つけるための第一歩です。アメリカでは、こ...

...

自動運転のための多視点視覚認識の理解

出力次元の観点から、視覚センサーに基づく知覚方法は、2D知覚と3D知覚に分けられます。視覚システムは...