Keras-Model не обучается должным образом при изменении формы выходного слоя (Keras) - PullRequest
0 голосов
/ 27 мая 2020

Я хочу предсказать классы изображений. Классы хранятся в Label-Array: array([0., 0., 1., ..., 2., 2., 0.], dtype=float32) У меня 3 класса (0,1 и 2)

Моя модель выглядит так:

model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', 
       input_shape=(64, 64 ,3)),
MaxPooling2D(),
Dropout(0.5),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Dropout(0.5),
Flatten(),
Dense(512, activation='relu'),
Dense(256),
Dense(3, activation = 'relu')
])

Когда я использую форму из 3 для последнего плотного слоя, потери и точность вообще не меняются во время тренировки. Когда я увеличиваю форму до 5 для последнего плотного слоя, тренировка работает нормально. Почему не работает с фигурой тройки? В конце концов, у меня три класса.

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['sparse_categorical_accuracy'])

history = model.fit(train_images, train_labels,
                    epochs=num_epochs,
                    validation_data=(val_images, val_labels),
                    callbacks = [tensorboard])

Я также тестировал оптимизатор sgd с такими же результатами

1 Ответ

1 голос
/ 27 мая 2020

Кажется, вы выполняете мультиклассовую классификацию, но вы используете relu в качестве функции активации выходного слоя. Для мультиклассовой классификации вы должны использовать softmax в последнем слое и поддерживать количество нейронов в этом слое, равное количеству классов, которые вы хотите классифицировать.

...