accuracy: precision: recall: 0.9020 总是一样的
accuracy: precision: recall: 0.9020 are always the same
我的测试数据集中有 5960
个图像:
我得到了结果指标:
TP: 5116.0
FP: 794.0
TN: 5116.0
FN: 794.0
len(testX) = 5960
一个epoch的日志:
185/185 [==============================] - 1s 6ms/step - loss: 0.4095 -
tp: 5127.0000 - fp: 783.0000 -
tn: 5127.0000 - fn: 783.0000 -
accuracy: 0.8675 - precision: 0.8675 -
recall: 0.8675 - auc: 0.9200
加载图像:
label = 1 if label == "positive" else 0
...
(trainX, testX, trainY, testY) = train_test_split(data, labels,
test_size=0.2, random_state=42)
# convert the labels from integers to vectors
testY = to_categorical(testY, num_classes=2)
我使用了 keras.metrics 并且我只有两个标签:(0 和 1)。
我做错了什么?
loss, tp, fp, tn, fn, accuracy, precision, recall, auc = model.evaluate(testX, testY, verbose=1)
我想当 image1 有标签 '1' 时,
- 它为 TP 添加 +1(标签“1”)
- +1 到 TN(标签“0”)。
我的模特:
model.add(Conv2D(20, (5, 5), padding="same",
input_shape=inputShape))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# second set of CONV => RELU => POOL layers
model.add(Conv2D(50, (5, 5), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# first (and only) set of FC => RELU layers
model.add(Flatten())
model.add(Dense(500))
model.add(Activation("relu"))
model.add(Dropout(0.05))
# softmax classifier
model.add(Dense(classes))
model.add(Activation("softmax"))
当您对二进制 classification 应用单热编码时,这些指标会变得混乱。这是一个例子:
经过一次热编码后,您的标签看起来像这样:[ ... [1,0], [0,1], [1,0] ... ]
如果你注意,你的 TP
等于 TN
。当正确预测为class 0时,class 0为TP
,class 1为TN
。这就是它们相等的原因。
不要应用一种热编码并更改:
model.add(Dense(1))
model.add(Activation("sigmoid"))
损失也应该是binary_crossentropy
.
我的测试数据集中有 5960
个图像:
我得到了结果指标:
TP: 5116.0
FP: 794.0
TN: 5116.0
FN: 794.0
len(testX) = 5960
一个epoch的日志:
185/185 [==============================] - 1s 6ms/step - loss: 0.4095 -
tp: 5127.0000 - fp: 783.0000 -
tn: 5127.0000 - fn: 783.0000 -
accuracy: 0.8675 - precision: 0.8675 -
recall: 0.8675 - auc: 0.9200
加载图像:
label = 1 if label == "positive" else 0
...
(trainX, testX, trainY, testY) = train_test_split(data, labels,
test_size=0.2, random_state=42)
# convert the labels from integers to vectors
testY = to_categorical(testY, num_classes=2)
我使用了 keras.metrics 并且我只有两个标签:(0 和 1)。 我做错了什么?
loss, tp, fp, tn, fn, accuracy, precision, recall, auc = model.evaluate(testX, testY, verbose=1)
我想当 image1 有标签 '1' 时,
- 它为 TP 添加 +1(标签“1”)
- +1 到 TN(标签“0”)。
我的模特:
model.add(Conv2D(20, (5, 5), padding="same",
input_shape=inputShape))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# second set of CONV => RELU => POOL layers
model.add(Conv2D(50, (5, 5), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# first (and only) set of FC => RELU layers
model.add(Flatten())
model.add(Dense(500))
model.add(Activation("relu"))
model.add(Dropout(0.05))
# softmax classifier
model.add(Dense(classes))
model.add(Activation("softmax"))
当您对二进制 classification 应用单热编码时,这些指标会变得混乱。这是一个例子:
经过一次热编码后,您的标签看起来像这样:[ ... [1,0], [0,1], [1,0] ... ]
如果你注意,你的 TP
等于 TN
。当正确预测为class 0时,class 0为TP
,class 1为TN
。这就是它们相等的原因。
不要应用一种热编码并更改:
model.add(Dense(1))
model.add(Activation("sigmoid"))
损失也应该是binary_crossentropy
.