Я пытаюсь реализовать модель, представленную здесь в Керасе. Я более или менее решил, что модель Keras эквивалентна:
inputShape = (32, 640, 3)
model = Sequential()
model.add(Conv2D(NC//2, kernel_size=(4,4), strides=(2,2), kernel_regularizer=regularizers.l2(1e-5), activation='relu', padding='same', input_shape=inputShape))
model.add(Conv2D(NC, kernel_size=(4,4), strides=(2,1), activation='relu', kernel_regularizer=regularizers.l2(1e-5), padding='same'))
model.add(Conv2D(NC, kernel_size=(8,5), strides=(8,5), activation='relu', kernel_regularizer=regularizers.l2(1e-5), padding='same'))
model.add(Reshape((-1, MAX_CHAR, NC)))
Обучающие данные состоят из 5000 32х640 изображений случайно сгенерированных строк и разбиты на два массива: входные данные A
и выходные данные Y
. A
- матрица изображений (NIMG, Height, Width, Channel)
. Y
- это матрица символов (NIMG, MAX_CHAR)
.
MAX_CHAR
- максимальное количество символов в изображении, в данном случае 64. NC
- это количество возможных различных символов, в данном случае 63.
Проблема в том, что когда я запускаю model.fit(A, Y)
, я получаю:
ValueError: Error when checking target: expected reshape_1 to have 4 dimensions, but got array with shape (5001, 64)
Это имеет смысл, учитывая, как в посте блога сказано:
целевая матрица - это трехмерная матрица с тремя измерениями
соответствует семплу, символьному и горячему кодированию 1 соответственно.
Я пробовал model.Flatten()
, но это оставляет мне форму (4032,)
, намного больше, чем 64 символа в данных тренировки. Я также пытался поиграться с векторными значениями Reshape, но безрезультатно.
Итак, мой вопрос: я что-то не так делаю? Есть ли что-то, что я в корне неправильно понимаю, или есть решение, о котором я просто не могу думать / найти?