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

У меня есть такой вход

x=[[0,0,0,0,1,0,0,0]....[n,n,n,n,n,n,n,n]] x.shape=(18998,8)

Такой вывод

y= 11 11 11 11 ... 10 y.shape=(18998,)

Я строю такую ​​модель

env_model = Sequential()
env_model.add(Dense(8, activation='relu', input_dim=8))
env_model.add(Dense(128, activation='relu'))
env_model.add(Dense(256, activation='relu'))
env_model.add(Dense(512, activation='relu'))
env_model.add(Dense(14, activation='softmax'))
env_model.summary()
env_model.save('model_weights/weights.environment.h5')

Я думал, что модель не должна была быть проблемой, но я продолжал получать сообщение об ошибке, подобное следующему:

'ValueError: Ошибка при проверке цели: ожидается, что плотность_8 имеет форму(14,), но получил массив с формой (1,) '

Не могли бы вы помочь мне указать, что не так с моим входом, выходом или моделью?Я с нетерпением жду вашей помощи.Большое спасибо!

1 Ответ

0 голосов
/ 11 марта 2019

В вашей модели

env_model.add(Dense(14, activation='softmax')) 

Плотный вектор ожидает целевой массив формы (batch_size, 14).Вы предоставляете ему массив формы (batch_size,).

Примечание. В форме массива NumPy запятая определяет неопределенное измерение.Предположим, у вас есть массив формы (12,).Это означает, что у вас есть 12 образцов различной длины (1, 2, 6 и т. Д.).Второе значение dim не является специфическим и, следовательно, отображается как ,.

Итак, вам нужно преобразовать ваши целевые данные в форму (18998, dim), где dim - длина объекта.Для достижения этой цели вы можете попробовать два подхода:

  1. Как уже упоминалось @giser_yugang, преобразуйте целевые данные в категориальные данные, используя keras.utils.to_categorical()
  2. Заполните вектор объектов до фиксированной длины.Это можно сделать с помощью keras.preprocessing.sequences.pad_sequence()

Следовательно, в конечном итоге у вас должны быть целевые данные фиксированной длины.

...