Ошибка при проверке цели: ожидается, что softmax_1 будет иметь форму (1,), но получит массив с формой (2,) ', Керас - PullRequest
0 голосов
/ 24 октября 2018

Я впервые использую Keras для построения Conv Net.Мои слои выглядят следующим образом:

layers = [
Conv2D(8,kernel_size=(4,4),padding='same',input_shape=( 200, 180,3),kernel_initializer="glorot_normal",data_format="channels_first"),
Activation("relu"),
MaxPooling2D(pool_size=(8,8),padding='same',data_format='channels_first'),
Conv2D(16,(2,2),padding='same',kernel_initializer="glorot_normal"),
Activation("relu"),
MaxPooling2D(pool_size=(4,4),padding='same',data_format='channels_first'),
Conv2D(4,(3,3),padding='same',kernel_initializer="glorot_normal"),
Activation("relu"),
MaxPooling2D(pool_size=(2,2),padding='same',data_format='channels_first'),
Flatten(),
Dense(2,input_shape=(48,)),
Softmax(axis=-1)
]
#Edit, here is the part for compiling the model and fitting it
model = Sequential(layers)    

model.compile(optimizer="adam",loss="sparse_categorical_crossentropy" 
metrics=["accuracy"])
trainHistory = model.fit(x=X_train,y=Y_train,batch_size=3,epochs=1000)

Мой массив меток имеет форму (,2).Но когда я пытаюсь использовать подгонку на модели, она выдает ошибку, которая softmax_1 должна иметь форму (1,).Но я четко упомянул единицы измерения Dense как 2, и softmax возвращает выходные данные того же измерения, что и входные данные.

Так откуда же взялась 1?Я попытался использовать фиктивный массив меток 1 измерения, и он работает.Так что я делаю не так?Как использовать двухмерный массив, который у меня есть?

1 Ответ

0 голосов
/ 24 октября 2018

Проблема в том, что вы используете sparse_categorical_crossentropy в качестве функции потерь.Эта функция потерь используется, когда данные метки (например, Y_train) кодируются как целые числа (например, 0, 1, 2, ...).Однако, если метки имеют горячее кодирование, что, как кажется, имеет место в вашем коде, вам нужно вместо этого использовать categorical_crossentropy в качестве функции потерь.

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