Tfrecords - как кодировать / декодировать пары string-int - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь понять, как использовать кодировку tfrecords. В настоящее время пытаются обработать несколько пар строка-целое, пометить строку 1, если она содержит одинаковые символы, 0, если символы разные.

После завершения процесса кодирования / декодирования я получаю сообщение об ошибке: мой набор данных кажется пустым, файл .tfrecords существует и содержит некоторые данные. Вот мой код:


import tensorflow as tf

def _int64_feature(value):
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

strings = [
    'aaaa',
    'ssss',
    'qwer',
    'asdf'
]
labels = [1,1,0,0]
filename = 'my_dataset.tfrecords'

writer = tf.python_io.TFRecordWriter(filename)
for i in range(0, len(strings)):
    feature = {
        'x': _bytes_feature(strings[i]),
        'label': _int64_feature(labels[i])
    }
    example = tf.train.Example(features=tf.train.Features(feature=feature))
    writer.write(example.SerializeToString())

# A .tfrecords file is created at this moment
# Now read the file contents
sess = tf.Session()
tf.global_variables_initializer()

def parser(record):
    keys = {
        'x': tf.FixedLenFeature([], tf.string),
        'label': tf.FixedLenFeature([], tf.int64)
    }
    parsed = tf.parse_single_example(record, keys)
    x = parsed['x']
    label = tf.cast(parsed['label'], tf.int32)

    return x, label

dataset = tf.data.TFRecordDataset(filenames=[filename])
dataset = dataset.map(parser)
iterator = dataset.make_one_shot_iterator()
x_next, label_next = iterator.get_next()


print sess.run(x_next)
print sess.run(label_next)

В настоящее время выдает исключение «Конец последовательности» при попытке sess.run (). Я пытаюсь показать фактическую пару строка-метка:

аааа 1

Пожалуйста, подскажите, что может быть не так в моем коде

...