テクノロジー

【初心者向け】機械学習のオープンソース「Tensorflow」使い方入門

【初心者向け】機械学習のオープンソース『Tensorflow』使い方入門

機械学習について調べていると、「TensorFlow」というワードが目に入りますよね。機械学習を学ぶ多くの人がみんな当たり前のように使っているけど、一体何なのか分からないという人もいるかもしれません。TensorFlowという言葉をGoogleで検索しても、”TensorFlowはGoogleが開発しオープンソースで公開している、機械学習に用いるためのライブラリ”とあるのでオープンソース?ライブラリ?などの分からない言葉が多いように感じるでしょう。

この記事を読めば、ライブラリやオープンソースという言葉はどういう意味なのか、そしてTensorflowとは一体何者で、どういう使い方ができるのかが分かります。そして、チュートリアルとしてTensorflowのインストールから、MNISTというサンプルプログラムのご紹介までを行います。MNISTというのは機械学習による画像分類のプログラムであり、機械学習の登竜門と言えます。Tensorflowを利用してMNISTを動かす事で、機械学習の第一歩を踏み出しましょう!

そこで今回は、Tensorflowについて、初心者の方にも分かりやすいようにゼロから解説します。

Googleが開発!オープンソースTensorflowとは

TensorFlowのイメージ
Tensorflowとは、機械学習用のライブラリのこと。ライブラリとは、いろんな事を簡単に行うためのツールセットのようなものです。TensorFlowは検索エンジンの最大手、世界的大企業のGoogleが開発しているだけあって、非情に信頼性が高く、様々な開発や研究で採用されています

GoogleはTensorflowをオープンソースという形態で公開しています。これは、ソフトウェアの公開形態の一種で、”ソースコードを全て公開する”という事です。Tensorflowは全てのソースコードをGitHubという有名なサイトで公開しています。以下のURLが、Tensorflowのソースコードなので、ぜひご覧ください。

tensorflow/tensorflow
An Open Source Machine Learning Framework for Everyone - tensorflow/tensorflow

機械学習のオープンソースを利用するメリット

オープンソースのイメージ
オープンソースでソフトウェアを公開する事には、いくつかのメリットがあります。その中でも大きなものを分けると、信頼性と安定性の2つ。

信頼性とは、ソフトウェアの不正な利用がなされにくいという指標です。つまり、セキュリティがどれだけしっかりしているかという事を意味します。オープンソースのソフトウェアは一般的に信頼性が高いです。その理由は、ソースコードを公開する事によって、多くの人にソースコードの脆弱性(システム上の欠陥)を指摘してもらえ、更には修正までもしてもらえるからです。

企業が数十人で開発するようなソフトウェアは、どうしても脆弱性を見落としやすいです。しかし、オープンソースのソフトウェアは24時間365日、何万もの人にコードをチェックされています。そのため、普通なら見落とされてしまうような脆弱性もオープンソースならば発見されて、更には即座に修正しやすいに違いありません。

次に、安定性についてです。これは、ソースコードをチェックされて修正され続けるという意味を含みます。しかしそれと同じくらい、企業のプログラムと違ってサポートが打ち切られる事がない事も大きな魅力です。つまり、突然のサポート終了によって被るであろう様々な被害を回避できる点は、ビジネス用途では特に絶大なポイントでしょう。

Tensorflowのインストールの方法

インストールのイメージ
TensorFlowのインストールは特に難しいことはなく、pipコマンドでインストールできます。しかし、その前にまずは自分の導入するべきTensorflowのバージョンを確認しましょう。以下のURLの”テスト済みのビルド構成”を参照してください。

ソースからのビルド  |  TensorFlow

そして、自分のPythonのバージョンを確認してそれに合ったTensorFlowのバージョンを確認しましょう。自分のPythonのバージョンは、ターミナルに”Python -V”と入力すれば確認できます。

また、GPUでTensorflowを動かしたいのであれば、自分のCUDAとcuDNNのバージョンも確認しましょう。CUDAとはNVIDIAが提供するGPU利用の為のプラットフォームであり、cuDNNとはCUDAを土台とした機械学習用のライブラリです。TensorflowはGPUを使う際、cuDNNを通じてCUDAを利用します。その為、CUDAとcuDNNのバージョンとの整合性が必要になるのです。CUDAのバージョンは”nvcc -V”で確認可能です。cuDNNはプログラム上で確認するのが最も楽です。pythonインタプリタをターミナル上で立ち上げる為に、まず”python”と入力しましょう。次に”from cupy.cuda import cudnn”と入力し、最後に”cudnn.getVersion()”と入力しましょう。出てきた数値がcuDNNのバージョンです。

導入するべきバージョンが決まったら、まずはpipコマンド自体をアップグレードする為に、”pip install –upgrade pip”とターミナルに入力しましょう。アップグレードが完了したら、”pip install –upgrade tensorflow”などのように入力すればインストールが開始されます。バージョンを指定したい場合、例えば1.15を入れたいならば”pip install –upgrade tensorflow==1.15″のように入力します。また、GPUで動かすのであれば、”pip install –upgrade tensorflow-gpu”と入力しましょう。

使い方例:Tensorflowで画像認識を試してみる

画像認識のイメージ
Tensorflowをインストールしたら、まず最初にMNISTというタスクを行いましょう。これは0から9のいずれかの数値が手書きされた画像を、0から9のラベルに分類するタスクで、いわゆる画像認識、その中でも画像分類と呼ばれるタスクになります。

つまりMNISTは機械学習エンジニアが一番最初にやるタスクであり、機械学習版のハローワールドの位置付けでしょう。また、初心者の方でなくとも、新しいマシンを購入した時などにMNISTをやる事で環境設定が上手くいっているかを確認できます。皆さんも新しいマシンを購入した時など、環境が変わった時はMNISTを動かして確認すると良いでしょう。

今回は、以下の公式チュートリアルのソースコードを活用して画像認識を行いましょう。チュートリアルには詳しい解説もついているので、より深く学びたい人はぜひ一度目を通すことをおすすめします。

Training a neural network on MNIST with Keras  |  TensorFlow Datasets

Tensorflowで注意する事

注意のイメージ
Tensorflowは強力なライブラリですが、その一方で基本的なライブラリでもあります。実はTensorflowを生で使うことはなかなかなく、基本的にはTensorflowをバックエンドとして(土台として)、Kerasなどのライブラリを使います。つまり、Tensorflow単体でプログラムをする事は珍しく、基本的にはTensorflowに抱き合わせでついているKerasというライブラリを通じてTensorflowを使うケースが多いです。

Kerasとは、Tensorflowの機能を利用してより容易に機械学習ができるようにしたライブラリです。Kerasを使えばTensorflowよりもより簡易にプログラムを記述できるので、何か理由がない限りは、Tensorflowを生で使うよりはKerasなどを一枚噛ませて運用するのがよいでしょう。

また、Tensorflowというよりも機械学習一般に言える事ですが、GPUを用いなければ学習に非常に時間がかかってしまいます。機械学習は極めて大量の行列演算などを行う為、GPUによる並列計算能力がなければ非情に計算に時間がかかってしまいます。このため、最初はCPUによる学習でもよいですが、慣れたら実用性を高める為にもGPUによる機械学習に挑戦しましょう。

まとめ
さて今回は、ライブラリやオープンソースという言葉の意味や、Tensorflowについて解説しました。ライブラリとは便利な機能を集めた物で、TensorflowはGoogleが開発した、機械学習用の機能を集めた機械学習用ライブラリである事。そしてオープンソースという、ソースコードを後悔することで信頼性と安定性を高める形態で公開されています。

Tensorflowは機械学習においてはとてつもなく広く用いられているライブラリです。近年ではFacebookに開発されたPyTorchというライブラリとしのぎを削っていますが、ビジネス分野ではTensorflowが支配的地位を確立しています。

つまり、Tensorflowをマスターする事は、機械学習を学ぶための一歩をふみだしたと言えるでしょう。ぜひ、TensorFlowを使って機械学習の世界をガッツリ学びましょう!

トップへ戻る
タイトルとURLをコピーしました