为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2021-05-30 11:55:05
我正在使用卷积网络来预测时间序列。为此,我正在使用滚动窗口来获取最后的t点以将它们用作时间序列。每个功能都将成为一个频道,因此我设置了多个时间序列。数据必须为3维[n_samples,window_size,features]。我拥有的原始数据集是[n_samples,features]。数据已按时间升序排列。我的问题是,考虑到我有近50万行,我创建3D张量的方式会使计算机崩溃。这是我正在使用的代码。prueba = x_data # This data set has shape [500k,20]window_size = 100 # I taking the last 100 daysn_units,n_features = prueba.shapen_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的方式进行思考,但是到目前为止我还没有弄清楚。
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

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

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

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

  1. 使用此操作的一种“正确”方法是使用pandas,此处具有滚动窗口功能df.rolling()docs。这恰好满足了您的要求(在滚动窗口上执行计算,没有很大的冗余张量),但是当然只有在下游代码有效的情况下才可以。

  2. 如果您正在使用tensorflow,那么yield在调用时为窗口创建一个生成器会更好地为您服务,该生成器可以放入 a tf.Dataset(请参阅此处的.from_generator()方法和示例)。

  3. 在Keras中,尝试TimeseriesGenerator使用具有此功能的。 此处的文档


查看完整回答
反对 回复 2021-06-01
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信