TensorFlow 2.4:损失:0.0000e+00 但准确度:仅 0.2682,这有意义吗?

时间:2021-05-16 16:18:37

标签: tensorflow loss-function

我正在努力理解损失(sparse_categorical_crossentropy)如何可以为零,但准确度<<1? “训练过的”模型也没有提供好的结果。尽管模型没有得到很好的训练,但损失怎么可能为零:

Epoch 1/3
182/182 [==============================] - 496s 3s/step - loss: 0.0000e+00 - accuracy: 0.2682 - val_loss: 0.0000e+00 - val_accuracy: 0.2729
Epoch 2/3
147/182 [=======================>......] - ETA: 1:29 - loss: 0.0000e+00 - accuracy: 0.2645

模型:

    number_of_categories = len(class_names)
    loss = 'sparse_categorical_crossentropy'    
    metrics = ['accuracy']
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(30, (5, 5), activation=activation, input_shape=(pheight, pwidth, 3)))
    model.add(tf.keras.layers.MaxPooling2D((5, 5)))
    model.add(tf.keras.layers.Conv2D(40, (5, 5), activation=activation))
    model.add(tf.keras.layers.MaxPooling2D((5, 5)))
    model.add(tf.keras.layers.Conv2D(50, (5, 5), activation=activation))
    model.add(tf.keras.layers.MaxPooling2D((5, 5)))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(64, activation=activation))
    model.add(tf.keras.layers.Dense(number_of_categories, activation='softmax'))
    model.compile(optimizer=optimizer, loss=loss, metrics=metrics)

非常欢迎对这里出了什么问题的任何想法......

这是模型拟合:

    history = model.fit(x=training_generator,
                        validation_data=test_generator,
                        batch_size=batch_size,
                        use_multiprocessing=False,
                        workers=1,
                        epochs=epochs,
                        steps_per_epoch=len(training_generator),
                        max_queue_size=1)

1 个答案:

答案 0 :(得分:0)

问题已解决:我不小心使用了像 0.01 这样的小浮点数而不是 1 作为基本真值 (y_true)。这确实导致了错误的行为。通过将其放大并四舍五入为 1,它现在可以工作了。