Comment les données de renforcement mis en œuvre dans Tensorflow?
Basé sur la Tensorflow tutoriel pour ConvNet, certains points ne sont pas évidentes pour moi:
- sont les images soient déformées en fait ajouté à la piscine de l'image originale?
- ou sont les images déformées utilisé au lieu des originaux?
- combien d'images déformées sont produites? (c'est à dire que l'augmentation du facteur a été défini?)
Le flux de fonctions pour le tutoriel semble être comme suit:
cifar_10_train.py
def train
"""Train CIFAR-10 for a number of steps."""
with tf.Graph().as_default():
[...]
# Get images and labels for CIFAR-10.
images, labels = cifar10.distorted_inputs()
[...]
cifar10.py
def distorted_inputs():
"""Construct distorted input for CIFAR training using the Reader ops.
Returns:
images: Images. 4D tensor of [batch_size, IMAGE_SIZE, IMAGE_SIZE, 3] size.
labels: Labels. 1D tensor of [batch_size] size.
Raises:
ValueError: If no data_dir
"""
if not FLAGS.data_dir:
raise ValueError('Please supply a data_dir')
data_dir = os.path.join(FLAGS.data_dir, 'cifar-10-batches-bin')
return cifar10_input.distorted_inputs(data_dir=data_dir,
batch_size=FLAGS.batch_size)
et enfin cifar10_input.py
def distorted_inputs(data_dir, batch_size):
"""Construct distorted input for CIFAR training using the Reader ops.
Args:
data_dir: Path to the CIFAR-10 data directory.
batch_size: Number of images per batch.
Returns:
images: Images. 4D tensor of [batch_size, IMAGE_SIZE, IMAGE_SIZE, 3] size.
labels: Labels. 1D tensor of [batch_size] size.
"""
filenames = [os.path.join(data_dir, 'data_batch_%d.bin' % i) for i in xrange(1, 6)]
for f in filenames:
if not tf.gfile.Exists(f):
raise ValueError('Failed to find file: ' + f)
# Create a queue that produces the filenames to read.
filename_queue = tf.train.string_input_producer(filenames)
# Read examples from files in the filename queue.
read_input = read_cifar10(filename_queue)
reshaped_image = tf.cast(read_input.uint8image, tf.float32)
height = IMAGE_SIZE
width = IMAGE_SIZE
# Image processing for training the network. Note the many random
# distortions applied to the image.
# Randomly crop a [height, width] section of the image.
distorted_image = tf.random_crop(reshaped_image, [height, width, 3])
# Randomly flip the image horizontally.
distorted_image = tf.image.random_flip_left_right(distorted_image)
# Because these operations are not commutative, consider randomizing
# the order their operation.
distorted_image = tf.image.random_brightness(distorted_image, max_delta=63)
distorted_image = tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)
# Subtract off the mean and divide by the variance of the pixels.
float_image = tf.image.per_image_whitening(distorted_image)
# Ensure that the random shuffling has good mixing properties.
min_fraction_of_examples_in_queue = 0.4
min_queue_examples = int(NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN *
min_fraction_of_examples_in_queue)
print('Filling queue with %d CIFAR images before starting to train.'
'This will take a few minutes.' % min_queue_examples)
# Generate a batch of images and labels by building up a queue of examples.
return _generate_image_and_label_batch(float_image, read_input.label,
min_queue_examples, batch_size,
shuffle=True)
OriginalL'auteur pepe | 2016-05-30
Vous devez vous connecter pour publier un commentaire.
Cela dépend de la définition de la piscine. Dans tensorflow, vous avez
ops
qui sont à la base des objets dans votre réseau graphique. ici, la production de données est une op elle-même. Ainsi, vous n'avez pas un ensemble fini d'échantillons d'apprentissage, au lieu de cela vous avez un potentiellement infinie ensemble d'échantillons généré de l'ensemble de la formation.Comme vous pouvez le voir à partir de la source que vous avez inclus - prélèvement de l'échantillon de la formation d'un lot, c'est au hasard transformé, donc il y a très peu de probabilité de l'aide inchangé, à l'image (surtout que le recadrage est utilisé, ce qui modifie toujours).
Il n'y a pas une telle chose, ce n'est jamais fini avec le processus. Penser en termes d'accès aléatoire pour éventuellement infinie source de données, car c'est ce qui est efficace de ce qui se passe ici. Chaque lot peut être différente de la précédente.
assez bien oui. Vous obtenez les mêmes données "brutes", mais avant que celui-ci est transmis au réseau, il obtient déformés dans randomisés, d'où le réseau n'a jamais véritablement voit deux échantillons deux fois
donc, chaque fois que nous le début de la formation, le net sera essentiellement formés sur un autre train ensemble d'images, de provoquer à chaque fois que le train va être "augmentée" d'une manière différente, non?
dans une certaine mesure, oui, avec suffisamment de "richesse" des transformations no 2 descentes seront identiques en termes d'images produites.
OriginalL'auteur lejlot