Suche…


Parameter

Parameter Einzelheiten
Datentyp (dtype) speziell einer der Datentypen, die vom Tensorflow-Paket bereitgestellt werden. ZB tensorflow.float32
Datenform (Form) Abmessungen des Platzhalters als Liste oder Tupel. None kann für unbekannte Dimensionen verwendet werden. ZB (Keine, 30) würde einen Platzhalter (x 30) definieren
Name Name) Ein Name für die Operation (optional).

Grundlagen der Platzhalter

Mit Platzhaltern können Sie Werte in einen Tensorflow-Graphen eingeben. Darüber hinaus können Sie Einschränkungen in Bezug auf die Dimensionen und den Datentyp der eingegebenen Werte angeben. Daher sind sie beim Erstellen eines neuronalen Netzwerks nützlich, um neue Trainingsbeispiele bereitzustellen.

Das folgende Beispiel deklariert einen Platzhalter für einen 3 x 4-Tensor mit Elementen, die 32-Bit-Floats sind (oder in diese umgewandelt werden können).

a = tf.placeholder(tf.float32, shape=[3,4], name='a')

Platzhalter enthalten keine eigenen Werte. Daher ist es wichtig, dass sie beim Ausführen einer Sitzung mit Werten gefüllt werden. Andernfalls wird eine Fehlermeldung angezeigt. Dies kann mit dem Argument feed_dict beim Aufruf von session.run() , zB:

# run the graph up to node b, feeding the placeholder `a` with values in my_array 
session.run(b, feed_dict={a: my_array})

Hier ist ein einfaches Beispiel, das den gesamten Prozess der Deklaration und Beschickung eines Platzhalters zeigt.

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)

Der Platzhalter nimmt ein 3 x 4-Array von Einsen auf, und dieser Tensor wird dann am Knoten b mit 2 multipliziert.

[[ 2.  2.  2.  2.]
 [ 2.  2.  2.  2.]
 [ 2.  2.  2.  2.]]

Platzhalter mit Standard

Oft möchte man während des Trainings eines tiefen Netzwerks intermittierend eine oder mehrere Validierungsbatches ausführen. Typischerweise werden die Trainingsdaten von einer Warteschlange zugeführt , während die Validierungsdaten könnten durch die übergeben werden feed_dict Parameter in sess.run() . tf.placeholder_with_default() funktioniert in dieser Situation gut:

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)

In diesem Beispiel image_batch und label_batch werden von erzeugten get_training_batch() , es sei denn , die entsprechenden Werte werden als bestanden feed_dict Parameter während eines Gesprächs sess.run() .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow