Tensorflow:tf.train.Feature 错误“预期之一:字节”

Che*_*Wei 3 python numpy tensorflow

全部

我正在尝试将数据序列化到 tensorflow 中的 tfrecords 文件。我按照这里的说明操作:https : //github.com/tensorlayer/tensorlayer/blob/master/example/tutorial_tfrecord.py

如本说明所示,我需要example 为每个记录构建一个,每个记录example包含多个feature.

但是,我在初始化该功能时遇到了问题。这是我的测试代码:

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 ])))
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了以下错误,这是直觉的:

usr/local/lib/python2.7/dist-packages/h5py/ init .py:36: FutureWarning:不推荐将 issubdtype 的第二个参数从floatto转换np.floating。将来,它将被视为np.float64 == np.dtype(float).type. from ._conv import register_converters as _register_converters Traceback(最近一次调用):文件“test.py”,第7行,在feature_int=tf.train.Feature(bytes_list=tf.train.Int64List(value = np.array([32 , 24]))) 类型错误:MergeFrom() 的参数必须是同一类的实例:预期的 tensorflow.BytesList 得到了 tensorflow.Int64List。

我进一步尝试使用tf.train.BytesListfornp.array([32,24])并得到以下错误:

feature_int=tf.train.Feature(bytes_list=tf.train.BytesList(value = np.array([32 , 24]))) TypeError: 32 类型为 numpy.int64,但预期为以下之一:字节

任何人都可以帮助我解决这个问题吗?我真的很困惑。

谢谢!

vij*_*y m 5

您需要提供bytesbytes_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() 
Run Code Online (Sandbox Code Playgroud)

从 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))
Run Code Online (Sandbox Code Playgroud)

输出:

[b'a', b'b']
[32 24]
[32.09999847 24.10000038]
Run Code Online (Sandbox Code Playgroud)