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

ブログ    

推薦する

社会的関心の強化に基づくビデオ推奨アルゴリズム

1. 推奨ステータスまず、レコメンデーションシステムの現状について簡単に紹介します。推薦システムは、...

2019年のGAITCイベントが南京で開催され、世界のエリートがスマートシェアリングに注目

2017年3月、中国共産党中央委員会の政府活動報告に人工知能が記載され、人工知能は国家戦略となった。...

...

...

Vision Pro が 50 億ドルで売却され、ザッカーバーグは大喜び! Metaは500億ドルを燃やし、VR復活の希望がここにある

海外メディアの報道によると、2月2日の正式発売前に、AppleのVision Proはすでに20万台...

...

海外のJavaエンジニアがGPT-4が論理パズルを解くことはできないが推論能力はあることを証明

GPT-4 または LLM には推論機能がありますか?これは長年議論されてきた問題です。 LLM は...

ウクライナ、写真を通じて殺害されたロシア兵の家族を発見?顔認識が初めて軍事紛争で大規模に使用され、大きな論争を巻き起こしている

報道によると、ウクライナが使用している顔データベースは、米国に本社を置くテクノロジー企業の「Clea...

...

次世代のサイバー脅威はAIから生まれる

ボストン コンサルティング グループ (BCG) によると、米国と日本のサイバーセキュリティ専門家の...

...

多くの競争者が競い合う中、自動運転をめぐる戦いが始まる!

著者: 張傑[51CTO.comより引用] 2020年と比べると、2021年の自動運転業界にはよりエ...

CIIE 2019 サノフィと朱江知能が共同で医療のデジタル未来を創造

第2回中国国際輸入博覧会が11月10日に成功裏に終了した。医療機器と医薬健康展示エリアでは、世界有数...

...

産業用ロボットの開発動向

産業用ロボットは、さまざまな産業用タスクを自動的に実行できる一種の機器として、製造、組み立て、梱包、...