CNN输入形状的问题(来自训练/测试集的输入样本的可变形状)

时间:2019-04-02 12:00:52

标签: python keras neural-network conv-neural-network

我的CNN输入形状有一些问题。例如,我有N个具有各种形状(L, 20)的样本 我想在CNN中使用此数据集,并且不了解如何将此数据集提供给CNN,如果它需要深度为(20, 20, 1)的具体形状,但是我有(L, 20, 1)和N个样本(如列表),不会以可接受的格式返回形状。 第一个想法很简单:找到max(L)并在其他样本中添加零,我会得到(N, max(L), 20, 1)之类的良好形状,但是我不认为这会很好,无论如何我都想尝试一下。 我已经读过(None, None, 1)输入形状,但是我不知道它是如何工作的。 我也有关于批处理的想法,但是由于我不了解,它也不太适合我。

假设我有4个这样大小的火车样本

0 (223, 24) 1 (272, 24) 2 (223, 24) 3 (93, 24)

它包含在train中,该列表的大小为(4,)

来自MNIST集的CNN的一些简单示例

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='linear',padding='same',
                 input_shape=(None, None, 1)))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D((2, 2),padding='same')) 2
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation='linear',padding='same'))
model.add(LeakyReLU(alpha=0.1))
model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), activation='linear',padding='same'))
model.add(LeakyReLU(alpha=0.1))                  
model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(128, activation='linear'))
model.add(LeakyReLU(alpha=0.1))           
model.add(Dropout(0.3))
model.add(Dense(num_classes, activation='softmax'))

编译它,然后尝试训练

model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(),metrics=['accuracy'])
model.fit(train, target, batch_size=batch_size,epochs=epochs,verbose=1)

和预期的错误,如果我尝试训练它

  

ValueError:检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小。预计会看到1个数组,但获得了以下4个数组的列表:[array([[0,0,0,...,0,0,0],          [0,0,0,...,1,0,0],          [0,0,0,...,0,0,1],          ...,          [1,0,0,...,0,1,1],          [0,0,0,...,0,0,1],          [0,0,0,...,0,0,...

是否有任何技巧可以使它起作用?

0 个答案:

没有答案