我试图调和我对LSTM的理解,并在克里斯托弗·奥拉在克拉拉斯实施的这篇文章中指出.我正在关注Jason Brownlee为Keras教程撰写的博客.我主要困惑的是,
[samples, time steps, features]和,让我们参考下面粘贴的代码集中讨论上述两个问题:
# reshape into X=t and Y=t+1
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], look_back, 1))
testX = numpy.reshape(testX, (testX.shape[0], look_back, 1))
########################
# The IMPORTANT BIT
##########################
# create and fit the LSTM network
batch_size = 1
model = Sequential()
model.add(LSTM(4, …Run Code Online (Sandbox Code Playgroud) 我读了很多关于它的文章,似乎没有人回答这个非常基本的问题.它总是含糊不清:
在stateful = FalseLSTM层中,keras会在以下情况后重置状态:
假设我的X_train形状为(1000,20,1),意味着单个值的20个步骤的1000个序列.如果我做:
model.fit(X_train, y_train, batch_size=200, nb_epoch=15)
Run Code Online (Sandbox Code Playgroud)
它会重置每个序列的状态(重置状态1000次)吗?
或者它会重置每个批次的状态(重置状态5次)?
我很难概念化Keras中有状态和无状态LSTM之间的区别.我的理解是,在每个批处理结束时,在无状态情况下"重置网络状态",而对于有状态情况,每个批处理都保留网络状态,然后必须在每个时代的结束.
我的问题如下:1.在无状态的情况下,如果状态未在批次之间保留,网络如何学习?2.何时使用LSTM的无状态与有状态模式?
如果我错了,请纠正我,但根据官方Keras 文档,默认情况下,fit 函数的参数为“shuffle=True”,因此它会在每个 epoch 上对整个训练数据集进行洗牌。
但是,使用 LSTM 或 GRU 等循环神经网络的要点是使用每个数据的精确顺序,以便先前数据的状态影响当前数据。
如果我们将所有数据打乱,所有逻辑序列都会被破坏。因此我不明白为什么有这么多 LSTM 的例子,其中参数没有设置为 False。使用没有序列的 RNN 有什么意义?
此外,当我将 shuffle 选项设置为 False 时,即使数据之间存在依赖关系,我的 LSTM 模型的性能也会降低:我使用 KDD99 数据集,其中连接有链接。