TensorFlow 基本
今回はTensorFlowの基本をやります。定数(constant)
定数を加算してその結果を表示するサンプルをやってみます。
import tensorflow as tf
# 定数を定義
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0)
# 計算式を定義(加算)
node3 = tf.add(node1, node2)
# 計算を実行
sess = tf.Session()
print("\n計算結果: ", sess.run(node3))
sess.close()
イメージ
tf.constant
定数を定義します。サンプルではFloat型の3.0、4.0を定義しています。dtypeは省略することができ、省略すると自動的に型を判断します。
tf.add
引数を加算し、引数の型のTensorを戻します。単にTensor同士を + としても加算されます。tf.Session
セッションオブジェクトを作成します。セッションオブジェクトのrunメソッドで実際の処理を行います。
(定義部分は定義を行うのみで実際の処理は行いません。)
処理が終わったらcloseメソッドで処理を閉じます。
以下のように記述する場合は、自動的にclose処理が行われるため、close処理は必要ありません、
with tf.Session() as sess:
sess.run(...)
プレースホルダ(placeholder)
プレースホルダは後で値を入れるための入れ物です。
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# プレースホルダ定義
node1 = tf.placeholder(tf.float32)
node2 = tf.placeholder(tf.float32)
# 計算式定義(加算) +はtf.addと同じ動作をします
node3 = node1 + node2
# プレースホルダに値をセットして計算実行
with tf.Session() as sess:
print("\n計算結果: ", sess.run(node3, {node1: 3, node2: 4}))
イメージ
tf.placeholder
プレースホルダを定義します。定義時は入れ物だけ定義して、実際に計算を実行するときに値をセットします。出力ログ制御
定数のサンプル実行時はログがたくさん出てきたので、今回は出力するログにフィルタを掛けました。フィルタを掛けるにはos.environ['TF_CPP_MIN_LOG_LEVEL']を使用します。
os.environ['TF_CPP_MIN_LOG_LEVEL']にセットする値 | 表示するログ |
---|---|
0 | すべてのログを出力 |
1 | 警告、エラーのみ |
2 | エラー |
3 | ログを出力しない |
変数(Variable)
変数はtf.Variableを使います。
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 定数定義
node1 = tf.constant(1.0, dtype=tf.float32)
# 変数定義
node2 = tf.Variable(2.0)
# 計算式定義(加算) +はtf.addと同じ動作をします
node3 = node1 + node2
# 計算実行
with tf.Session() as sess:
# 初期化
sess.run(tf.global_variables_initializer())
print("計算結果①: ", sess.run(node3))
# 変数の値を変更し、再計算
sess.run(tf.assign(node2, 10))
print("計算結果②: ", sess.run(node3))
イメージ
tf.Variable
変数を定義します。変数に値をセットするには、tf.assignを使用します。Sessionで実行前にtf.global_variables_initializerを呼び出す必要があります。
保存、読み込み
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 定数定義
node1 = tf.constant(1.0, dtype=tf.float32)
# 変数定義
node2 = tf.Variable(2.0)
# 計算式定義(加算) +はtf.addと同じ動作をします
node3 = node1 + node2
# saverを作成
saver = tf.train.Saver()
# 計算実行
with tf.Session() as sess:
# 初期化
sess.run(tf.global_variables_initializer())
# 保存データ確認
if tf.train.get_checkpoint_state('.'):
try:
# 保存データ読み込み
saver.restore(sess, "./test")
except:
print("保存と読み込みでsave_pathが異なる?")
else:
print("初回実行")
print("計算結果①: ", sess.run(node3))
sess.run(tf.assign(node2, node3))
print("計算結果②: ", sess.run(node3))
# データ保存
saver.save(sess, './test')
イメージ(初回実行)
イメージ(2回目)
ページのトップへ戻る