Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

機械学習 (Machine Learning)

Tensorflowにおけるplaceholderとは?v2.0以降での置き換え

投稿日:2022年9月16日 更新日:

 

<目次>

(1) Tensorflowにおけるplaceholderとは?v2.0以降での置き換え
 (1-1) 「placeholder」とは
 (1-2) サンプルプログラム
 (1-3) Variableとの違いは?
 (1-4) TensorFlow 2.0以降における置きかえ

(1) Tensorflowにおけるplaceholderとは?v2.0以降での置き換え

(1-1) 「placeholder」とは

・placeholderはTensorflowにおける変数の一種で「後で値を代入する予定の変数」です。
・これにより、データがない状態でも処理やグラフを作成する事ができます。
・更に、セッションオブジェクトを作って関数に対して実行する際に、グラフの一部の範囲に対しても実行可能
⇒この部分評価はTensorFlowの強みの1つでもある
・placeholderは静的にサイズを指定する必要はなく、例でもNoneを指定して実行時にdictionaryで任意のサイズを指定しています。
 
(例)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

# placeholderを使って、先に関数を組み立て
# この時点ではまだxには値は代入されていない
# またxのサイズはNoneを指定し、後からdictionaryで任意のサイズを指定可能に
x = tf.placeholder("float", None)
y = x * 3

with tf.Session() as session:
    # 関数「y = x * 2」にx = 1,2,3を代入し、それぞれの結果を表示
    #  ⇒グラフの一部の領域に対して計算を実行できる
    result = session.run(y, feed_dict={x: [1, 2, 3]})
    print(result)
(図111)

・上記の例でもx: [1, 2, 3]の範囲で実行し、結果はyが[3. 6. 9.]になっています。

(1-2) 「placeholder」は多次元にもできる

多次元に定義してarrayを保持する事もできます。
例では2行×3列のマトリクスを定義し、適当な値を設定しています。この時、placeholderの定義は[None, 3]となっており、N行3列のデータである事を意味しています。
 
(例)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

# placeholderを使って、先に関数を組み立て
# この時点ではまだxには値は代入されていない
# またxのサイズは[None,3]を指定し、N行×3列のデータを後からdictionaryで指定可能に
x = tf.placeholder("float", [None,3])
y = x * 3

with tf.Session() as session:
    # 関数「y = x * 2」に代入するxの配列を定義
    x_array = [[1, 2, 3],
              [4, 5, 6],]
    result = session.run(y, feed_dict={x: x_array})
    print(result)
(図121)

(1-3) Variableとの違いは?

●tf.Variable

・トレーニング時の変数(例:重みw、バイアスb)などに使用します。
・定義する時に、初期値の設定が必要です。

●tf.placeholder

・トレーニング用の実データ(例:x1,x2,…,xn)を代入するために使用します。
・定義する時に、初期値の設定は不要です(Session.runの中のfeed_dict引数で指定すればOK)

(1-4) TensorFlow 2.0以降における置きかえ

・この「placeholder」は2.0以降のバージョンとは互換性がないため、2.0以降のバージョンを使う場合は以下の対応が必要となります(パフォーマンス向上と簡略化のため)。
 
(図131)

(主な修正ポイント)
・関数は「tf.function」を使用
・Session.runは使えないので、通常の関数呼び出しに変更
 
(修正コード例)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf

@tf.function
def f(x):
    y = x * 3
    return y

def main():
    
    # 関数「y = x * 2」に代入するxの配列を定義
    x_array = tf.constant([[1, 2, 3],[4, 5, 6],])
    y = f(x_array)
    print(y)
        
if __name__ == "__main__":
    main()
(結果例)

tf.Tensor(
[[ 3  6  9]
 [12 15 18]], shape=(2, 3), dtype=int32)
 
(図132)
⇒結果が同じになる事を確認
 

Adsense審査用広告コード


Adsense審査用広告コード


-機械学習 (Machine Learning)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

ディープラーニングのパーセプトロンとは?Pythonで実装したサンプルもご紹介

  <目次> (1) ディープラーニングのパーセプトロンとは?Pythonで実装したサンプルもご紹介  (1-1) パーセプトロンとは?  (1-2) 処理の流れ  (1-3) サンプルプロ …

no image

ソフトマックス関数とは?ロジスティック回帰との関係性もご紹介

<目次> (1) ソフトマックス関数とは?ロジスティック回帰との関係性もご紹介  (1-1) 目的  (1-2) ソフトマックス関数とは?  (1-3) ソフトマックス関数の特徴  (1-4) ソフト …

ロジスティック回帰をエクセルで計算する方法(ディープラーニング)

<目次> (1) ロジスティック回帰をエクセルで計算する方法(ディープラーニング)  (1-1) 【前提①】ロジスティック回帰とは?  (1-2) 【前提②】解決したい課題  (1-3) ロジスティッ …

ディープラーニングのロジスティクス回帰をPythonで実装した例をご紹介

  <目次> (1) ディープラーニングのロジスティック回帰をPythonで実装した例をご紹介  (1-1) 実装のフロー  (1-2) 実装例 (1) ディープラーニングのロジスティック回 …

no image

確率と尤度の違いとは?概念や数式なども交えて比較紹介

  <目次> (1) 確率と尤度の違いとは?概念や数式なども交えて比較紹介  (1-1) 確率:「パラメータ」からデータの「確率」を算出した値?  (1-2) 尤度:「データ」からパラメータ …

  • English (United States)
  • 日本語
Top