1. Keras を使用する理由 ディープラーニングが大人気の昨今、サードパーティのツールが次々と登場しています。有名なものとしては、Tensorflow、Caffe、Theano、MXNet などがあります。これほど多くのサードパーティ フレームワークを頻繁に切り替えるのは、間違いなく非効率的です。いずれかのフレームワークを習得し、その原理に精通していれば、さまざまな要件に応じて後でフレームワークを変更するのは簡単です。 では、Sherlock はどのフレームワークを使用するのでしょうか? Sherlock は、Google のオープンソース フレームワーク Tensorflow を使用します。Google が Tensorflow をオープンソース化した後、そのコミュニティは非常に活発で、バージョンの更新も非常に安定しているため、このフレームワークを選択しました。 Zhihu ではフレームワーク論争についてすでに多くの人が議論していますが、これはまさにどのプログラミング言語が優れているかという問題と同じです。私たちにとって、安定したフレームワークを選択し、ディープラーニングをしっかり学ぶことが最優先事項です。どのフレームワークが優れているかという質問については、しっかり学んだ後には当然自分たちの意見を持つようになるので、初期段階では、Zhihuを閲覧したり、達人たちの議論を聞いたりして、フレームワークを頻繁に変更することは避けるべきです。 Tensorflow のインストール方法や、CPU と GPU のバージョン、各種システムのインストール方法については、多くの人が詳しいガイドを書いています。インターネットで自分で検索すれば、簡単にインストールできます。 Tensorflow を選択したら、ディープラーニングの旅を楽しく始めることができます。 Tensorflow の中国コミュニティにアクセスすると、初心者向けのチュートリアルがいくつか見つかります。また、インターネット上には学習教材も多数あります。Tensorflow を詳細に紹介しているスタンフォード大学 cs224d のコースウェア (http://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf) をご覧になることをお勧めします。その後、TensorFlow プログラムを作成できます。 Tensorflow はパッケージ化されたフレームワークですが、単純なニューラル ネットワークを書くのに多くの行が必要になる場合があります。現時点では、ネットワークの作成を支援するサードパーティ プラグインが多数あります。つまり、Tensorflow を使用して 10 行を記述すると、サードパーティ プラグインが関数をカプセル化します。この関数は、これらの 10 行をこの関数に結合します。その後、1 行を使用して同じパラメーターを渡すことで、10 行と同じ効果を実現できます。これは非常にシンプルで時間を節約できるため、アイデアを迅速に実現するのに役立ちます。 Keras Documentation は Keras の公式ドキュメントであり、すべての機能を確認できるほか、GitHub でオープンソース コードも表示できるので非常に便利です。インストールも非常に簡単です。ターミナルを開き、pip install keras と入力してインストールを待ちます。 Keras がいかにシンプルであるかを示す簡単な例を示します。
シーケンシャルを紹介します。これは空のネットワーク構造で、この構造はシーケンシャル シーケンスなので、Sequential と呼ばれます。Keras には他にもネットワーク構造がいくつかあります。
レイヤーの追加は非常に簡単であることがわかります。.add に続けて、追加するレイヤーの種類を記述するだけです。
ネットワークを記述したら、compile を使用してネットワーク全体をコンパイルし、パラメータ設定に問題がないか確認できます。
最適化関数をカスタマイズすることもできます。上記のように、「sgd」は Keras がいくつかのデフォルト パラメータを使用して作成した最適化関数です。パラメータを自分で再定義して、最適化関数を取得できます。
これは scikit-learn と同じようにモデルをトレーニングします。
トレーニングの結果を評価するためです。
または、predict を使用して予測を行うこともできます。 上記のコードを読んだ後、scikit-learn に精通している多くの学生は、それが非常にシンプルで scikit-learn と似た構文を持っているため、非常に馴染み深いと感じると思います。 2. CNNの学習を始める CNN を理解する前に、より高度な畳み込みニューラル ネットワークを理解し始めることができるように、ニューラル ネットワークとは何かを理解する必要があります。 もちろん、ニューラル ネットワークを学ぶ方法はたくさんあります。インターネット上の多くの専門家が、多くのガイドを書いています。理論からエンジニアリングまでディープラーニングを完了することを提唱する人もいれば、エンジニアリングから始めて問題を発見し解決することを望む人もいます。さまざまな人がさまざまな方法を試し、ガイドもたくさんあります。そのため、多くの初心者は教材を選択する途中ですぐに失敗してしまいます。彼らは前提知識を補うために勉強を続け、熱意が冷めたら学習をあきらめてしまいます。彼らは畳み込みネットワークが何であるかさえ知らず、みんなの学習意欲を大きく削いでいます。今日、シャーロックは皆さんに学習教材をお勧めします。この教材があれば、CNN をすぐに使い始めることができ、外出して自慢するときに他の人とチャットできるようになります。 この教材は何でしょうか?有名なスタンフォードコース CS231N です。 CS231n 視覚認識のための畳み込みニューラル ネットワークスタンフォード大学は、ディープラーニングと人工知能の分野で非常に強力な大学です。 ニューラルネットワーク では、早速ニューラル ネットワークの学習を始めましょう。 これは脳神経の写真です。ニューラルネットワークの発明もここから始まりました。これはニューロンと呼ばれるもので、さまざまな受信シナプスがあり、脳神経を通して受信し、最終的に出力結果を得ます。 では、この脳神経図から抽象化できるニューラル ネットワークとは何でしょうか? それは、以下のニューラル ネットワーク モデルです。 これをどう理解すればよいでしょうか? これは、ベクトルを入力し、ベクトルの各要素に重みを割り当て、重みを合計して結果を取得することを意味します。次に、この結果を活性化関数に入力して、最終的な出力結果を取得します。 活性化関数とは何ですか?活性化関数の出現は、人間の脳の構造によるものです。人間の脳で情報を受け取り、結果を得るプロセスは非線形です。たとえば、何かを見たとき、このもののすべての特徴を保持することはできません。興味のある領域を観察することに集中します。これは非線形であり、入力結果を非線形結果に変換するには非線形の変更が必要であることを意味します。現在一般的に使用されている非線形関数は Relu(x) = max(x, 0) であり、これは 0 未満の部分を削除し、0 より大きい部分のみを保持します。 これらはユニットの入力と出力であり、これらのユニットを組み合わせることでニューラル ネットワークが作成されます。 これは単純な1層ネットワークですが、複数のネットワーク層で構成することもできます。 ここでの入力層は、単一のトレーニング セットの次元です。すべてのトレーニング セットを入力すると、ニューラル ネットワークのトレーニングを開始できます。 Kerasはシンプルなニューラルネットワークを実装します ニューラル ネットワークの基本的な構造と原理を理解したら、keras を使用してシンプルなニューラル ネットワークを実装し始めることができます。
必要なパッケージをインポートする
入力xとyを設定する
3層のニューラルネットワークを入力すると、中間の隠れ層の要素数は5と4で、最後の層は結果を出力します。
この単純なモデルに従う
モデルを20,000回トレーニングする
最初の入力 x の結果が実際のものと一致するかどうかを予測できます。 上記は、シンプルな3層ネットワークのKeras実装です。次に、畳み込みニューラルネットワークに正式に参入します。 3. 畳み込みニューラルネットワーク 以前、優れたコース cs231n をお勧めしましたが、この記事もこのアイデアに基づいています。 基本構造 まず、畳み込みとは何かを説明します。この畳み込みは、数学的な畳み込みではありません。ここでの畳み込みは、実際には 3 次元の重みを表しています。この説明はわかりにくいかもしれません。まずは畳み込みネットワークの基本的な構造を見てみましょう。 上の図から、畳み込みネットワークと一般的なネットワーク構造の違いが明確にわかります。また、畳み込みネットワークは 3 次元であるのに対し、一般的なネットワーク構造は平面であることもわかります。 畳み込み層 基本的な構造を理解した後は、CNN の最も重要な部分であり、最も革新的な部分でもある畳み込み層を理解する必要があります。まず、畳み込みネットワークの革新性を画像で比較してみましょう。 この構造を通じて、畳み込みネットワークがどのように実装されているかを明確に確認できます。まず、右側は、以前詳しく説明した従来のネットワーク構造です。左の写真ですが、まずは左端の構造を見てみましょう。なぜ32×32×3の立体立方体なのか、不思議に思われるでしょう。ここでの 32×32 はピクセル、つまり画像のサイズを表します。画像のサイズに応じて、このサイズを 50×50 または 256×256 に設定できます。では、3 は何を表しているのでしょうか。3 は実際には RGB の 3 つのチャンネルを表しています。RGB とは何でしょうか。RGB は赤、緑、青を表します。この 3 色のさまざまな組み合わせでさまざまな色を形成できるため、どの写真も左側のグラフィックで表すことができます。 では、中央の小さな四角は何を表しているのでしょうか? これが、私たちが注目する畳み込みです。いわゆる畳み込みは、このような小さな正方形です。小さな正方形のサイズを設定しますが、この小さな正方形の厚さは、左側の大きな正方形の厚さと同じでなければなりません。大きな正方形の各ピクセルは、0〜255の数字で表され、小さな正方形に重みを与えることができます。たとえば、小さな正方形のサイズが3×3の場合、厚さが左側の大きな正方形の厚さと同じである必要があるため、小さな正方形のサイズは3x3x3で、3x3x3の重みを与えることができ、畳み込みの結果を計算し、小さな正方形を大きな正方形の左上隅から移動することができます。最初、畳み込みの小さな正方形でカバーされる範囲は 3x3x3 です。次に、大きな正方形の 3x3x3 の数字と小さな正方形の重みを乗算して加算し、バイアスを追加すると、畳み込みの結果が得られます。これは抽象的に Wx+b と記述できます。これが図に示されている結果です。次に、小さな正方形のスライド距離を設定できます。スライドごとに畳み込みの計算結果を形成できます。次に、スライドして大きな画像全体をカバーした後、畳み込み結果のレイヤーを形成できます。図の畳み込み結果は非常に厚く、つまり多くの畳み込みレイヤーが設定されていることがわかります。要約すると、畳み込みの各層は、画像上をスライドする畳み込みカーネルで評価され、複数の畳み込みカーネルを設定することで、多層畳み込み層を形成できます。 プーリング層 畳み込み層について説明した後、プーリング層について説明します。なぜプーリング層が表示されるのでしょうか? それは、畳み込みを続けると、中間結果がどんどん厚くなるためです。畳み込みは画像から特徴を抽出することと同じなので、畳み込み層は一般的にどんどん厚くなるように設定されます。そうしないと、以前の結果からより多くの特徴を抽出できなくなります。これにより、中間結果がどんどん大きくなり、計算がどんどん遅くなるため、プーリング層が提案されます。 いわゆるプーリング層は、画像のサイズを縮小する方法です。まず下の写真を見てみましょう。 この図から、プーリング層がどのように処理されるかが明確にわかります。プーリング層でも最初にウィンドウを設定する必要がありますが、この小さなウィンドウの厚さは、前の層の出力結果の厚さではなく 1 です。そして、2つの処理方法があります。1つは、この小さなウィンドウ内のすべての要素の最大値をこの小さなウィンドウを表すために取る方法であり、もう1つは平均値を取ってから、小さなウィンドウをスライドさせ、2番目の位置で同じ処理を実行する方法です。上位ネットワーク出力ブロックの各層が完了すると、大きなブロックの次の層に入り、同じ操作を実行します。この処理方法により、上の図の左側に示すように、大きなブロック全体のサイズを縮小できます。右側は、最大値を取得したレイヤーの厚さの簡単な例です。 Lenetの導入 畳み込みネットワークの基本構造についてお話しした後、シンプルなニューラルネットワークを実現したいと思いませんか?畳み込みネットワークは急速に発展しました。最初にLecunによって提案され、LenetがCNNの祖先となりました。その後、彼の弟子のAlexがより深い層のAlexnetを提案し、その後2013年に16層と19層のVGGnetが提案されました。これらは単に層の数を深めただけで、他に革新はありません。その後、Googleはネットワーク構造の革新を実現するためにInception Netを提案し、Inception構造を提案しました。Facebook AI Laboratoryは残差ネットワークであるResnetを提案し、150層のトレーニング可能なネットワーク構造を実現しました。これらについては後ほどお話しします。 次に、MNIST 手書きサブセットをトレーニング セットとして使用して、最も単純な Lenet を実装します。
必要なライブラリとデータセットをインポートする
形状が (28, 28, 1) になるようにデータを処理し、ラベルに対してワンホットエンコーディングを実行します。たとえば、カテゴリが 3 の場合、[0, 0, 1, 0, 0, 0, 0, 0, 0, 0] になります。
LeNetの構築
コンパイル
50回トレーニングした後の結果は次のとおりです
訓練したモデルを保存できます 要約する さて、これは私たちが書いた超シンプルな Lenet です。50 回のトレーニング後、トレーニング精度は 0.9939 に達し、テスト精度は 0.9852 に達しました。 |
<<: AmazonのAI研究開発はファッショントレンドをリードするために異なるアプローチを採用しています
>>: 第 5 世代の XiaoIce は、率先して電話をかけて「議論」するかもしれませんが、その鋭い舌により、コンバージョン率が最も高い AI アシスタントになりました。
次のプロジェクトに機械学習を取り入れるべき 4 つの理由をご紹介します。 理由その1 – マーケティ...
[[431006]]アルゴリズムの速度最適化でボトルネックが発生し、要件を満たすことができませんか?...
2022年、伝説の「黄金の3月と銀の4月」がやって来ます... 「青銅三・鉄四」に変身しました… ...
[[409589]]ディープラーニングはここ 10 年ほどで急速に発展し、業界では多くのディープラー...
[[331103]] AIOps ツールは IT 分野で幅広い応用が期待されていますが、クラウド テ...
AIが生成したPS動画は本物と見分けがつかないほどに進化している。昨年、ミシェル・オバマに似せるた...
[51CTO.comよりオリジナル記事] 近年、都市化の急速な発展に伴い、中国の都市の街灯の数はます...
[[326429]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...
2013年、米国で窃盗罪で有罪判決を受けた男性がウィスコンシン州の裁判所に訴訟を起こしたという物議を...
最近、ETH チューリッヒのコンピューター ビジョン研究所の研究者が超解像度モデル SRFlow を...
現在、あらゆるToB市場において、5G+AIが並行して未来を創造しています。 [[331677]] ...
さまざまなスマート電子製品の普及により、ほとんどの人が知能についてある程度理解するようになりました。...