【问题标题】:What is the reason that the Loss function returns a negative value?Loss函数返回负值的原因是什么?
【发布时间】:2021-08-13 16:40:01
【问题描述】:

我使用 Keras 为入侵检测系统制作了一个 CNN 模型。我的损失结果有问题。请问如何修复我的代码。 这些是数据集的形状:

x_train shape: (1131151, 79)
y_train shape: (1131151, 2)
x_test shape: (53386, 79)
y_test shape: (53386, 2)
train shape after reshape: (1131151, 79, 1)
test shape after reshape: (53386, 79, 1)

我的模特是:

model = Sequential()

#convolution 1st layer

model.add(Conv1D(32, kernel_size=(filter_size), padding="same",
                 activation='relu',
                 input_shape=(X_train.shape[1], 1)))
model.add(BatchNormalization())
model.add(Dropout(droprate))
          
#convolution 2nd layer
model.add(Conv1D(64, kernel_size=(filter_size), activation='relu', padding="same"))
model.add(BatchNormalization())
model.add(MaxPooling1D(strides=1))
model.add(Dropout(droprate))

#convolution 3rd layer
model.add(Conv1D(128, kernel_size=(filter_size), activation='relu', padding="same"))
model.add(BatchNormalization())
model.add(MaxPooling1D(strides=1))
model.add(Dropout(droprate))

#FCN 1st layer
model.add(Flatten())
model.add(Dense(128,use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(droprate))

#FCN 2nd layer
model.add(Dense(32,use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(droprate))

#FCN 3rd layer
model.add(Dense(16,use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(droprate))

#FCN final layer
model.add(Dense(2))
model.add(Activation('sigmoid'))

model.compile(loss="binary_crossentropy", optimizer="Adam", metrics=['accuracy'])

model.summary()

我的结果是:

score = model.evaluate(X_test, preprocess.y_test, verbose=0)
Test loss: 9.198558109346777e-05
Test accuracy: 0.9999812841415405

如您所见,损失函数为负数,准确率接近 100% 我的代码有什么问题?

【问题讨论】:

  • 9.198558109346777e-05 不是负数......
  • 对不起,我没有注意到这个数字,我认为它是负数。问题还是存在的吧?
  • 训练/测试 y-label 的分布是什么?如果存在较大的类不平衡(比如 99% 的训练示例是 false='no intrusion',那么分类器可以学会始终预测没有入侵并达到 99% 的准确率。
  • 只有当您向我们证明问题存在时才会存在问题,包括您看到的确切数字。
  • @TC 80% 用于训练,20% 用于测试

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

测试损失:9.198558109346777e-05 该值不是负数。这是 10 的 -5 次方或 0.00009198558 的科学形式。

【讨论】:

  • 实际上是 10 的 -5 次方。
  • 好的,谢谢
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 2021-05-21
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多