я использую tf.data.TFRecordDataset читать tfcord, почему данные, которые я читаю, неверны - PullRequest
0 голосов
/ 29 января 2019

когда я использую tf.data.TFRecordDataset прочитал много tfrecords.Я прочитал этикетку и изображение из tfrecord.Я использую тензорную доску, суммируя изображение, и записываю метку в файл журнала. Но когда я смотрю на файл журнала и тензорную доску.Ярлык и изображение не соответствуют.Follows Мой код для чтения tfrecrods.

def parser(record):
    features = tf.parse_single_example(record,
                                   features={
                                       'label': tf.FixedLenFeature([], tf.int64),
                                       'image': tf.FixedLenFeature([], tf.string)
                                   })  # 取出包含image和label的feature对象
    recode_image = tf.decode_raw(features['image'], tf.uint8)
    real_image = tf.reshape(recode_image, shape=[38, 38, 1])
    lable = tf.cast(features['label'], tf.int64)
    return real_image,lable

def read_data(file_path):
    min_after_dequeue = 100
    batch_size = 3
    data=tf.data.TFRecordDataset(file_path)
    dataset=data.map(parser).
                 shuffle(buffer_size=min_after_dequeue).
                 batch(batch_size=batch_size)
    dataset=dataset.repeat()
    dataset.prefetch(100)
    iterator = dataset.make_one_shot_iterator()
    image_batch, lable_batch = iterator.get_next()
    image_batch=input_float(image_batch)
    return  image_batch,lable_batch

использование read_data в коде основного потока:

file_list=glob.glob("./tfcode/training_image/*.tfrecord")
file_list = list(
         map(lambda image: image.replace('\\', '/'), file_list))
image_batch, lable_batch= read_data(file_list)
tf.summary.image(tensor=image_batch,name="image")
input_lable = sess.run(lable_batch)
logger.info(input_lable)

Ниже показано, что я смотрю в тензорной доске: введите описание изображенияздесь

Ниже показано, что я смотрю в файле журнала: введите описание изображения здесь

метка изображения с кратким описанием тензорной доски [1,3,3], но файл журнала - [3,3,3].

как с этим справиться.

1 Ответ

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

Почему бы вам не использовать https://www.tensorflow.org/api_docs/python/tf/image/decode_jpeg вместо tf.decode_raw?

def parser(record):
    features = tf.parse_single_example(record,
                                   features={
                                       'label': tf.FixedLenFeature([], tf.int64),
                                       'image': tf.FixedLenFeature([], tf.string)
                                   })
    recode_image = tf.image.decode_jpeg(features['image'], channels=1)
    real_image = tf.reshape(recode_image, shape=[38, 38])
    lable = tf.cast(features['label'], tf.int64)
    return real_image,lable

def read_data(file_path):
    min_after_dequeue = 100
    batch_size = 3
    data=tf.data.TFRecordDataset(file_path)
    dataset=data.map(parser).
                 shuffle(buffer_size=min_after_dequeue).
                 batch(batch_size=batch_size)
    dataset=dataset.repeat()
    dataset.prefetch(100)
    iterator = dataset.make_one_shot_iterator()
    image_batch, label_batch = iterator.get_next()
    image_batch=input_float(image_batch) # I'm assuming you are rescalling the image to [0,1]
    return  image_batch,label_batch

...