什么时候应该使用 tf.train.BytesList、tf.train.FloatList 和 tf.train.Int64List 将数据存储在 tf.train.Feature 中?
When should one use tf.train.BytesList, tf.train.FloatList, and tf.train.Int64List for data to be stored in a tf.train.Feature?
TensorFlow 提供了 3 种不同的数据存储格式 tf.train.Feature
。它们是:
tf.train.BytesList
tf.train.FloatList
tf.train.Int64List
我经常在 tf.train.Int64List
/ tf.train.FloatList
和 tf.train.BytesList
之间做出选择。
我在网上看到一些示例,它们将 ints/floats 转换为字节,然后将它们存储在 tf.train.BytesList
中。这比使用其他格式之一更可取吗?如果是这样,为什么 TensorFlow 甚至提供 tf.train.Int64List
和 tf.train.FloatList
作为可选格式,而您只需将它们转换为字节并使用 tf.train.BytesList
?
谢谢。
因为字节列表需要更多内存。它旨在存储字符串数据,或者例如转换为单个字节串的 numpy 数组。考虑示例:
def int64_feature(value):
if type(value) != list:
value = [value]
return tf.train.Feature(int64_list=tf.train.Int64List(value=value))
def float_feature(value):
if type(value) != list:
value = [value]
return tf.train.Feature(float_list=tf.train.FloatList(value=value))
def bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
writer = tf.python_io.TFRecordWriter('file.tfrecords')
bytes = np.array(1.1).tostring()
int = 1
float = 1.1
example = tf.train.Example(features=tf.train.Features(feature={'1': float_feature(float)}))
writer.write(example.SerializeToString())
writer.close()
for str_rec in tf.python_io.tf_record_iterator('file.tfrecords'):
example = tf.train.Example()
example.ParseFromString(str_rec)
str = (example.features.feature['1'].float_list.value[0])
print(getsizeof(str))
对于dtype float
它将输出24个字节,最小值。但是,您不能将 int
传递给 tf.train.FloatList
。 int
在这种情况下,dtype 将占用 28 个字节,而字节将是 41 个未解码的字节(在应用 np.fromstring
之前),甚至更多。
TensorFlow 提供了 3 种不同的数据存储格式 tf.train.Feature
。它们是:
tf.train.BytesList
tf.train.FloatList
tf.train.Int64List
我经常在 tf.train.Int64List
/ tf.train.FloatList
和 tf.train.BytesList
之间做出选择。
我在网上看到一些示例,它们将 ints/floats 转换为字节,然后将它们存储在 tf.train.BytesList
中。这比使用其他格式之一更可取吗?如果是这样,为什么 TensorFlow 甚至提供 tf.train.Int64List
和 tf.train.FloatList
作为可选格式,而您只需将它们转换为字节并使用 tf.train.BytesList
?
谢谢。
因为字节列表需要更多内存。它旨在存储字符串数据,或者例如转换为单个字节串的 numpy 数组。考虑示例:
def int64_feature(value):
if type(value) != list:
value = [value]
return tf.train.Feature(int64_list=tf.train.Int64List(value=value))
def float_feature(value):
if type(value) != list:
value = [value]
return tf.train.Feature(float_list=tf.train.FloatList(value=value))
def bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
writer = tf.python_io.TFRecordWriter('file.tfrecords')
bytes = np.array(1.1).tostring()
int = 1
float = 1.1
example = tf.train.Example(features=tf.train.Features(feature={'1': float_feature(float)}))
writer.write(example.SerializeToString())
writer.close()
for str_rec in tf.python_io.tf_record_iterator('file.tfrecords'):
example = tf.train.Example()
example.ParseFromString(str_rec)
str = (example.features.feature['1'].float_list.value[0])
print(getsizeof(str))
对于dtype float
它将输出24个字节,最小值。但是,您不能将 int
传递给 tf.train.FloatList
。 int
在这种情况下,dtype 将占用 28 个字节,而字节将是 41 个未解码的字节(在应用 np.fromstring
之前),甚至更多。