Я тренирую трехслойную нейронную сеть с помощью keras:
model = models.Sequential()
model.add(Conv2D(32, (3, 3), padding="same",
input_shape=input_shape, strides=2, kernel_regularizer=l2(reg)))
model.add(BatchNormalization(axis=channels))
model.add(Activation("relu"))
model.add(Conv2D(64, (3, 3), padding="same",
input_shape=input_shape, strides=2, kernel_regularizer=l2(reg)))
model.add(BatchNormalization(axis=channels))
model.add(Activation("relu"))
model.add(Conv2D(128, (3, 3), padding="same",
input_shape=input_shape, strides=2, kernel_regularizer=l2(reg)))
model.add(BatchNormalization(axis=channels))
model.add(Activation("relu"))
model.add(layers.Flatten())
model.add(layers.Dense(neurons, activation='relu', kernel_regularizer=l2(reg)))
model.add(Dropout(0.50))
model.add(Dense(2))
model.add(Activation("softmax"))
Мои данные имеют два класса, и я использую разреженную категориальную перекрестную энтропию:
model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
history = model.fit(x=X, y=y, batch_size=batch_size, epochs=epochs, validation_data=(X_val, y_val),
shuffle=True,
callbacks=callbacks,
verbose=1)
Мои данные имеют следующую форму:
X: (232, 100, 150, 3)
y: (232,)
Где X - изображения, а y - либо 1, либо 0, из-за использования функции разреженных потерь
Потери очень высоки как для точности, так и для проверки, даже если точность обучения равна 1! Я получаю значения больше 20 за убыток, что, как я понимаю, неразумно.
Если я настрою модель на несколько эпох и выведу прогнозы для меток и истинных значений, и я получу от них категориальную перекрестную энтропию, то полученное мной значение будет <1, как и ожидалось, даже когда я делаю расчет с функцией keras (я меняю на категоричный, потому что разреженный дает ошибку)
21/21 [==============================] - 7s 313ms/step - loss: 44.1764 - acc: 1.0000 - val_loss: 44.7084 - val_acc: 0.7857
cce = tf.keras.losses.CategoricalCrossentropy()
pred = model.predict(x=X_val, batch_size=len(X_val))
loss = cce(true_categorical, pred)
Categorical loss 0.6077293753623962
Есть ли способ точно узнать, как это рассчитывается и почему такие высокие значения? Размер партии 8.