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

ブログ    
ブログ    

推薦する

追加データなしで、ImageNetで初めて87.1%の精度を達成した。Yan ShuichengのチームはVOLOをオープンソース化した。

[[407987]]過去 10 年間、コンピューター ビジョン認識タスクは畳み込みニューラル ネッ...

生成AIを使用してフィッシングメール攻撃を防ぐ方法

今年、ChatGPTはインターネット全体で人気を博しました。近年、AI人工知能は大きな進歩を遂げ、あ...

自動運転車の未来に関するレポート:乗用車の95%が消滅し、7兆ドルの旅行市場に4つの大きなチャンスがある

[[199334]]自動運転車は20年以内に世界経済を劇的に変え、保険、メディア、セキュリティ、物流...

たった一枚の写真でTikTokガール全員が踊れる

数日前、アリババの研究チームは「Animate Anyone」と呼ばれる手法を構築しました。この手法...

スマートホーム技術を通じて AI が家を乗っ取る可能性はあるでしょうか?

スマートホーム テクノロジーは、家電製品、ホーム セキュリティ、照明、エンターテイメントを強化します...

これら15のアルゴリズムをマスターすれば、グラフデータベースNeo4jを操作できるようになります。

チャート分析はビジネス上の意思決定において非常に価値があり、優れたグラフ アルゴリズムは使いやすく実...

...

私の国はAI医療機器の標準化を加速しています

今年は、新たに改訂された「医療機器監督管理条例」の実施初年度であり、企業の主な責任がより顕著になり、...

2021年なのに、出会い系アプリのアルゴリズムはなぜこんなにも悪いのでしょうか?

[[407925]]ビッグデータダイジェスト制作出典: Wiredパンデミックの間、出会い系アプリ...

AIがコスト削減、生産性、雇用に与える影響

AI を活用して雇用を減らし、コストを削減する方法を考えている企業は、間違っていると思います。最近、...

...

退屈な「機械学習」がこのように学べるとは思ってもいませんでした!

[[234276]]機械学習は、確率論や統計などの複雑な分野を含む人工知能の中核分野の 1 つです...

...

東京オリンピックでロボットが美しい風景になる

[[413763]]最近、4年に一度のオリンピックがついに東京で開催されました。フィールドでは、世界...