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

ブログ    
ブログ    
ブログ    

推薦する

...

...

AppleはAI競争で遅れをとり、市場価値ランキングはAmazon、Google、Microsoftに追い抜かれる可能性も

米国現地時間9月8日木曜日、投資会社ニーダム・セキュリティーズは、アマゾン、グーグル、マイクロソフト...

スタンフォード大学の「バーチャルタウン」がオープンソース化:25人のAIエージェントが「ウエストワールド」に登場

「ウエストワールド」を見たことがある友人は、このドラマの舞台が未来の世界、巨大なハイテクな大人向けテ...

人工知能の基礎技術は成熟し、AIは今後10年間で私の見方を完全に変えた

人工知能の黄金の10年基礎技術は基本的に安定しており、拡大シナリオは流行の10年を迎えています。中国...

...

Google が 17 分野を網羅し 18,000 の注釈を付した大規模な対話コーパスを公開

Google アシスタントのような AI アシスタントは、追加データや再トレーニングを必要とせずに、...

機械学習とディープラーニングの違いは何ですか?

機械学習とディープラーニングのアルゴリズムフローついに人工知能研究僧に入学しました。機械学習とディー...

清華大学の劉志遠氏:「ビッグモデルに関する10の質問」、新しいパラダイムの下での研究の方向性を見つける

大規模モデルの出現により AI 研究の新しい時代が到来し、それによってもたらされた改善は非常に大きく...

杜暁曼自動機械学習プラットフォームの実践

1. 機械学習プラットフォームまず、Du Xiaomanの機械学習プラットフォームの背景、開発プロセ...

百度言語知識技術サミットが開催され、王海鋒氏がNLP技術の進化の道筋を明らかにした

AIはより深いレベルへと進化しており、言語や知識技術の重要性がますます高まっています。 8月25日、...

人工知能と人間の知能のギャップは何でしょうか?

AlphaGoがイ・セドルを破った後、人類の知能の最後の高みも人工知能によって征服されたと誰もが言...

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

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

人工知能技術の登場によるデジタル変革をどう理解すればよいのでしょうか?

デジタル化は、意思決定レベルから産業レベルまでの変化において中心的な課題になりつつあります。科学技術...

国産アルゴリズムの普及はネットワークセキュリティ構築の最優先事項

情報化建設の加速に伴い、ネットワークセキュリティは情報化時代のホットな話題となり、国民の関心と注目を...