具有fit_generator()的有状态递归神经网络

时间:2019-05-31 14:58:59

标签: tensorflow keras lstm recurrent-neural-network gated-recurrent-unit

上下文

我阅读了一些有关Keras中有状态递归神经网络实现的博客(例如herehere)。
关于有状态RNN的stackoverflow,还有几个问题,this question接近我。

链接的教程使用fit()方法而不是fit_generator(),并通过在epochs=1中用fit()手动遍历历元来传递状态,例如本示例取自{ {3}}:

# 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. 我可以用与fit()相同的方式进行操作,这意味着设置epochs=1,并在设置时对其进行迭代x次 像示例中一样,在每次迭代中model.reset_states()
  2. 还是fit_generator()仅在使用batch_size时完成stateful=True之后才重置状态(会很棒)吗?
  3. 还是fit_generator()在每批处理后重置状态(会有问题)?

后一个问题尤其涉及此here语句形式:

  

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

0 个答案:

没有答案