从Keras文档:
dropout:浮点数介于0和1之间.为输入的线性变换而下降的单位的分数.
recurrent_dropout:浮点数在0和1之间.对于循环状态的线性变换,单位的分数下降.
任何人都可以指出每个辍学下面的图像在哪里发生?
假设我有一个整数序列:
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) 我遇到过研究出版物和问答讨论需要检查每个反向传播时间 (BPTT) 的 RNN 梯度 - 即每个时间步长的梯度。主要用途是自省:我们如何知道 RNN 是否正在学习长期依赖?一个自己主题的问题,但最重要的见解是梯度流:
...但是我如何在 Keras / TensorFlow 中实际可视化这些梯度?一些相关的答案是在正确的方向上,但它们似乎对双向 RNN 失败了,并且只展示了如何获得层的梯度,而不是如何有意义地可视化它们(输出是一个 3D 张量 - 我该如何绘制它?)
python visualization keras tensorflow recurrent-neural-network
假设我有一个这样的模型(这是一个用于时间序列预测的模型):
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?一样的地方?(在批量标准化之后还是之前?)
AveragePooling1D在Conv1D和之间添加怎么样LSTM?在这种情况下,是否可以在层之间Conv1D和之间添加批量标准化AveragePooling1D而不对LSTM层产生任何影响?conv-neural-network lstm keras tensorflow batch-normalization
我正在使用(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) 正如标题所述,我正在做多元时间序列预测。我对这种情况有一些经验,并且能够在 TF Keras 中成功设置和训练一个工作模型。
但是,我不知道处理多个不相关的时间序列样本的“正确”方法。我有大约 8000 个独特的样本“块”,每个样本有 800 个时间步到 30,000 个时间步。当然,我无法将它们全部连接成一个时间序列,因为样本 2 的第一个点与样本 1 的最后一个点在时间上没有关系。
因此,我的解决方案是将每个样本单独放入一个循环中(效率极低)。
我的新想法是可以/应该我用空的时间步长填充每个样本的开始= RNN 的回顾量,然后将填充的样本连接成一个时间序列?这意味着第一个时间步将有一个主要为 0 的回溯数据,这听起来像是针对我的问题的另一个“黑客”,而不是正确的方法。
我遇到过研究出版物和问答讨论检查 RNN 权重的必要性;一些相关的答案是在正确的方向,建议get_weights()- 但我如何真正有意义地可视化权重?也就是说,LSTM 和 GRU 都有门,并且所有RNN 都有用作独立特征提取器的通道- 那么我如何(1)获取每个门的权重,以及(2)以信息丰富的方式绘制它们?
python visualization keras tensorflow recurrent-neural-network
我知道 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)
设置权重衰减(例如 l2 惩罚)的指南是什么?主要是,我如何跟踪它在整个训练过程中是否“有效”?(即,与没有 l2 惩罚相比,权重是否实际上正在衰减,以及衰减了多少)。