上下文
我阅读了一些有关Keras中有状态递归神经网络实现的博客(例如here和here)。
关于有状态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问题中所缺少的是:
fit()
相同的方式进行操作,这意味着设置epochs=1
,并在设置时对其进行迭代x次
像示例中一样,在每次迭代中model.reset_states()
? fit_generator()
仅在使用batch_size
时完成stateful=True
之后才重置状态(会很棒)吗? fit_generator()
在每批处理后重置状态(会有问题)? 后一个问题尤其涉及此here语句形式:
无状态:在无状态LSTM配置中,内部状态为 在每个训练批次或每个批次进行预测时重置。
有状态:在有状态LSTM配置中,仅内部状态 调用reset_state()函数时重置。