Как импортировать jpg и npy файлы в паре для глубокого изучения с tenorflow? - PullRequest
0 голосов
/ 11 января 2019

У меня 1500 файлов RGB (.jpg) и 1500 значений карт объектов (.npy). Я хочу использовать их в качестве набора данных для моего проекта глубокого обучения. Я использую tenorflow 1.12.

Я записал их в файл .tfrecords, используя tf.Example. Вот код, который я использовал для импорта этого файла с помощью tf.data (благодаря комментарию Удея).

import tensorflow as tf
import numpy as np
import pdb

IMAGE_HEIGHT = 228
IMAGE_WIDTH = 304

def tfdata_generator(tfrname, is_training, batch_size):
    '''Construct a data generator using tf.Dataset'''
    ## You can write your own parse function
    def parse_function(example):

    features = tf.parse_single_example(example, features={

        'image_raw': tf.FixedLenFeature([], tf.string, default_value=""),
        'hint_raw': tf.FixedLenFeature([], tf.string, default_value="")
        })
    image = features['image_raw']
    hint = features['hint_raw']

    image = tf.decode_raw(image, tf.uint8)
    image = tf.cast(image, tf.float32)
    image = tf.reshape(image, [IMAGE_HEIGHT, IMAGE_WIDTH, 3])

    hint = tf.decode_raw(hint, tf.uint8)
    hint = tf.cast(hint, tf.float32)
    hint = tf.reshape(hint, [8, 10, 1024])

    return image, hint

dataset = tf.data.TFRecordDataset(tfrname)
#pdb.set_trace()
if is_training:
    dataset = dataset.shuffle(100)  # depends on sample size
#pdb.set_trace()
# Transform and batch data at the same time
dataset = dataset.apply(tf.data.experimental.map_and_batch(parse_function, 
        8, num_parallel_batches=4)) # cpu cores

dataset = dataset.repeat(-1)
dataset = dataset.prefetch(2)
return dataset

Я установил batch_size равным 8. Но когда я выполнил отладку, форма набора данных была

((?, 228, 304, 3), (?, 8, 10, 1024)), types: (tf.float32, tf.float32)

Это правильно? Этот код неправильный? Или есть ошибки, когда я делаю записи?

1 Ответ

0 голосов
/ 11 января 2019

вы можете использовать код как показано ниже,

def tfdata_generator(images, labels, is_training, batch_size=32):
   '''Construct a data generator using tf.Dataset'''
   ## You can write your own parse function
   def parse_function(filename, label):
        image_string = tf.read_file(filename)
        image = tf.image.decode_jpeg(image_string)
        image = tf.image.convert_image_dtype(image, tf.float32)
        y = tf.one_hot(tf.cast(label, tf.uint8), 16)
    return image, y

    dataset = tf.data.Dataset.from_tensor_slices((images, labels))
    if is_training:
        dataset = dataset.shuffle(1000)  # depends on sample size

    # Transform and batch data at the same time
    dataset = dataset.apply(tf.data.experimental.map_and_batch( parse_function, 
            batch_size,num_parallel_batches=6,  # cpu cores
        drop_remainder=True if is_training else False))
    dataset = dataset.repeat()
    dataset = dataset.prefetch(no_of_prefetch_needed)
return dataset
...