深度学习过程之准备数据(数据标准化、生成器)

一个时间步是 10 分钟,每 steps 个时间步采样一次数据,给过去 lookback 个时间步之内的数据,能否预测 delay 个时间步之后的数据? 

开始之前,你需要完成以下两件事:
1、将数据预处理为神经网络可以处理的格式。将不是数值型的数据做向量化,数值型的数据则不用处理。但数据中的每个时间序列位于不同的范围(比如温度通道位于 -20到 +30之间,但气压大约在 1000 毫巴上下)。需要对每个时间序列分别做标准化,让它们在相似的范围内都取较小的值。

2、口编写一个 Python 生成器,以当前的浮点数数组作为输人,并从最近的数据中生成数据批量,同时生成未来的目标温度。因为数据集中的样本是高度冗余的(对于第 N个样本和第 N+1个样本,大部分时间步都是相同的 ),所以显式地保存每个样本是一种浪费。相反我们将使用原始数据即时生成样本。

预处理数据的方法是:将每个时间序列减去其平均值,然后除以其标准差。将使用前200000个时间步作为训练数据,所以只处理这部分。

#数据标准化
mean = float_data[:200000].mean(axis=0)
float_data -= mean
std = float_data[:200000].std(axis=0)
float_data /= std

我们要用到的生成器如下:它生成了一个元组(samples,targets),其中 samples是输入数据的一个批量,targets是对应的目标温度数组。生成器参数如下:

data:浮点数数组组成的原始数组

lookback:输入数据应该包括过去多少个时间步

delay:目标应该在未来多少个时间步之后

min_index和max_index:data数组中的索引,用于界定需要抽取哪些时间步。有助于保存一部分数据用于验证,另一部分用于测试。

shuffle:是打乱样本还是按顺序抽取样本。

batch_size:每个批量的样本数

step:数据采样的周期(单位:时间步)暂时将其设为6,每小时抽取一个数据点。

#生成时间序列样本及其目标的生成器
def generator(data,lookback,delay,min_index,max_index,shuffle=False,batch_size=128,step=6):
    if max_index is None:
        max_index = len(data)-delay-1
    i = min_index + lookback
    while 1:
        if shuffle:
            rows = np.random.ramdint(min_index+lookback,max_index,size=batch_size)
        else:
            if i + batch_size >= max_index:
                i = min_index + lookback
            rows = np.arange(i,min(i+batch_size,max_index))
            i += len(rows)

        samples = np.zeros((len(rows),
                            lookback//step,
                            data.shape[-1]))
        targets = np.zeros((len(rows),))
        for j,row in enumerate(rows):
            indices = range(rows[j]-lookback,rows[j],step)
            samples[j] = data[indices]
            targets[j] = data[rows[j] + delay] [1]
        yield samples,targets

下面使用这个抽象的generator函数来实例化三个生成器:一个用于训练,一个用于验证,一个用于测试。每个生成器分别读取原始数据的不同时间段:训练生成器读取前200000个时间步,验证生成器读取随后的100000个时间步,测试生成器读取剩下的时间步。

#准备训练生成器、验证生成器和测试生成器
lookback = 1440
step = 6
delay = 144
batch_size = 128

train_gen = generator(float_data,
                      lookback = lookback,
                      delay = delay,
                      min_index = 0,
                      max_index = 200000,
                      shuffle = True,
                      step = step,
                      batch_size = batch_size)

val_gen = generator(float_data,
                      lookback = lookback,
                      delay = delay,
                      min_index = 200001,
                      max_index = 300000,
                      step = step,
                      batch_size = batch_size)

test_gen = generator(float_data,
                      lookback = lookback,
                      delay = delay,
                      min_index = 300001,
                      max_index = None,
                      step = step,
                      batch_size = batch_size)

#为了查看整个验证集,需要从val_gen中抽取多少次
val_steps = (300000 - 200001 -lookback) // batch_size

#为了查看整个测试集,需要从test_gen中抽取多少次
test_steps = (len(float_data) - 300001 - lookback) // batch_size





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值