栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

了解Keras LSTM:批处理大小和状态性的作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

了解Keras LSTM:批处理大小和状态性的作用

让我通过一个例子解释一下:

假设您有以下系列:1,2,3,4,5,6,…,100。您必须确定您的lstm将学习多少时间步长,并据此重塑数据。如下所示:

如果您决定time_steps = 5,则必须通过以下方式将时间序列重塑为样本矩阵:

1,2,3,4,5->样本1

2,3,4,5,6->样本2

3,4,5,6,7->样本3

等等…

这样,您将得到一个形状矩阵(96个样本x 5个时间步长)

该矩阵应重塑为(96 x 5 x
1),表示Keras您只有1个时间序列。如果您有更多并行的时间序列(如您的情况),则对每个时间序列执行相同的操作,因此将以每种形状(96个样本x
5个时间步长)的n个矩阵(每个时间序列一个)结束。

为了争辩,我们假设您有3个时间序列。您应该将所有三个矩阵合并为一个单一的张量形状(96个样本x 5 timeSteps x 3
timeSeries)。此示例的lstm的第一层是:

    model = Sequential()    model.add(LSTM(32, input_shape=(5, 3)))

32作为第一个参数完全由您决定。这意味着在每个时间点,您的3个时间序列将成为32个不同的变量作为输出空间。更容易将每个时间步骤视为具有3个输入和32个输出的完全连接的层,但计算方式与FC层不同。

如果要堆叠多个lstm层,请使用return_sequences = True参数,因此该层将输出整个预测序列,而不仅仅是最后一个值。

您的目标应该是您要预测的系列中的下一个值。

综上所述,假设您具有以下时间序列:

时间序列1(主):1、2、3、4、5、6,…,100

时间序列2(支持):2,4,6,8,10,12,…,200

时间序列3(支持):3,6,9,12,15,18,…,300

创建输入和目标张量

x     -> y

1,2,3,4,5-> 6

2,3,4,5,6-> 7

3,4,5,6,7-> 8

重新格式化其余的时间序列,但由于您不想预测那些序列,因此请忽略目标

建立模型

    model = Sequential()    model.add(LSTM(32, input_shape=(5, 3), return_sequences=True)) # Input is shape (5 timesteps x 3 timeseries), output is shape (5 timesteps x 32 variables) because return_sequences  = True    model.add(LSTM(8))  # output is shape (1 timesteps x 8 variables) because return_sequences = False    model.add(Dense(1, activation='linear')) # output is (1 timestep x 1 output unit on dense layer). It is compare to target variable.

编译并训练。好的批处理大小是32。批处理大小是将样本矩阵拆分以加快计算速度的大小。只是不要使用statefull



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号