使用Keras fit_generator会产生错误的形状错误

时间:2018-09-23 14:39:07

标签: python python-3.x tensorflow keras keras-layer

我在 fit_generator 上遇到错误。我的生成器返回以下内容:

yield(row.values, label)

例如,使用它:

myg = generate_array()
for i in myg:
    print((i[0].shape))
    print(i)
    break

(9008,)
(array([0.116516, 0.22419 , 0.03373 , ..., 0.      , 0.      , 0.      ]), 0)

但是以下内容引发异常:

model = Sequential()
model.add(Dense(84, activation='relu', input_dim=9008))

ValueError: Error when checking input: expected dense_1_input to have shape 
(9008,) but got array with shape (1,)

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

正如Kota Mori所建议:数据生成器需要提供一批数据,而不是单个样本。参见例如:https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly

由于我想要随机梯度下降(批量大小为1),因此以下代码解决了该问题:

public class ShouldItCompile {
    public static void main(String[] args) {
        AtomicLong value1 = new AtomicLong(0);
        final long[] value2 = {0};
        IntStream.iterate(1, i -> 1).limit(100).parallel().forEach(i -> value1.incrementAndGet());//line1
        IntStream.iterate(1, i -> 1).limit(100).parallel().forEach(i -> ++value2[0]);//line2
        System.out.println(value1+" "+value2[0]);
    }
}