Ошибка при проверке цели: ожидается, что плотность_3 имеет 2 измерения, но получен массив с формой (10, 10, 2) - PullRequest
0 голосов
/ 07 апреля 2019

У меня 128x128 RGB-изображений в форме (n,128,128,3), с (n,10,2) -образными метками.Это мой код для нейронной сети:

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import InputLayer
from tensorflow.python.keras.layers import  MaxPooling2D
from tensorflow.python.keras.layers import Conv2D, Dense, Flatten
from tensorflow.python.keras.optimizers import Adam

from data_gen import gen_dataset
data, labels = gen_dataset(10)
test_data, test_labels = gen_dataset(10)

model = Sequential()

print(data.shape) # (10, 128, 128, 3)
print(labels.shape) # (10, 10, 2)

model.add(InputLayer(input_shape=(128, 128, 3)))
model.add(Conv2D(kernel_size=5, strides=1, filters=32, padding='same', activation='relu', name='conv1'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Conv2D(kernel_size=5, strides=1, filters=64, padding='same', activation='relu', name='conv2'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Conv2D(kernel_size=5, strides=1, filters=64, padding='same', activation='relu', name='conv3'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(2, activation='softmax'))

optimizer = Adam(lr=1e-3)

model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x=data, y=labels, epochs=5, batch_size=5)
result = model.evaluate(x=test_data, y=test_labels)
print('\n\nAccuracy:', result[1])

Если я запустил его, я получаю сообщение об ошибке ValueError: Error when checking target: expected dense_3 to have 2 dimensions, but got array with shape (10, 10, 2)

Я знаю, что есть вопросы, похожие на это, но эти вопросыне ответил на мой вопрос.Я попытался изменить первое число нейронов Dense Layer, попытался добавить больше максимальных пулов и слоев конвоя, но это не сработало.

1 Ответ

0 голосов
/ 12 апреля 2019

Ошибка в этой строке:

model.add(Dense(2, activation='softmax')) 

Это должно быть:

model.add(Dense(10, activation='softmax'))

Причина

Поскольку у вас есть десять классов.

...