テクノロジー

今更聞けないTensorFlowの基本!placeholderの使い方まとめ

今更聞けないTensorFlowの基本!placeholderの使い方まとめ

TensorFlowは機械学習の文脈で出てくる言葉ですが、Tensorなんて英語はそんなに使わないし、言葉を聞いただけだとちょっとピンとこないですよね。

Tensorというのは、ここでは多次元配列のことで、計算負荷の問題を起こしがちなものです。TensorFlowは、その問題を克服して機械学習の計算を素早くおこなうための機械学習用フレームワークで、これを使うことで、だれもが機械学習プログラムを記述できます。

とはいえ、いきなりTensorFlowを導入して活用してくれと言われても、それはなかなかできることではありません。また、TensorFlowについて自ら挑戦してみようとすると、placeholderという概念でつまずいてしまう方がよくいます。

TensorFlowを使うには、初めに変数や定数、placeholderという言葉について理解する必要があります。そう聞くとハードルが高く感じてしまうかもしれませんが、言葉の意味やできることについても、わかりやすくお伝えします。

ですから今回は、TensorFlowを使ううえで知っておくべき基本の概念を、placeholderも含め、厳選してお伝えします。

TensorFlowってなに

ライブラリのイメージ
TensorFlowは、Googleが開発した機械学習用のフレームワークです。ニューラルネットワークのライブラリとして知られるKerasやEstimatorも、TensorFlow上で動作します。

TensorFlowではニューラルネットワークなど、高度な機械学習プログラムの開発に利用され、画像認識や音声認識など、さまざまな分野の人工知能(AI)を構成しています。TensorFlowは、C、C++、Python、Java、Goと、多くの言語に対応し、さまざまな現場で活用できます。ですから、異なる言語を用いる複数の現場で機械学習プログラムを作成するような場合であっても、同じ知識を活かせるでしょう。

また、開発においてテストはつきものですが、TensorFlowは充実したテストツールも備えています。Eager Executionを用いれば、迅速なデバッグをおこなうことができます。

ディープラーニングのフレームワークとしては、TensorFlowのほかにFacebookが開発したPytorchやPreferred Networks製のChainerも有名で、特に世界的にはPytorchの興隆も強いところではありますが、日本ではまだまだTensorFlowが根強いでしょう。ですから、TensorFlowを使うことができれば、日本における機械学習のフレームワーク利用の大勢に追随できるといえます

TensorFlowの基本、まずは変数と定数について知っておこう

数式のイメージ

TensorFlowを利用するうえでは、まず変数と定数について知っておきましょう。変数とは、文字通り変更可能な数で、定数とは、変更できない数です。変数や定数を定義することで、その値を用いたさまざまな計算を行えます。

TensorFlow上では、変数は次のように定義します。

import tensorflow as tf
var = tf.Variable(3)

そして、次のassign関数を用いることで、新たな値を代入することができます。

calc_op = var * var
assign_op = tf.assign(var, calc_op)

なお、ここではcalc_opにかけ算の演算を保存し、次の行のtf.assign関数で呼び出しています。var変数に、cal_opの結果であるvar×varが代入されました。

一方で、定数は次のように定義します。

const = tf.constant(3)

定数も、変数と同様にたし算やかけ算を定義することができます。

calc_op = const + var

変数や定数を用いてたし算やかけ算をおこなえることを確認しました。もちろん、機械学習の結果を加工するなど、プログラムの基本となる操作です。

TensorFlowの基本「placeholder」とは

数学のイメージ

さて、TensorFlowを使ううえで次に知っておく必要があるのが、placeholderという概念。変数や定数と比べると、placeholderということばは見慣れないものかもしれません。

placeholderはTensorFlowにおける特徴的な概念で、なおかつ重要ですが、難しくはありません。placeholderは、まだわからない値を受け取るための格納庫の役割を果たしています。placeholderを用いることで、定義されていない値についても、その値に対しておこなうさまざまな計算をあらかじめ準備しておくことができます。

placeholderは、次のように定義します。

holder = tf.placeholder(dtype=tf.float32)

dtypeパラメータで型を指定します。ここではfloat32型を指定しました。

変数との違いは、初めに値を指定しないというところです。セッションにおいて初めて値が明らかになったとき、値を代入して用います。

placeholderの使い方

うまく使うイメージ

placeholderを定義してみましたが、TensorFlowでplaceholderを活用するにはどうすれば良いのかということについて、さらに説明を加えていきます。

ここまでのコードと同様に、placeholderについても数式を定義しましょう。

calc_op = holder + const

そして、次のように記述して計算を実行してみましょう。

sess = tf.Session()
sess.run(tf.initialize_all_variables())
result = sess.run(calc_op, feed_dict={
holder: 100
})
print(result)

ポイントは、feed_dictパラメータに辞書型で{ holder : 100 }と値を指定しているというところです

これによって、セッションを呼び出して実行するときまで値がわからないような場合でも、数式を定義することができました。

placeholderを使うとできること

ライブラリのイメージ

TensorFlowでplaceholderを用いる場合は、実行時にfeed_dictパラメータで値を指定しました。これは、ファイルからパラメータを読み込む場合など、プログラムの外側にある値を計算に用いたいときに有効です。

機械学習プログラムを実行する場合には、データの件数や機械学習に関する各種パラメータなど、実行時ごとに変わる項目が多数存在します。placeholderを用いることで、そういった項目に柔軟に対応できるということです。

まとめ

さて今回は、TensorFlowを用いるうえでの基本的な概念として、変数、定数、placeholderについて説明しました。

変数は変更が可能な数、定数は変更できない数でした。そして、placeholderは特徴的で、実行時まで値の入力を保留できる箱のような役割を果たしていました。

ですから、ファイルからのデータの読み込みなど、TensorFlowで機械学習プログラムを作成するうえで必要なプロセスを、placeholderを使うことで実現できます。

機械学習に関する知識を身につけて、いざTensorFlowを使おうという段階の人にとって、placeholderというのはよくあるつまずきポイントです。そこさえ乗り越えれば、いろいろなコードを書いてみることができるでしょう。ぜひ、TensorFlowの力を、placeholderを使ったコードを書くことを通じて実感しましょう。

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