У меня есть некоторые проблемы с формой ввода моего 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,)
Простой пример моего набора CNN из набора MNIST
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 массивов: [массив ([[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, ...
Если есть какие-нибудь хитрости, чтобы это работало?