Tensorflow: tf.train.Feature ошибка «ожидается один из: байтов» - PullRequest
0 голосов
/ 31 мая 2018

все

Я пытаюсь сериализовать данные в файл tfrecords в тензорном потоке.Я следую приведенной ниже инструкции: https://github.com/tensorlayer/tensorlayer/blob/master/example/tutorial_tfrecord.py

Как показано в этой инструкции, мне нужно построить example для каждой записи, и каждая example содержит несколько feature.

* 1010.* Однако у меня возникают проблемы при инициализации функции.Вот мой тестовый код:
import tensorflow as tf
import numpy as np

feature_str=tf.train.Feature(bytes_list=tf.train.BytesList(value = np.array(["a" , "b"])))

feature_int=tf.train.Feature(bytes_list=tf.train.Int64List(value = np.array([32 , 24])))

feature_flo=tf.train.Feature(bytes_list=tf.train.FloatList(value = np.array([32.1 , 24.1 ])))

Однако, я получил следующую ошибку, которая является интуитивно понятной:

usr / local / lib / python2.7 / dist-packages / h5py / init .py: 36: FutureWarning: Преобразование второго аргумента issubdtype из float в np.floating устарело.В дальнейшем это будет рассматриваться как np.float64 == np.dtype(float).type.из ._conv импортировать register_converters как _register_converters Traceback (последний вызов был последним): файл "test.py", строка 7, в feature_int = tf.train.Feature (bytes_list = tf.train.Int64List (value = np.array ([32, 24]))) TypeError: Параметр для MergeFrom () должен быть экземпляром того же класса: ожидаемый тензор потока. Байтский список получил тензор потока.Инт64Лист.

Далее я пытаюсь использовать tf.train.BytesList для np.array([32,24]) и получаюошибка ниже:

feature_int = tf.train.Feature (bytes_list = tf.train.BytesList (value = np.array ([32, 24]))) TypeError: 32 имеет тип numpy.int64, но ожидаетсяодин из: байтов

Может кто-нибудь помочь мне в этом вопросе?Я действительно запутался.

Спасибо!

1 Ответ

0 голосов
/ 31 мая 2018

Вам нужно кормить bytes до bytes_list вместо string.Ниже приведен пример всех трех случаев:

Для TFRecords:

output_file = 'out.tfrecord'
writer = tf.python_io.TFRecordWriter(output_file)

"""Build an Example proto
"""

feature = {}
feature['str'] = tf.train.Feature(
       bytes_list=tf.train.BytesList(value = [b"a",b"b"]))
feature['int'] = tf.train.Feature(int64_list=tf.train.Int64List(value = np.array([32 , 24])))
feature['flo'] = tf.train.Feature(float_list=tf.train.FloatList(value = np.array([32.1 , 24.1 ])))

features = tf.train.Features(feature=feature)
example = tf.train.Example(features=features)
serialized = example.SerializeToString()
writer.write(serialized)

writer.close() 

Чтение из TFRecords:

  for serialized_example in tf.python_io.tf_record_iterator('out.tfrecord'):
    example = tf.train.Example()
    example.ParseFromString(serialized_example)
    print(example.features.feature['str'].bytes_list.value)
    print(np.array(example.features.feature['int'].int64_list.value))
    print(np.array(example.features.feature['flo'].float_list.value))

Выход:

[b'a', b'b']
[32 24]
[32.09999847 24.10000038]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...