keras `fit_generator()` 的形状问题
Shape issue with keras `fit_generator()`
我在 keras 的 fit_generator
函数中使用的自定义生成器函数返回的 numpy 数组的形状有一个看似简单的问题。
生成器函数类似这样:
def data_generator(full_data, encoder):
for s in full_data:
in1_X = encoder.encode(s[:,0])
in2_X = encoder.encode(s[:,1])
out1_y = encoder.encode(s[:,2])
out2_y = encoder.encode(s[:,3])
X = [in1_X, in2_X]
y = [out1_y, out2_y]
yield (X,y)
我可以通过使用 for 循环并打印形状来获得从 in1_X 返回的形状,这很简单 returns (60,)
然而,当使用 fit_generator()
函数调用它时,它失败了:
train_data_gen = data_generator(full_data, encoder)
main_in = Input(shape=(seq_len,), name='main_input')
# ...
# define model
# ...
joint_model.fit_generator(train_data_gen, steps_per_epoch=2000, epochs=2)
输出是这样的:
Error when checking input:
expected main_input to have shape (None, 60) but got array with shape (60, 1)
如何才能不将 numpy 数组从形状 (60,)
更改为形状 (60, 1)
?还有其他人遇到过这个问题吗?
我们找到了对这个问题的回应。请查看以下 PR 中的解释和评论:https://github.com/fchollet/keras/issues/4641
提供一个二维数组为我们解决了这个问题。
我在 keras 的 fit_generator
函数中使用的自定义生成器函数返回的 numpy 数组的形状有一个看似简单的问题。
生成器函数类似这样:
def data_generator(full_data, encoder):
for s in full_data:
in1_X = encoder.encode(s[:,0])
in2_X = encoder.encode(s[:,1])
out1_y = encoder.encode(s[:,2])
out2_y = encoder.encode(s[:,3])
X = [in1_X, in2_X]
y = [out1_y, out2_y]
yield (X,y)
我可以通过使用 for 循环并打印形状来获得从 in1_X 返回的形状,这很简单 returns (60,)
然而,当使用 fit_generator()
函数调用它时,它失败了:
train_data_gen = data_generator(full_data, encoder)
main_in = Input(shape=(seq_len,), name='main_input')
# ...
# define model
# ...
joint_model.fit_generator(train_data_gen, steps_per_epoch=2000, epochs=2)
输出是这样的:
Error when checking input:
expected main_input to have shape (None, 60) but got array with shape (60, 1)
如何才能不将 numpy 数组从形状 (60,)
更改为形状 (60, 1)
?还有其他人遇到过这个问题吗?
我们找到了对这个问题的回应。请查看以下 PR 中的解释和评论:https://github.com/fchollet/keras/issues/4641 提供一个二维数组为我们解决了这个问题。