Buscar..


Parámetros

Parámetro Detalles
tipo de datos (dtype) específicamente uno de los tipos de datos proporcionados por el paquete tensorflow. Por ejemplo, tensorflow.float32
forma de datos (forma) Dimensiones del marcador de posición como lista o tupla. None puede ser usado para dimensiones que son desconocidas. Por ejemplo, (Ninguno, 30) definiría un marcador de posición de dimensión (? X 30)
nombre nombre) Un nombre para la operación (opcional).

Fundamentos de los marcadores de posición

Los marcadores de posición le permiten introducir valores en un gráfico de tensorflow. Adicionalmente, le permiten especificar restricciones con respecto a las dimensiones y el tipo de datos de los valores que se ingresan. Como tales, son útiles al crear una red neuronal para alimentar nuevos ejemplos de capacitación.

El siguiente ejemplo declara un marcador de posición para un tensor de 3 por 4 con elementos que son (o pueden tipificarse como) flotadores de 32 bits.

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

Los marcadores de posición no contendrán ningún valor por sí mismos, por lo que es importante proporcionarles valores al ejecutar una sesión, de lo contrario, aparecerá un mensaje de error. Esto se puede hacer usando el argumento feed_dict al llamar a session.run() , por ejemplo:

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

Aquí hay un ejemplo simple que muestra el proceso completo de declarar y alimentar a un tapicero.

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)

El marcador de posición toma una matriz de 3 por 4, y ese tensor se multiplica por 2 en el nodo b, que luego devuelve e imprime lo siguiente:

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

Marcador de posición con valor predeterminado

A menudo, uno quiere ejecutar intermitentemente uno o más lotes de validación durante el curso de entrenamiento de una red profunda. Típicamente los datos de entrenamiento son alimentados por una cola, mientras que los datos de validación pueden ser pasados a través de la feed_dict parámetro en sess.run() . tf.placeholder_with_default() está diseñado para funcionar bien en esta situación:

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)

En este ejemplo, image_batch y label_batch son generados por get_training_batch() menos que los valores correspondientes se pasen como el parámetro feed_dict durante una llamada a sess.run() .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow