spliting custom binary dataset in train/test subsets using tensorflow io(使用TensorFlow io拆分训练/测试子集中的自定义二进制数据集)
本文介绍了使用TensorFlow io拆分训练/测试子集中的自定义二进制数据集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用本地二进制数据训练网络以执行regression inference。
每个本地二进制数据的布局如下:
并且整个数据由几个具有上述布局的*.bin文件组成。每个文件具有数量可变的403*4字节的序列。我能够使用以下代码读取其中一个文件:
import tensorflow as tf
RAW_N = 2 + 20*20 + 1
def convert_binary_to_float_array(register):
return tf.io.decode_raw(register, out_type=tf.float32)
raw_dataset = tf.data.FixedLengthRecordDataset(filenames=['mydata.bin'],record_bytes=RAW_N*4)
raw_dataset = raw_dataset.map(map_func=convert_binary_to_float_array)
现在,我需要创建4个数据集train_data
、train_labels
、test_data
、test_labels
如下:
train_data, train_labels, test_data, test_labels = prepare_ds(raw_dataset, 0.8)
并使用它们进行培训和评估:
model = build_model()
history = model.fit(train_data, train_labels, ...)
loss, mse = model.evaluate(test_data, test_labels)
我的问题是:如何实现函数prepare_ds(dataset, frac)
?
def prepare_ds(dataset, frac):
...
我已尝试使用tf.shape
、tf.reshape
、tf.slice
、订阅[:],但未成功。我意识到这些函数不能正常工作,因为在map()
调用raw_dataset
之后是一个MapDataset
(由于急切的执行问题)。
推荐答案
如果假设元数据是您输入的一部分(我假设是这样),您可以尝试如下操作:
import random
import struct
import tensorflow as tf
import numpy as np
RAW_N = 2 + 20*20 + 1
bytess = random.sample(range(1, 5000), RAW_N*4)
with open('mydata.bin', 'wb') as f:
f.write(struct.pack('1612i', *bytess))
def decode_and_prepare(register):
register = tf.io.decode_raw(register, out_type=tf.float32)
inputs = register[:402]
label = register[402:]
return inputs, label
total_data_entries = 8
raw_dataset = tf.data.FixedLengthRecordDataset(filenames=['/content/mydata.bin', '/content/mydata.bin'], record_bytes=RAW_N*4)
raw_dataset = raw_dataset.map(decode_and_prepare)
raw_dataset = raw_dataset.shuffle(buffer_size=total_data_entries)
train_ds_size = int(0.8 * total_data_entries)
test_ds_size = int(0.2 * total_data_entries)
train_ds = raw_dataset.take(train_ds_size)
remaining_data = raw_dataset.skip(train_ds_size)
test_ds = remaining_data.take(test_ds_size)
请注意,出于演示目的,我使用了两次相同的bin文件。运行该代码片段后,您可以将数据集提供给您的模型,如下所示:
model = build_model()
history = model.fit(train_ds, ...)
loss, mse = model.evaluate(test_ds)
因为每个数据集都包含输入和相应的标签。
这篇关于使用TensorFlow io拆分训练/测试子集中的自定义二进制数据集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用TensorFlow io拆分训练/测试子集中的自定义二进制数据集
猜你喜欢
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 沿轴计算直方图 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01