Tensorflow:是否可以将TF记录序列示例存储为float16

Tensorflow:是否可以将TF记录序列示例存储为float16,tensorflow,protocol-buffers,Tensorflow,Protocol Buffers,是否可以将tensorflow中的序列示例存储为float16而不是常规float 我们可以以16位的精度生存,它将减少我们使用的数据文件的大小,为我们节省约200 GB。我认为下面的剪报就是这样做的 将tensorflow导入为tf 将numpy作为np导入 #生成数据 data\u np=np.array(np.random.rand(10),dtype=np.float16) 使用tf.python_io.TFRecordWriter('/tmp/data.tfrecord')作为编写器:

是否可以将tensorflow中的序列示例存储为float16而不是常规float


我们可以以16位的精度生存,它将减少我们使用的数据文件的大小,为我们节省约200 GB。

我认为下面的剪报就是这样做的

将tensorflow导入为tf
将numpy作为np导入
#生成数据
data\u np=np.array(np.random.rand(10),dtype=np.float16)
使用tf.python_io.TFRecordWriter('/tmp/data.tfrecord')作为编写器:
#在特征字典中对数据进行编码
数据={'raw':tf.train.Feature(
#该功能具有类型ByteList
字节列表=tf.train.BytesList(
#将数据编码为字节
值=[data\u np.tobytes())}
#从特征创建一个示例
示例=tf.train.example(特征=tf.train.features(特征=数据))
#将示例写入TFRecord文件
writer.write(示例.SerializeToString())
def_parse_tfrecord(示例proto):
#描述如何解释TFRecord示例
features={'raw':tf.FixedLenFeature((),tf.string)}
#从TFRecord中解析示例(特征目录)
parsed_features=tf.parse_single_示例(示例_proto,features)
#将字节解码为float16数组
返回tf.decode_raw(解析的_特征['raw'],tf.float16)
def tfrecord_input_fn():
#读取数据集
dataset=tf.data.TFRecordDataset('/tmp/data.tfrecord')
#分析数据集的每个示例
dataset=dataset.map(\u parse\u tfrecord)
iterator=dataset.make_one_shot_iterator()
返回迭代器。get_next()
#在TFR记录上获取迭代器
it=tfrecord\u input\u fn()
#做一个会话并计算张量
sess=tf.Session()
恢复的_data=sess.run(it)
打印(恢复的\u数据==数据\u np)

TFRecord记录实际上只是字符串。你可以在里面储存你想要的任何东西;由读写器将这些字符串解释为特定的数据格式。从概念上讲,使用float16是没有问题的。你能多说一点你是如何保存和加载数据的吗?哪些库等?@PeterHawkins,数据存储为'float16'类型和固定形状的numpy数组。为了让它成为一个序列示例,我将其转换为float32并使用:
tf.train.Feature(float\u list=tf.train.FloatList(value=float\u array.tolist())
inside
tf.train.Features(Feature={…
Ok,明白了。我可以在写入时将float数组序列化为字节,在读取时反序列化。写入
aBytes=a.tobytes()
,阅读:
np.fromstring(aBytes,dtype='float16')
。这是否意味着TFRecords将使用其拥有的数据类型保存数据?在您的代码中,您使用
float16
启动
data\u np
,并将其存储为
BytesFeature
。这是否意味着我们可以使用
uint8
之类的数据类型存储某些数据?这将比
float32
数据占用的空间少4倍...