我想使用Keras中的功能API训练有状态 LSTM网络。
拟合方法为fit_generator
。
我可以使用:batch_size = 1
我的输入图层是:
Input(shape=(n_history, n_cols),batch_shape=(batch_size, n_history, n_cols),
dtype='float32', name='daily_input')
生成器如下:
def training_data():
while 1:
for i in range(0,pdf_daily_data.shape[0]-n_history,1):
x = f(i)() # f(i) shape is (1, n_history, n_cols)
y = y(i)
yield (x,y)
然后合适的是:
model.fit_generator(training_data(),
steps_per_epoch=pdf_daily_data.shape[0]//batch_size,...
这很有效,但是很慢,并且在batch_size = 1
在此配置中,我如何设置batch_size > 1
?
请记住:LSTM图层 stateful = True
答案 0 :(得分:0)
您必须将您的生成器修改为yeld
您想要批次所需的元素数量。
目前,您正在按元素迭代数据元素(根据您的第三个range()
参数),获得单个 x
和y
,以及然后产生那个元素。当您返回单个元素时,您将获得batch_size=1
,因为fit_generator
是逐个元素训练的。
假设您希望批量大小为10,则必须对数据进行切片并获得每个10个元素的片段,并yield
这些片段而不是单个元素。请确保相应地对输入图层的形状反映这些更改,并传递相应的batch_size
。