将存储在 tfrecord 格式的数据转换为 Tensorflow 中 lstm Keras 模型的输入,并用该数据拟合模型
Posted
技术标签:
【中文标题】将存储在 tfrecord 格式的数据转换为 Tensorflow 中 lstm Keras 模型的输入,并用该数据拟合模型【英文标题】:Transforming the data stored in tfrecord format to become inputs to a lstm Keras model in Tensorflow and fitting the model with that data 【发布时间】:2020-02-08 11:12:00 【问题描述】:我有一个很长的数据帧(2500 万行 x 500 列),我可以将其作为 csv 文件或 parquet 文件进行访问,但我可以将其加载到我的 PC 的 RAM 中。
在给定所需数量的每个样本的时间戳和所需的每批样本数量的情况下,数据应该被适当地塑造,以便成为 Keras LSTM 模型(Tensorflow 2)的输入.
这是我在这个主题上的第二篇文章。我已经得到了将数据转换为 tfrecord 格式的建议。
由于我的原始环境将是 PySpark,因此进行此转换的方式是:
myDataFrame.write.format("tfrecords").option("writeLocality", "local").save("/path")
How to convert multiple parquet files into TFrecord files using SPARK?
现在假设这已经完成并且为了简化事情并使它们具体和可重现让我们假设一个形状为 1000 行 x 3 列的数据框,其中前两列是特征,最后一列是目标,而每一行对应于一个时间戳。
例如,第一列是温度,第二列是风速,第三列(目标)是能量消耗。每行对应一个小时。该数据集包含 1,000 个连续小时的观察结果。我们假设任何给定时间的能量消耗是几个小时前大气状态的函数。因此,我们希望使用 lstm 模型来估计能耗。我们决定向 lstm 模型提供样本,每个样本都包含前 5 小时的数据(即每个样本 5 行)。为简单起见,假设目标已向后移动一小时,因此切片data[0:4, :-1]
具有目标data[3, -1]
。假设为batch_size = 32
。
数据以.tfrecords
格式保存在我们的硬盘中。我们无法将所有数据加载到我们的 RAM 中。
我们该怎么做?
【问题讨论】:
【参考方案1】:我不明白这个问题。 tfrecord
s 开箱即用:
# this will not load all data into RAM
dataset = tf.data.TFRecordDataset("./path_to_tfrecord.tfrecord")
k = 0
for sample in dataset:
print(sample.numpy())
训练
model.fit(train_data=dataset)
您能否提供一些打印内容的样本? (如有必要,使用“...”缩短内容)。
【讨论】:
如您所知,RNN 期望数据采用特定格式:(n_samples, n_timesteps, n_features)。另一方面,我在磁盘中的数据是平面格式,(n_samples,n_features)。此外,我无法将它们加载到 RAM 以重塑它们。这就是使我的问题变得复杂的原因。我还没有找到使用 PySpark 重塑数据的方法。我承认我在这个领域的知识有限,这就是我寻求建议的原因。以上是关于将存储在 tfrecord 格式的数据转换为 Tensorflow 中 lstm Keras 模型的输入,并用该数据拟合模型的主要内容,如果未能解决你的问题,请参考以下文章
生成tfrecords格式数据和使用dataset API使用tfrecords数据