gpt4 book ai didi

Python:为 ConvNet 创建具有多个 channel 的时间序列

转载 作者:行者123 更新时间:2023-12-01 09:06:56 31 4
gpt4 key购买 nike

我正在使用卷积网络来预测时间序列。为此,我使用滚动窗口来获取最后 t 点,将它们用作时间序列。每个功能都将成为一个 channel ,因此我设置了多个时间序列。数据需要为 3 维 [n_samples,window_size,features]。我拥有的原始数据集是[n_samples,features]。数据已经按时间升序排列。我的问题是,鉴于我有接近 500k 行,我创建 3D 张量的方式会使我的计算机崩溃。这是我正在使用的代码。

prueba = x_data # This data set has shape [500k,20]
window_size = 100 # I taking the last 100 days
n_units,n_features = prueba.shape
n_samples = n_units - window_size +1 # Represent the number of samples you are getting from the rolling windows.
data_list = []

for init_index in range(n_samples):

fin_index = window_size + init_index
window_set = prueba[init_index:fin_index,:]
window_flat = np.reshape(window_set,(1,window_size*n_features))
data_list.append(window_flat)

features_tensor = np.concatenate(data_list,axis = 0)
features_tensor = np.reshape(features_tensor,(n_samples,window_size,n_features)) ## This break my computer

问题是,当我使用 np.concatenate 将我创建的所有单独数据集放在一起时,我的计算机崩溃了。有谁知道更快的方法。我试图以一种方式思考避免使用 np.concatenate,但到目前为止我还没有弄清楚。

最佳答案

使用此处的方法(导致np.concatenate)效率非常低,因为您将每个数据点(大致)复制window_size次。这几乎肯定是浪费内存,因为理想情况下,作用于该数据集的任何操作都应该能够滚动执行:遍历时间序列,而不必查看张量中完全扩展/大量重复的数据集格式。

因此,我建议更好的方法是找到一种方法来避免首先构建这个冗余张量。

由于我们不知道您用这个张量做什么,所以无法给出答案。但是,需要考虑以下几点:

  1. 一种“正确”的方法是使用 pandas,它具有滚动窗口功能 df.rolling() docs here 。这正是您想要的(在滚动窗口上执行计算,没有大的冗余张量),但当然前提是它适用于下游代码。

  2. 如果您使用的是 tensorflow,那么通过创建一个生成器来在调用时产生窗口会更好,该窗口可以放入tf.Dataset (请参阅 .from_generator() 方法和示例 here )。

  3. 在 Keras 中,尝试 TimeseriesGenerator,它具有此功能。 docs here

关于Python:为 ConvNet 创建具有多个 channel 的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968661/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com