#0019

AnacondaでのTensorFlow環境構築と基礎的な使い方

2018-05-29 20:54 2018-05-29 11:54 "ゆざ"

インターンのゆざ(@yuzajo_plan)です。

Pythonを使ってプログラミングを始めたい、実装したいと思った時に1番初めに面倒な作業がPythonを自分のPCで使うための環境を作ることです。

ここでは、そんな時にうってつけの便利なPythonのパッケージツール「Anaconda」のインストールから実際にコードを書ける環境を構築するまでを解説していきます。

さらに、MNIST実行環境の準備から手書き文字識別までを徹底解説!で登場したTensorFlowの使い方についてのわかりやすく解説していきます。

スポンサーリンク

この記事を読んだ後に身につくこと

今回の記事を読んで学べることは、

  1. Anaconda(アナコンダ)のインストールから基本的な使い方
  2. TensorFlow(テンサーフロー)のインストールから基本的な使い方

の大きく分けて2つです。

これから、Pythonを実装する環境を構築したいと思っているPython・機械学習初心者の方にややこしいことを抜きで、簡単に環境構築ができ、手を動かしてもられるように解説していきます。

Anaconda(アナコンダ)はどうやって使うの?

では、まずAnaconda(アナコンダ)のインストールから使い方についてです。

以前の記事(MNIST実行環境の準備から手書き文字識別までを徹底解説!)でも簡単に紹介はしていますが、今回はより具体的に説明していきます。

Anaconda(アナコンダ)とは

Anacondaロゴ

Anacondaとは、Python本体とPythonでよく利用されるライブラリがセットになったPythonパッケージです。

Pythonを使ってプログラミングを書いていくことには、「import ◯◯」といったように多くのライブラリをインポートするのが一般的です。

このAnacondaを使いことで、それらのライブラリを簡単に管理・インストールすることができます。

さらに、仮想環境を設計することが簡単にできるため、Python3系とPython2系を使い分けたい時にもとても便利です。

また、Anacondaのパッケージの中にはjupyter notebook(ジュピターノートブック)というブラウザで動作するプログラムの対話型実行できるツールがあります。

このツールを使うことで、簡単に自分の書いたプログラミングを実行することができるのです。

Anacondaのインストール

それでは、Anacondaをインストールしていきましょう。

インストーラのダウンロードは、Anacondaの公式ホームページから行いましょう。

まず、自分が使っているPCのOSを選択します。

Python3系とPython2系があるのですが、特別な理由がない方はPython3.6 version(2018年5月現在)を選んで下さい。

私は、macOSを使用しているので、以下のように選択しました。

公式のダウンロード画面

Python3系とPython2系は同じようにみえても、互換性はなく、コードの仕様もかなり違うので注意してください。

Jupyter notebook(ジュピターノートブック)を使ってみよう!

では、次にJupyter notebookを動かしていきましょう。

Anacondaを起動して、すぐの画面に現れるJupyter notebookをInstallのボタンを押してインストールしましょう。

Anaconda起動画面

スクショはインストール済みのものです。インストールが済むと、Installの文字がLaunchに変わります。

早速、Launchボタンを押してJupyter notebookを起動させましょう。これでブラウザ上にJupyter notebookが開くはずです。

右上の「New」のボタンを押すと、「Python3」という選択肢があるのでこれを押すと新しくJupyter notebookでコードを書くためのファイルが作成されます。

notebookを起動させてすぐ

そうすると、このようにプログラミングを書くことができる画面が出てきます。

ちなみにこのまま保存すると、User/以下のパスに保存されてしまうので「AnacondaProjects」といったような新しいフォルダを作成してからそのフォルダ内にファイルをつくることをおすすめします。

notebookで新規ファイルを開く

それでは、「Hello world!」を出していましょう。

print("Hello world!")

上記のコードを打ち込み、ブラウザ上部にある「Run」のボタンで実行します。(RunのショートカットキーはCtrl + Enter)

hello worldを実行

無事、実行できたのではないでしょうか。

これで、Pythonでコードを書いていく環境は整いました。

ちなみに便利なショートカットキーもたくさんあるので、上部の1番右にあるキーボードマークを押すと、確認できるので見てみてください。

それと、注意点がもう一つ。

Jupyter notebookで書いたプログラミングを保存すると拡張子が「.ipynb」となります。

通常のPythonを対話式でない形で書くと「.py」となり、扱い方が異なるので、「.ipynb」から「.py」に変換するか、コードを新たにファイルを作成してコピペを貼る必要が気をつけてください。

TensorFlow(テンサーフォロー)はどうやって使うの?

次は、TensorFlow(テンサーフォロー)のインストールから使い方についてです。

少しわかりにくいところはありますが、これをばっちり使えることができれば、機械学習を始めるのに恐れることはありません。

TensorFlow(テンサーフォロー)とは

tensorflowロゴ

TensorFlow(テンサーフォロー)とは、Google社によって開発させた機械学習を行うためのオープンソフトウェアライブラリです。

要は、誰でも簡単に機械学習を使えるようにするための便利なライブラリと思ってください。

実践的な活用は、前回の記事(MNIST beginnerに隠れ層を加えたニューラルネット解説)を参考してみてください。

TensorFlowのインストール

TensorFlowのインストールは、先程インストールしたAnacondaから行うことができます。

まずは、Anacondaを起動してすぐの画面の左横にある「Environments」を押してください。

Environments

そうすると、現在の環境一覧とその中に入っているライブラリを確認することができます。

ここから、新規で仮想環境を作成することもできますし、新たにライブラリをインストールすることもできます。

今回は、base(root)にTensorFlowをインストールしていきます。

installedとなっているセレクト窓を①Allに変更して、②「tensorflow」と検索します。

「tensorflow」と検索

これで、「tensorflow」というライブラリが見つかるので、これをインストールしましょう。

「tensorflow」の左横にあるチェックボックスにチェックを付けて、右下の「Apply」ボタンを押してインストールできます。

無事に終えたら、新しいファイルをJupyter notebookで開いて、

import tensorflow

と打ち込みましょう。

これでなにも、エラーが出なければ無事にインストール完了です。

もし、ここまでできたのにエラーが生じてしまった場合はAnacondaを再起動してみるか、TensorFlowをインストールした環境で実行を行えているかを確認しましょう。

TensorFlowを使ってみよう!

では、実際にTensorFlowを使っていきましょう。

TensorFlowには

  • 定数(constant)
  • 変数(Variable)
  • プレースホルダ(Placeholder)
  • セッション(Session)

という聞き慣れない言葉もあると思うので、順を追って説明していきます。

「定数(constant)で足し算」を実行する

まずは、足し算です。普通のPythonでは、

a = 1
b = 1
sum = a + b
print("答えは%sです。"%sum) # => 答えは2です。

と簡単に書けますが、TensorFlowを使うとこのようになります。

# tensorflowのインポート
import tensorflow as tf

# 定数a,bをtensorflowで表現
a = tf.constant(1)
b = tf.constant(1)

# a + b の足し算
sum = tf.add(a, b)

# セッション
sess = tf.InteractiveSession()

print("答えは%sです。"%sess.run(sum)) # => 答えは2です。

まずは、tensorflowを「tf」のみで使えるようにインポートします。

その後、変化することのない定数a、bをtf.constantを使って定義します。

足し算は、

# a + b の足し算
sum = a + b

といったようなコードは書けず、tf.addというメソッドを使わないといけません。これは、

# aを表示
print(a) # => Tensor("Const:0", shape=(), dtype=int32)

aの中にはだたの数字ではなく、テンソルという情報の塊で格納されているためです。

次が、TensorFlowで最もややこしい「セッション」についてです。

# セッション
sess = tf.InteractiveSession()

TensorFlow は事前に演算処理の一連の流れである「データフローグラフ」を作り、そして演算グラフにデータを入力するという 2 段構えでプログラムを実行します。

このプログラムを動かす仕組みを「セッション」といいます。

TensorFlowでは、データフローグラフであるsumを実行するには、演算グラフにデータを入力する、つまり、sess.run(sum)を行う必要あるのです。

sessionについての解説

ちなみにセッションは他にもtf.Sessionというのがあります。これとの違いは、公式ページには

The only difference with a regular Session is that an InteractiveSession installs itself as the default session on construction. The methods tf.Tensor.eval and tf.Operation.run will use that session to run ops.

This is convenient in interactive shells and IPython notebooks, as it avoids having to pass an explicit Session object to run ops.

【TensorFlow公式HP】https://www.tensorflow.org/api_docs/python/tf/InteractiveSession

とあり、「InteractiveSessionのほうが明示的なSessionオブジェクトを渡す必要がないためのでJupyter notebookなどの対話型実行環境では適している」といったように記してありました。

正直、使い方が若干異なりますが、どちらも同じ働きをするのでどちらでも構いません

「変数(Variable)でカウントアップ」を実行する

次に変数(Variable)を使ったカウントアップを実行します。

まずは、TensorFlowを使わないプログラムです。

def count_up(num):
    num += 1
    return num

init = 0
num = count_up(init)
print("カウント:%s"%num) #=> カウント:1
num = count_up(num)
print("カウント:%s"%num) #=> カウント:2
num = count_up(num)
print("カウント:%s"%num) #=> カウント:3

そして、TensorFlowを使用したプログラムがコチラです。

# tensorflowのインポート
import tensorflow as tf

# 変数(counts)の定義
counts = tf.Variable(0, name="counts")
num = tf.constant(1, name="num")

# カウントアップする
add_op = tf.add(counts, num)

# countsの値を更新
up_op = tf.assign(counts, add_op)

# セッション
sess = tf.InteractiveSession()

# 変数を使う場合はまず初期化が必要
init = tf.global_variables_initializer()
sess.run(init)

# カウントアップを計3回実行
print("カウント:%s"%sess.run(up_op)) #=> カウント:1
print("カウント:%s"%sess.run(up_op)) #=> カウント:2
print("カウント:%s"%sess.run(up_op)) #=> カウント:3

初めに、変数を

counts = tf.Variable(0, name="counts")

と定義して、この値を更新してカウントアップを行なっていきます。

add_op = tf.add(counts, num)

add_opでは、countsとnumの足し算を行なっています。numは、定数で1が入っているので、これがカウントアップの元になります。

# countsの値を更新
up_op = tf.assign(counts, add_op)

tf.assignは、countsにadd_opを代入するという役割があります。

そのため、これでcountsの値を更新することができます。

あとは、先程と同様にセッションを行うのですが、その前に変数を使う場合は以下のような処理がマストで必要です。

# 変数を使う場合はまず初期化が必要
init = tf.global_variables_initializer()
sess.run(init)

これは、データフローグラフのセッションを実行する前に変数の初期化を行います。

tf.global_variables_initializerは、すべての変数に対して適応する初期化を意味しています。

print(sess.run(up_op))

sess.run(up_op)を行うと、countsをadd_opに更新することができます。

そして、add_opは継続して更新しているcountsにnumを加えるという処理なので、このプログラムを続けて実行すると、1,2,3...といったようなカウントアップの結果を得ることができます。

「プレースホルダ(Placeholder)で入力値を決めて足し算」を実行する

プレースホルダとは、値を後から入力することができる空の箱のようなものです。

『「定数(constant)で足し算」を実行する』で解説したコードを少し変形してプレースホルダ(Placeholder)で入力値を決める足し算を行なっていきます。

以下がそのプログラムです。

# tensorflowのインポート
import tensorflow as tf

# 定数の定義
a = tf.constant(1)
# プレースホルダ(b)を用意
b = tf.placeholder(tf.int32)

# a + b の足し算
sum = tf.add(a, b)

# セッション
sess = tf.InteractiveSession()

# プレースホルダを代入した結果
print("答えは%sです。"%sess.run(sum, feed_dict={b:1})) # => 答えは2です。
print("答えは%sです。"%sess.run(sum, feed_dict={b:6})) # => 答えは7です。

bは先程の場合は定数の1でしたが、今回はプレースホルダを使用します。

# プレースホルダー(b)を用意
b = tf.placeholder(tf.int32)

tf.int32とは、32 bit符号付き整数を意味しています。小数点を用いる値を使用したい場合は、tf.float32やtf.float64を使用してください。

プレースホルダに入力する値を指定するには、

# プレースホルダを代入した結果
print("答えは%sです。"%sess.run(sum, feed_dict={b:1})) # => 答えは2です。

このようにfeed_dict={b:1}とすると、sumを求めるために必要なプレースホルダbに1を代入することができます。

【応用】「ニューラルネットワーク」を実行する

ここまで理解できた人は、MNIST実行環境の準備から手書き文字識別までを徹底解説!に進んでください。

TensorFlowを使ったニューラルネットワークのコードが記載しています。自分の手で実行してみましょう。

これを乗り越えることで、より実践に近いカタチでTensorFlowを使えるようになっていくはずです。是非頑張ってください。

今回のまとめ

今回は、AnacondaとTensorFlowのインストールから基本的な使い方について解説しました。

これを気に機械学習を勉強したいと思っている人やPythonを使ってなにかしてみたいと思っている人は是非ほかの記事も読んでみてください。

プログラミング未経験の私がPythonの機械学習で手書き文字の識別を行うまで

前半:知識ゼロで機械学習・AIを理解するために必要なニューラルネットワークの基礎知識

後半:MNIST実行環境の準備から手書き文字識別までを徹底解説

この記事を書いた人

学生Webエンジニア PLANインターン生 PHP Laravel Python HTML CSS JS

【名前】 "ゆざ"

【関連】 株式会社PLAN / MIYABI Lab / Tmeet(twitterユーザーマッチングサービス) /

【MIYABI Lab運営】23歳/同期がト◯タやMicr◯softに就職する中、ベンチャーに未経験でWebエンジニアになるのを選んだ脳科学専攻の理系院生◆人見知り日本縦断◆機械学習/Web歴5ヶ月

Twitterやってます

最新の技術ブログはこちら