ValueError: Ошибка при проверке цели: ожидается, что плотность_6 будет иметь форму (37,), но получен массив с формой (101,) - PullRequest
0 голосов
/ 14 октября 2019

В настоящее время я работаю над проблемой Codalab, где мы должны предсказать svg-код (цель), учитывая изображение (входные данные). Я работаю с Keras API для построения нейронной сети, чтобы построить модель. Кажется, в архитектуре самой модели не так уж и много неправильного, так как она работает. Кредиты на архитектуру должны идти к Harshall Lamba, так как мой код в значительной степени вдохновлен моделью, которую я нашел на Medium (https://towardsdatascience.com/image-captioning-with-keras-teaching-computers-to-describe-pictures-c88a46a311b8). Однако, когда я пытаюсь подогнать свои данные, возвращается следующая ошибка:

ValueError: Ошибка при проверке цели: ожидалось, что плотность_6 имеет форму (37,), но получен массив с формой (101,)

Я пытаюсь вывести 37 вероятностей, используя активацию softmax, так как яздесь я собираюсь сделать прогноз последовательности.

Я попробовал несколько вещей, чтобы привести модель в соответствие. Я очень внимательно посмотрел на модель в статье, поэтому я вполне уверен, что там нет никаких проблемМои данные изображения (X) имеют следующую структуру (64, 64, 4), и моя целевая последовательность находится в (101,). Единственное, что до сих пор работает, - это когда я изменяю свой выходной слой на 101 единицу. Однако это, очевидно, не то, что я хочу, поскольку выходные единицы должны напоминать размер моего словаря (vocab_size).


max_len = 101

vocab_size = 37

inputs1 = Input(shape=(64, 64, 4))
conv1 = Conv2D (16, kernel_size = (3,3), strides=(1, 1), padding='same') (inputs1)
pool1 = MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid') (conv1)
conv2 = Conv2D (8, kernel_size = (3,3), strides=(2, 2), padding='same') (pool1)
pool2 = MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid') (conv2)

flat1 = Flatten () (pool2)

fe1 = Dropout(0.5)(flat1)
fe2 = Dense(256, activation='relu')(fe1)

# SVG embedding
inputs2 = Input(shape=(max_len,))
se1 = Embedding(vocab_size, 16, mask_zero=True)(inputs2)
se2 = Dropout(0.5)(se1)
se3 = LSTM(256, return_sequences = False)(se2)

# decoder (feed forward) model
decoder1 = add([fe2, se3])
decoder2 = Dense(256, activation='relu')(decoder1)
outputs = Dense(vocab_size, activation='softmax')(decoder2)

# merge the two input models
model = Model(inputs=[inputs1, inputs2], outputs=outputs)
model.compile (loss='categorical_crossentropy', optimizer='rmsprop', metrics = ['accuracy'])

model.fit ([X, y], y, epochs = 3, batch_size = 1028)

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...