2

语境

我阅读了一些关于在 Keras 中实现有状态循环神经网络的博客(例如这里这里)。
在 stackoverflow 上还有几个关于有状态 RNN 的问题,这个问题与我的很接近。

链接的教程使用fit()- 方法代替fit_generator()并通过手动迭代 epoch 来传递状态,epochs=1fit()本示例中取自此处的示例:

# fit an LSTM network to training data
def fit_lstm(train, batch_size, nb_epoch, neurons):
    X, y = train[:, 0:-1], train[:, -1]
    X = X.reshape(X.shape[0], 1, X.shape[1])
    model = Sequential()
    model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    for i in range(nb_epoch):
        model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False)
        model.reset_states()
    return model


我的问题

我想使用fit_generator()而不是fit(),但也使用无状态 LSTM/GRU 层。我在上面链接的其他stackoverflow问题中缺少的是:

  1. 我可以像示例中那样在每次迭代中设置时以与 with 相同的方式进行操作fit(),即设置epochs=1,并对其进行 x 次 迭代吗?model.reset_states()
  2. 还是仅在使用fit_generator()完成后才重置状态(什么会很棒)?batch_sizestateful=True
  3. 还是fit_generator()在每个批次之后重置状态(会有什么问题)?

后一个问题在这里特别涉及这种陈述形式:

无状态:在无状态 LSTM 配置中,内部状态在每个训练批次或每个批次进行预测时重置。
Stateful:在有状态的 LSTM 配置中,只有在调用 reset_state() 函数时才会重置内部状态。

4

0 回答 0