tensorflow
プレースホルダ
サーチ…
パラメーター
パラメータ | 詳細 |
---|---|
データ型(dtype) | 特にテンソルフローパッケージによって提供されるデータ型の1つ。例: tensorflow.float32 |
データ形状(形状) | リストまたはタプルとしてのプレースホルダの寸法。不明なディメンションには、 None も使用できNone 。例えば、(None、30)は、(?x 30)次元のプレースホルダ |
名前(名前) | 操作の名前(オプション)。 |
プレースホルダの基本
プレースホルダを使用すると、テンソルフローグラフに値を入力できます。 Additionallyこれらは、入力される値の次元とデータ型に関する制約を指定することができます。そのように、新しいトレーニング例を提供するニューラルネットワークを作成するときに便利です。
次の例では、32ビット浮動小数点型の要素を持つ3×4テンソルのプレースホルダを宣言しています。
a = tf.placeholder(tf.float32, shape=[3,4], name='a')
プレースホルダには値は含まれないため、セッションを実行するときに値を入力する必要があります。そうしないと、エラーメッセージが表示されます。これは、 session.run()
呼び出すときにfeed_dict
引数を使用して行うことができます。例:
# run the graph up to node b, feeding the placeholder `a` with values in my_array session.run(b, feed_dict={a: my_array})
プレースホルダの宣言と供給のプロセス全体を示す簡単な例を示します。
import tensorflow as tf import numpy as np # Build a graph graph = tf.Graph() with graph.as_default(): # declare a placeholder that is 3 by 4 of type float32 a = tf.placeholder(tf.float32, shape=(3, 4), name='a') # Perform some operation on the placeholder b = a * 2 # Create an array to be fed to `a` input_array = np.ones((3,4)) # Create a session, and run the graph with tf.Session(graph=graph) as session: # run the session up to node b, feeding an array of values into a output = session.run(b, feed_dict={a: input_array}) print(output)
プレースホルダーは3行4列の配列をとり、ノードbでテンソルに2を掛け、次の結果を返して出力します。
[[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]]
デフォルトのプレースホルダ
深いネットワークをトレーニングする過程で、1つまたは複数の検証バッチを間欠的に実行することがよくあります。通常、訓練データはキューによって供給され、検証データはsess.run()
feed_dict
パラメータを通過することがfeed_dict
ます。 tf.placeholder_with_default()
はこの状況でうまくいくように設計されています:
import numpy as np
import tensorflow as tf
IMG_SIZE = [3, 3]
BATCH_SIZE_TRAIN = 2
BATCH_SIZE_VAL = 1
def get_training_batch(batch_size):
''' training data pipeline '''
image = tf.random_uniform(shape=IMG_SIZE)
label = tf.random_uniform(shape=[])
min_after_dequeue = 100
capacity = min_after_dequeue + 3 * batch_size
images, labels = tf.train.shuffle_batch(
[image, label], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return images, labels
# define the graph
images_train, labels_train = get_training_batch(BATCH_SIZE_TRAIN)
image_batch = tf.placeholder_with_default(images_train, shape=None)
label_batch = tf.placeholder_with_default(labels_train, shape=None)
new_images = tf.mul(image_batch, -1)
new_labels = tf.mul(label_batch, -1)
# start a session
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
# typical training step where batch data are drawn from the training queue
py_images, py_labels = sess.run([new_images, new_labels])
print('Data from queue:')
print('Images: ', py_images) # returned values in range [-1.0, 0.0]
print('\nLabels: ', py_labels) # returned values [-1, 0.0]
# typical validation step where batch data are supplied through feed_dict
images_val = np.random.randint(0, 100, size=np.hstack((BATCH_SIZE_VAL, IMG_SIZE)))
labels_val = np.ones(BATCH_SIZE_VAL)
py_images, py_labels = sess.run([new_images, new_labels],
feed_dict={image_batch:images_val, label_batch:labels_val})
print('\n\nData from feed_dict:')
print('Images: ', py_images) # returned values are integers in range [-100.0, 0.0]
print('\nLabels: ', py_labels) # returned values are -1.0
coord.request_stop()
coord.join(threads)
この例ではimage_batch
とlabel_batch
によって生成さget_training_batch()
に対応する値は次のように渡されない限りfeed_dict
呼び出し時にパラメータsess.run()
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow