python - 用更少的内存为 LSTM 时间序列创建数据集
问题描述
所以目前我有一个形状为 (8392, 41164) 的时间序列数据,要将其输入我的 lstm 模型,我需要将其重塑为 3D 维度,我使用此代码创建数据集
def create_dataset(X, y, time_steps):
Xs, ys = [], []
for i in range(len(X) - time_steps):
v = X[i:(i + time_steps)]
Xs.append(v)
ys.append(y[i + time_steps])
return np.array(Xs), np.array(ys)
它以 (8378, 14, 41164) 的形式返回数据,但它消耗大约 50GB 的 RAM,是否有任何解决方案可以减少内存使用量?
解决方案
您是否考虑过将窗口化数据集提交到磁盘?然后我可能会使用 B-Tree 或其他东西来使索引更容易,但这是一个很好的第一步。您可以通过在您的 for 循环中一次将 1024 个窗口框起来并将它们存储为每个页面的“data_{i}.csv”来将数据存储在磁盘上。这可以这样做:
import pandas as pd
page_size = 1024
page_i = 1
for i in range(len(X) - time_steps):
pageX = []
pageY = []
for j in range(page_size):
v = X[i:(i + time_steps)]
pageX.append(v)
pageY.append(y[i + time_steps])
page_df = pd.DataFrame([{'X': pageX[j], 'Y': pageY[j]} for j in range(page_size)])
page_df.to_csv(f"data_{page_i}.csv", index=False)
page_i += 1
Xs.extend(pageX)
ys.extend(pageY)
return np.array(Xs), np.array(ys)
让我知道这是否有任何意义。
大卫
推荐阅读
- openid - Azure B2C - Blazor 中的颁发者 (Azure AD) 访问令牌
- flutter - 在加载 ModalProgressHUD 时插入文本失败
- python - Python在图中查找给定顶点的度数
- python - 使用凸网格作为碰撞几何体时退出代码 139
- java - 如何在 Trie 数据结构中跳转 Trie 节点?
- ssl - 如何使用 teiid 中配置的 SSL 将 NIFI 连接到 Teiid 数据虚拟化?
- javascript - 在对象下定义函数的语法是什么
- python - 用 NaN 替换一些数据框值
- c# - 实体框架
- java - 在子类中初始化的 Java 超类字段