Szukaj…


Parametry

Parametr Detale
typ danych (dtype) w szczególności jeden z typów danych dostarczanych przez pakiet tensorflow. Np. tensorflow.float32
kształt danych (kształt) Wymiary symbolu zastępczego jako listy lub krotki. None nie można użyć do nieznanych wymiarów. Np. (Brak, 30) zdefiniowałby symbol zastępczy wymiaru (x 30)
Nazwa nazwa) Nazwa operacji (opcjonalnie).

Podstawy symboli zastępczych

Symbole zastępcze umożliwiają wprowadzanie wartości do wykresu przepływu tensorowego. Dodatkowo umożliwiają określenie ograniczeń dotyczących wymiarów i typu danych wprowadzanych wartości. Jako takie są one przydatne podczas tworzenia sieci neuronowej w celu dostarczenia nowych przykładów szkoleniowych.

Poniższy przykład deklaruje symbol zastępczy tensora 3 na 4 z elementami, które są (lub mogą być przypisane do typu) 32-bitowe zmiennoprzecinkowe.

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

Symbole zastępcze nie będą same zawierać żadnych wartości, dlatego ważne jest, aby podawać je wartościom podczas uruchamiania sesji, w przeciwnym razie pojawi się komunikat o błędzie. Można to zrobić za pomocą argumentu feed_dict podczas wywoływania session.run() , np .:

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

Oto prosty przykład pokazujący cały proces deklarowania i karmienia placholera.

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)

Symbol zastępczy przyjmuje tablicę jedynek 3 na 4, a ten tensor jest następnie mnożony przez 2 w węźle b, który następnie zwraca i wypisuje:

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

Symbol zastępczy z domyślnym

Często chce się sporadycznie uruchamiać jedną lub więcej serii walidacyjnych podczas szkolenia głębokiej sieci. Zwykle dane treningowe są zasilane przez kolejki, gdy dane poprawności może być przepuszczany przez feed_dict parametru w sess.run() . tf.placeholder_with_default() został zaprojektowany tak, aby działał dobrze w tej sytuacji:

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)

W tym przykładzie image_batch i label_batch są generowane przez get_training_batch() chyba że odpowiednie wartości zostaną przekazane jako parametr feed_dict podczas wywołania sess.run() .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow