我的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,...
是否有任何技巧可以使它起作用?