tensorflow - 如何将大浮点数保存为 TFRecord 格式?float_list/float32 似乎截断了值
问题描述
我们将处理后的数据写入 TFRecords,当从 TFRecords 读回时,我们注意到数据丢失。下面的可重现示例。奇怪的是,它不仅会删除小数,而且似乎会随机向上/向下取整值。由于它只允许 float32、int64 和 string,我们不确定要尝试哪些其他选项。
我们正在写下这些价值观
[20191221.1、20191222.1、20191223.1、20191224.1、20191225.1、20191226.1、20191227.1、20191228.1、20191229.1、20191230.1]
但是从 tfrecords 读取会返回这些值
tf.Tensor( [20191222. 20191222. 20191224. 20191224. 20191226. 20191226. 20191228. 20191228. 20191228. 20191230. 20191230.], shape=(10,), dtype=float3
可重现的代码
import tensorflow as tf
def write_date_tfrecord():
#writes 10 dummy values to replicate the issue
data = [20191221.1 + x for x in range(0,10)]
print("Writing data - ", data)
example = tf.train.Example(
features = tf.train.Features(
feature = {
'data':tf.train.Feature(float_list=tf.train.FloatList(value=data))
}
))
writer = tf.io.TFRecordWriter("data.tf_record")
writer.write(example.SerializeToString())
def parse_function(serialized_example):
features = {
'data': tf.io.FixedLenSequenceFeature([], tf.float32,allow_missing=True)
}
features = tf.io.parse_single_example(serialized=serialized_example, features=features)
data = features['data']
return data
def dataset_generator():
trRecordDataset = tf.data.TFRecordDataset("data.tf_record")
trRecordDataset = trRecordDataset.map(parse_function, num_parallel_calls = tf.data.experimental.AUTOTUNE)
return trRecordDataset
if __name__ == '__main__':
write_date_tfrecord()
generator = dataset_generator()
for data in generator:
print(data)
解决方案
推荐阅读
- python - 熊猫:重塑数据框
- python - Radix Sort for Strings in Python
- asp.net - 如何在控制器中为 POST 方法使用“Azure 存储 Blob”
- nginx - WSO2 API Manager 3.1.0 Analytics 卡在仪表板小部件 API 加载上
- spring-boot - JPMS/Jigsaw keycloak-spring-boot-starter(无效的模块名称和ResolutionException)
- python - Python,Django rest框架,创建一个包含选项或自由文本的字段
- laravel-5 - 如何使用 Eloquent 范围获取最后一条记录?
- javascript - 一种遍历集合的跨浏览器方式。JS
- reactjs - 使用 React js 在 bootstrap 4 中获取导航栏的状态
- r - 我如何创建一个函数 gentimes() 来创建一个点的 nreps(w1,w2)