Python の例を使用して TensorFlow を始めるにはどうすればよいでしょうか?

Python の例を使用して TensorFlow を始めるにはどうすればよいでしょうか?

[[223516]]

この記事に付属するコードは、ここからダウンロードできます。

https://github.com/NMZivkovic/IntrouductionToTensorFlow

最近、私はサイドプロジェクトとして、C# で書かれたシンプルなニューラル ネットワーク プロジェクトを紹介しました。その記事で述べたように、提示された解決策は最善の解決策からは程遠いものです。このソリューションを専門的な用途に使用するには、さらに多くの数学計算と行列乗算が必要になります。幸いなことに、Google の優秀な人材がまさにそれを実現するライブラリ、TensorFlow を作成しました。これは人気のあるオープンソース ライブラリであり、おわかりのように、ニューラル ネットワークの計算に不可欠な数値計算に優れています。ディープラーニング分野で開発を行うための、ほとんどの主流プログラミング言語用のアプリケーションプログラミングインターフェースを提供します。

[[223517]]

TensorFlow はどのように機能しますか? そのソリューション全体は、TensorFlow の基本単位であるテンソルに基づいています。 TensorFlow は、テンソル データ構造を使用してすべてのデータを表します。数学において、テンソルは他の幾何学的オブジェクト間の線形関係を記述する幾何学的オブジェクトです。 TesnsorFlow では、これらは行列などの多次元配列またはデータです。実際にはそれほど単純ではありませんが、線形代数におけるテンソルの概念全体を深く掘り下げながら、その点についてこれからお話ししたいと思います。いずれにせよ、テンソルは n 次元配列として考えることができ、テンソルに行列演算を適用するのは簡単かつ効率的です。たとえば、次のコードでは、2 つの定数テンソルを定義し、一方の値を他方の値に追加します。

これが線形代数におけるテンソルの全体的な概念です。

定数の値は変化しないことは誰もが知っています。 TensorFlow には豊富な API があり、ドキュメントも充実しています。これを使用して、変数などの他の種類のデータを定義できます。

TensorFlow では、テンソルに加えて、データフロー グラフも使用します。グラフ内のノードは数学演算を表し、エッジはそれらの間で通信されるテンソルを表します。

インストールとセットアップ

TensorFlow は、Python、C++、Java、Go、Haskell、R (サードパーティ ライブラリの形式) など、さまざまなプログラミング言語用の API を提供します。さらに、さまざまな種類のオペレーティング システムをサポートしています。この記事では、Windows 10 で Python を使用するため、このプラットフォームでのインストール プロセスについて説明します。 TensorFlow は Python 3.5 と 3.6 のみをサポートしているため、システムにこれらのバージョンのいずれかがインストールされていることを確認してください。他のオペレーティング システムと言語については、公式のインストール ガイドを参照してください。他に知っておく必要があるのは、システムのハードウェア構成です。 TensorFlow をインストールするには 2 つのオプションがあります。

  • TensorFlow の CPU バージョンのみがサポートされています。
  • GPU をサポートする TensorFlow のバージョン。

システムに NVIDIA GPU が搭載されている場合は、GPU をサポートする TensorFlow のバージョンをインストールできます。もちろん、GPU バージョンの方が高速ですが、CPU バージョンの方がインストールと設定が簡単です。

Anaconda を使用して TensorFlow をインストールする場合は、次の手順に従ってください。

コマンドを実行して、conda 環境「tensorflow」を作成します。

  1. conda作成-n テンソルフロー pip python=3.5

作成した環境を次のコマンドでアクティブ化します。

  1. テンソルフローを有効にする

このコマンドを呼び出して、環境に TensorFlow をインストールします。 CPU バージョンの場合は、次のコマンドを実行します。

  1. pip インストール--ignore-installed --upgrade tensorflow  

GPU バージョンの場合は次のコマンドを実行します:

  1. pip インストール--ignore-installed --upgrade tensorflow-gpu  

もちろん、「ネイティブ pip」コマンドを使用して TensorFlow をインストールすることもできます。 CPU バージョンの場合は以下を実行します:

  1. pip3 インストール--upgrade tensorflow  

GPU TensorFlow バージョンの場合は、次のコマンドを実行します。

  1. pip3 インストール--upgrade tensorflow-gpu  

これでTensorFlowがインストールされました。次に、解決したい問題の解決を始めましょう。

アイリスデータセットの分類問題

Iris データセットは、MNIST データセットとともに、おそらくパターン認識の文献で最も有名なデータセットの 1 つです。これは、機械学習の分類問題に対する「Hello World」の例です。 1936 年にロナルド フィッシャーによって初めて導入されました。彼はイギリスの統計学者であり植物学者でもあり、今日まで頻繁に引用されている論文「生物学的分類の問題を解決するために複数の測定を使用する」の中でこの例を挙げています。データセットには 3 つのカテゴリが含まれており、それぞれに 50 個のインスタンスが含まれています。各カテゴリは、Iris setosa、Iris virginica、Iris versicolor などのアヤメ植物の種類です。最初の 2 つは線形に分離可能ですが、最後の 2 つは分離できません。各レコードには 5 つの属性があります。

  • 萼片の長さ(cm)
  • 萼片の幅(cm)
  • 花びらの長さ(cm)
  • 花びらの幅(cm)

クラス(アヤメ属、アヤメ属、アヤメ属)

私たちのニューラル ネットワークの目標は、他の特性に基づいてアイリスの種類を予測することです。つまり、属性値とカテゴリの関係を記述するモデルを作成する必要があります。

TensorFlow ワークフロー

ほとんどの TensorFlow コードは、次のワークフローに従います。

  • データセットのインポート
  • データを記述するための列を追加してデータセットを拡張する
  • モデルの種類を選択
  • トレーニングを始める
  • モデルの精度の評価
  • モデルを使用して結果を予測する

私の以前のブログ投稿をご覧になった方は、人工ニューラル ネットワークの開発はトレーニングと評価のプロセスと切り離せないことにお気づきかもしれません。これらのプロセスは通常、トレーニング用とトレーニングされたネットワークの精度をテストするための 2 つのデータセットに対して実行されます。多くの場合、データセットを取得したら、それを 2 つの別々のデータセットに分割し、一方をトレーニングに使用し、もう一方をテストに使用する必要があります。その比率は通常80%対20%です。今回はすべて私たちのために行われました。トレーニング データセットはここから、テスト データセットはここからダウンロードできます。または、ここから完全なコードとデータをダウンロードすることもできます。

コーディング

先に進む前に、まず開発に Spyder IDE を使用していることを述べておきます。そのため、この環境を使用してプロセス全体を説明します。

最初に行う必要があるのは、データセットをインポートして解析することです。これを行うには、別の Python ライブラリである Pandas を使用する必要があります。これは、Python 用の使いやすいデータ構造とデータ分析ツールを提供するもう 1 つのオープン ソース ライブラリです。

ご覧のとおり、最初に readcsv 関数を使用してデータセットをローカル変数にインポートし、次に入力 (train_x、test_x) と予想される出力 (train_y、test_y) を分離して 4 つの個別の行列を作成します。これらは次のようになります:

トレーニングとテスト用のデータを準備しました。ここで、ニューラル ネットワークに必要な特徴列を定義する必要があります。

ここで、使用するモデルを選択する必要があります。私たちの問題では、属性データに基づいてアイリスの種類を予測しようとしています。したがって、TensorFlow API から推定器を選択する必要があります。 Estimator クラスのオブジェクトは、TensorFlow グラフを構築し、TensorFlow セッションを実行するロジックをカプセル化します。この目的のために、DNN 分類器を使用します。それぞれ 10 個のニューロンを持つ 2 つの隠し層を追加します。

その後、トレーニング データセットから選択したデータを使用してニューラル ネットワークをトレーニングします。まず、トレーニング関数を定義します。この関数には、スケーリングして複数のバッチを作成し、トレーニング セットからデータを入力する必要があります。トレーニング サンプルがランダムであれば、トレーニング効果は向上します。そのため、シャッフル関数が呼び出されます。要約すると、train_function はトレーニング済みのデータセットを使用し、データからランダムにデータを選択し、そのデータを DNN 分類器のトレーニング方法にフィードバックして、大量のデータを作成します。

最後に、評価関数を呼び出してニューラル ネットワークを評価し、ネットワークの精度を算出します。

このコードを実行すると、次の結果が得られます。

つまり、私のニューラル ネットワークの精度は 0.93 となり、かなり良好です。その後、単一のデータで分類器を呼び出して、予測を行うことができます。

結論は 

ニューラル ネットワークは長い間存在しており、今日の重要な概念のほとんどすべては 70 年代または 80 年代にまで遡ることができます。この分野全体の進歩を妨げていた問題は、これらのプログラムを実行するための強力なコンピューターと GPU がなかったことです。今では、これが可能になっただけでなく、Google はオープンソースの TensorFlow という素晴らしいツールを作成することで、ニューラル ネットワークを普及させました。現在では、ニューラル ネットワークの実装をさらに簡素化する、より高レベルの API も存在します。 Keras など、いくつかは TensorFlow でも実行されます。この問題については、今後の記事でさらに詳しく検討する予定です。

英語のオリジナルリンク: https://rubikscode.net/2018/02/05/introduction-to-tensorflow-with-python-example/

<<:  ACM 発表: 2017 年チューリング賞はチップ業界の巨匠 2 名に授与される

>>:  チャットボット: ビジネスを成長させる 8 つの方法

ブログ    

推薦する

人工知能:創薬の厳しい時代に革命を起こすもの

業界の専門家は、人工知能(AI)の強力なサポートにより、医薬品の研究開発分野は大きな変化の波に見舞わ...

HKU などが GraphGPT をリリース: パラメータを 1/50 に微調整し、精度を 10 倍向上! LLMは長いトークンなしでグラフ構造を理解できる

グラフニューラルネットワークは、グラフ構造のデータを分析および学習するための強力なフレームワークとな...

Orange3 の探索: データ マイニングと機械学習の新しい世界を開きます。

Orange3 は、豊富なデータ処理、分析、モデリング機能を提供する強力なオープンソースのデータ視...

快手 - ICIP 2019 モバイルビデオ修復コンテストの登録開始

最近、Kuaishou-ICIP 2019モバイルビデオ復元コンテストの登録が正式に開始されました。...

AI支援ツールを使用してソフトウェア要件を定義する

Userdoc は、ソフトウェア要件ド​​キュメントの作成を支援する AI 支援サービスです。最近の...

IIHS:自動運転車は交通事故を3分の1しか減らせない

道路安全保険協会(IIHS)が実施した調査によると、自動運転車は期待したほど事故を減らさない可能性が...

トレーニング時間とパラメータの数は100分の1に削減され、ラベルは予測に直接使用され、GNNを超えるパフォーマンスを実現

従来のラベル伝播法とシンプルなモデルを組み合わせると、一部のデータセットでは現在の最適な GNN の...

危険信号:Google AIはマスクを着用した女性を口をテープで塞いでいる女性と認識

FuninUSA によれば、Microsoft、Google、IBM のビジョン システムが現実世界...

...

...

...

...

自己一貫性を利用して大規模モデルの推論能力を向上させたGoogleは、ベンチマークの数学問題の75%を解決しました。これはGPT-3よりも20%高い数値です。

言語モデルはさまざまな NLP タスクで目覚ましい成功を収めていますが、その推論能力は不十分な場合が...

2017年データサイエンスおよび機械学習業界現状調査:Pythonが最も人気のある言語

[[209261]]今年、Kaggle はデータ サイエンスと機械学習の状況を包括的に理解することを...