首页 > 解决方案 > 用更少的内存为 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,是否有任何解决方案可以减少内存使用量?

标签: pythontensorflowlstm

解决方案


您是否考虑过将窗口化数据集提交到磁盘?然后我可能会使用 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)

让我知道这是否有任何意义。

大卫


推荐阅读