相关疑难解决方法(0)

Keras:LSTM丢失与LSTM重复丢失之间的差异

从Keras文档:

dropout:浮点数介于0和1之间.为输入的线性变换而下降的单位的分数.

recurrent_dropout:浮点数在0和1之间.对于循环状态的线性变换,单位的分数下降.

任何人都可以指出每个辍学下面的图像在哪里发生?

在此输入图像描述

lstm keras dropout

52
推荐指数
2
解决办法
2万
查看次数

将时序数据馈入有状态LSTM的正确方法?

假设我有一个整数序列:

0,1,2, ..

并希望根据给定的最后3个整数来预测下一个整数,例如:

[0,1,2]->5[3,4,5]->6

假设我像这样设置模型:

batch_size=1
time_steps=3
model = Sequential()
model.add(LSTM(4, batch_input_shape=(batch_size, time_steps, 1), stateful=True))
model.add(Dense(1))
Run Code Online (Sandbox Code Playgroud)

据我了解,模型具有以下结构(请原图):

在此处输入图片说明

第一个问题:我的理解正确吗?

请注意,我已经画出了C_{t-1}, h_{t-1}进入图片的先前状态,因为指定时会暴露出来stateful=True。在这个简单的“下一个整数预测”问题中,应通过提供此额外的信息来改善性能(只要先前的状态是由前三个整数产生的)。

这使我想到了一个主要问题: 似乎标准做法(例如,参见此博客文章TimeseriesGenerator keras预处理实用程序)是在训练过程中向模型提供一组交错的输入。

例如:

batch0: [[0, 1, 2]]
batch1: [[1, 2, 3]]
batch2: [[2, 3, 4]]
etc
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为这似乎需要第一Lstm单元的输出(对应于第一时间步长)。看这个图:

从tensorflow docs

stateful:布尔值(默认为False)。如果为True,则批次中索引i的每个样本的最后状态将用作下一个批次中索引i的样本的初始状态。

似乎此“内部”状态不可用,并且所有可用状态都是最终状态。看这个图:

因此,如果我的理解是正确的(显然不是这样),那么在使用时是否不应该将不重叠的样本窗口馈送到模型中stateful=True?例如:

batch0: [[0, 1, 2]]
batch1: [[3, 4, 5]]
batch2: [[6, 7, 8]]
etc
Run Code Online (Sandbox Code Playgroud)

python machine-learning lstm keras tensorflow

7
推荐指数
1
解决办法
226
查看次数

如何在 Keras/TensorFlow 中可视化 RNN/LSTM 梯度?

我遇到过研究出版物和问答讨论需要检查每个反向传播时间 (BPTT) 的 RNN 梯度 - 即每个时间步长的梯度。主要用途是自省:我们如何知道 RNN 是否正在学习长期依赖?一个自己主题的问题,但最重要的见解是梯度流

  • 如果一个非零梯度流经每个时间步,那么每个时间步都有助于学习——即,结果梯度源于对每个输入时间步的考虑,因此整个序列会影响权重更新
  • 如上所述,RNN不再忽略长序列的一部分,而是被迫向它们学习

...但是我如何在 Keras / TensorFlow 中实际可视化这些梯度?一些相关的答案是在正确的方向上,但它们似乎对双向 RNN 失败了,并且只展示了如何获得层的梯度,而不是如何有意义地可视化它们(输出是一个 3D 张量 - 我该如何绘制它?)

python visualization keras tensorflow recurrent-neural-network

6
推荐指数
1
解决办法
2299
查看次数

CNN-LSTM 的批量归一化层

假设我有一个这样的模型(这是一个用于时间序列预测的模型):

ipt   = Input((data.shape[1] ,data.shape[2])) # 1
x     = Conv1D(filters = 10, kernel_size = 3, padding = 'causal', activation = 'relu')(ipt) # 2
x     = LSTM(15, return_sequences = False)(x) # 3
x = BatchNormalization()(x) # 4
out   = Dense(1, activation = 'relu')(x) # 5
Run Code Online (Sandbox Code Playgroud)

现在我想向这个网络添加批量标准化层。考虑到批量标准化不适用于 LSTM,我可以在Conv1D层之前添加它吗?我认为在LSTM.

另外,我在哪里可以在这个网络中添加 Dropout?一样的地方?(在批量标准化之后还是之前?)

  • AveragePooling1DConv1D和之间添加怎么样LSTM?在这种情况下,是否可以在层之间Conv1D和之间添加批量标准化AveragePooling1D而不对LSTM层产生任何影响?

conv-neural-network lstm keras tensorflow batch-normalization

6
推荐指数
1
解决办法
2188
查看次数

如何使用keras-self-attention软件包可视化注意力LSTM?

我正在使用(keras-self-attention)在KERAS中实现注意力LSTM。训练模型后如何可视化注意力部位?这是一个时间序列预测案例。

from keras.models import Sequential
from keras_self_attention import SeqWeightedAttention
from keras.layers import LSTM, Dense, Flatten

model = Sequential()
model.add(LSTM(activation = 'tanh' ,units = 200, return_sequences = True, 
               input_shape = (TrainD[0].shape[1], TrainD[0].shape[2])))
model.add(SeqSelfAttention())
model.add(Flatten())    
model.add(Dense(1, activation = 'relu'))

model.compile(optimizer = 'adam', loss = 'mse')
Run Code Online (Sandbox Code Playgroud)

python lstm keras tensorflow attention-model

5
推荐指数
1
解决办法
266
查看次数

使用多个样本时,如何使用 Keras 进行多变量时间序列预测

正如标题所述,我正在做多元时间序列预测。我对这种情况有一些经验,并且能够在 TF Keras 中成功设置和训练一个工作模型。

但是,我不知道处理多个不相关的时间序列样本的“正确”方法。我有大约 8000 个独特的样本“块”,每个样本有 800 个时间步到 30,000 个时间步。当然,我无法将它们全部连接成一个时间序列,因为样本 2 的第一个点与样本 1 的最后一个点在时间上没有关系。

因此,我的解决方案是将每个样本单独放入一个循环中(效率极低)。

我的新想法是可以/应该我用空的时间步长填充每个样本的开始= RNN 的回顾量,然后将填充的样本连接成一个时间序列?这意味着第一个时间步将有一个主要为 0 的回溯数据,这听起来像是针对我的问题的另一个“黑客”,而不是正确的方法。

python time-series lstm keras tensorflow

3
推荐指数
1
解决办法
995
查看次数

如何在 Keras/TensorFlow 中可视化 RNN/LSTM 权重?

我遇到过研究出版物和问答讨论检查 RNN 权重的必要性;一些相关的答案是在正确的方向,建议get_weights()- 但我如何真正有意义地可视化权重?也就是说,LSTM 和 GRU 都有,并且所有RNN 都有用作独立特征提取器的通道- 那么我如何(1)获取每个门的权重,以及(2)以信息丰富的方式绘制它们?

python visualization keras tensorflow recurrent-neural-network

3
推荐指数
1
解决办法
4125
查看次数

知道在 Keras 中需要多少个 LSTM 单元以及每个 LSTM 单元中有多少个单元的规则是什么?

我知道 LSTM 单元内部有许多 ANN。

但是在为同一问题定义隐藏层时,我看到有些人只使用 1 个 LSTM 单元,而其他人则使用 2、3 个 LSTM 单元,如下所示 -

model = Sequential()
model.add(LSTM(256, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(128, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(64, input_shape=(n_prev, 1), return_sequences=False))
model.add(Dropout(0.3))
model.add(Dense(1))
model.add(Activation('linear'))
Run Code Online (Sandbox Code Playgroud)
  1. 关于您应该使用多少个 LSTM 单元,是否有任何规则?或者它只是手动实验?
  2. 紧随其后的另一个问题是,您应该在 LSTM 单元中使用多少个单元。对于同样的问题,有些人需要 256,有些人需要 64。

python lstm keras tensorflow recurrent-neural-network

2
推荐指数
1
解决办法
4216
查看次数

如何设置和跟踪体重衰减?

设置权重衰减(例如 l2 惩罚)的指南是什么?主要是,我如何跟踪它在整个训练过程中是否“有效”?(即,与没有 l2 惩罚相比,权重是否实际上正在衰减,以及衰减了多少)。

python deep-learning keras tensorflow

1
推荐指数
1
解决办法
561
查看次数