理解Keras中的度量计算

理解Keras中的度量计算,keras,Keras,我已尝试在Keras中实施真正的积极指标: def TP(y_真,y_pred): 估计值=K.argmax(y_pred,轴=1) 真值=K.argmax(y_真值,轴=1) TP=K.总和(真值*估计值) 返回TP 基于我的最后一层输出形状:(批次,2)。 该功能已通过numpy argmax等效软件测试,效果良好 我使用了一个交叉熵损失函数,它给了我度量值。但是这个值怎么可能是十进制数呢?我做错了什么?谢谢 已编辑:以下是Keras模型的示例代码: def TP(y_真,y_pred):

我已尝试在Keras中实施真正的积极指标:

def TP(y_真,y_pred):
估计值=K.argmax(y_pred,轴=1)
真值=K.argmax(y_真值,轴=1)
TP=K.总和(真值*估计值)
返回TP
基于我的最后一层输出形状:(批次,2)。 该功能已通过numpy argmax等效软件测试,效果良好

我使用了一个交叉熵损失函数,它给了我度量值。但是这个值怎么可能是十进制数呢?我做错了什么?谢谢

已编辑:以下是Keras模型的示例代码:

def TP(y_真,y_pred):
估计值=K.argmax(y_pred,轴=1)
真值=K.argmax(y_真值,轴=1)
TP=K.总和(真值*估计值)
返回TP
纪元=10
批量大小=2
模型=顺序([
密集型(32,输入_形=(4,),
激活(“relu”),
密度(2),
激活(“softmax”),
])
model.compile(优化器='adam',
损失class='classifical_crossentropy',
指标=[‘准确度’,TP])
model.summary()
列=np.数组([[17,0,1,0],[17,0,1,0],[17,0,1,0],[17,0,1,0],[17,0,1,0],[2,1,0,1],[0,1,0,1],[0,1,0,1],[0,1,0,1])
labels=np.数组([[1,0],[1,0],[1,0],[1,0],[0,1],[0,1],[0,1],[0,1],[0,1])
model.fit(序列、标签、年代=年代、批次大小=批次大小、详细程度=2)
这里的一个测试显示了TP功能似乎是有效的

def npTP(y_真,y_pred):
估计值=np.argmax(y_pred,轴=1)
真值=np.argmax(y_真值,轴=1)
TP=np.和(真值*估计值)
返回TP
y_true=np.数组([[1,0]、[1,0]、[1,0]、[1,0]、[1,0]、[0,1]、[0,1]、[0,1]、[0,1])
y_pred=np.数组([[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1])
打印(“np检查:”)
打印(npTP(y_true,y_pred))
运行此代码将提供以下输出:

Using TensorFlow backend.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 32)                160       
_________________________________________________________________
activation_1 (Activation)    (None, 32)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 2)                 66        
_________________________________________________________________
activation_2 (Activation)    (None, 2)                 0         
=================================================================
Total params: 226
Trainable params: 226
Non-trainable params: 0
_________________________________________________________________
Epoch 1/10
 - 0s - loss: 0.3934 - acc: 0.6000 - TP: 0.2000
Epoch 2/10                           ^^^^^^^^^^ here are the decimal values
 - 0s - loss: 0.3736 - acc: 0.6000 - TP: 0.2000
Epoch 3/10                           ^^^^^^^^^^
 - 0s - loss: 0.3562 - acc: 0.6000 - TP: 0.2000
Epoch 4/10                           ^^^^^^^^^^
 - 0s - loss: 0.3416 - acc: 0.7000 - TP: 0.4000
Epoch 5/10                           ^^^^^^^^^^
 - 0s - loss: 0.3240 - acc: 1.0000 - TP: 1.0000
Epoch 6/10
 - 0s - loss: 0.3118 - acc: 1.0000 - TP: 1.0000
Epoch 7/10
 - 0s - loss: 0.2960 - acc: 1.0000 - TP: 1.0000
Epoch 8/10
 - 0s - loss: 0.2806 - acc: 1.0000 - TP: 1.0000
Epoch 9/10
 - 0s - loss: 0.2656 - acc: 1.0000 - TP: 1.0000
Epoch 10/10
 - 0s - loss: 0.2535 - acc: 1.0000 - TP: 1.0000

np check : 
5

谢谢

正如沙漠怪人所指出的,答案已经解释清楚了

Keras正在进行批次和时代之间的运行平均。 这里有
batch\u size=2
和10个样本,每个历元运行5次训练(
10/2=5


为了理解历元1的输出度量,5次训练后的
TP
总数必须为1,因此度量给出
1/5=0.2
。第4纪元在5次培训中有2次TP,在度量中给出
2/5=0.4

正如沙漠怪人所指出的,答案已经解释清楚了

Keras正在进行批次和时代之间的运行平均。 这里有
batch\u size=2
和10个样本,每个历元运行5次训练(
10/2=5


为了理解历元1的输出度量,5次训练后的
TP
总数必须为1,因此度量给出
1/5=0.2
。第4纪元在5次培训中有2次TP,在度量中给出
2/5=0.4

请注意,发帖问题并非易如反掌,最好的发帖时机不是在出去吃午饭/喝咖啡或其他什么之前。如果你想回答问题,前20-30分钟非常重要,你可以回答评论和澄清请求;from:“发布后,将问题在浏览器中保留一段时间,看看是否有人发表评论。如果您遗漏了一条明显的信息,请准备好通过编辑您的问题以将其包括在内来回答”。因此,您确实有5个TP(您的
y_pred
y_true
的最后5个元素);这里的问题到底是什么?您指的是什么“十进制”?当我使用numpy函数时,5个TP。在
fit
培训中包括了Keras指标,前4个阶段给出了0.2和0.4作为真实阳性数。我不明白为什么。这是批次和年代之间的平均值,所以它确实可以取十进制值:谢谢你指出这一点,这正是我想要的。请注意,发布问题不是一件容易忘记的事情,最好的发布时间不是在出去吃午饭/喝咖啡/什么之前。如果你想回答问题,前20-30分钟非常重要,你可以回答评论和澄清请求;from:“发布后,将问题在浏览器中保留一段时间,看看是否有人发表评论。如果您遗漏了一条明显的信息,请准备好通过编辑您的问题以将其包括在内来回答”。因此,您确实有5个TP(您的
y_pred
y_true
的最后5个元素);这里的问题到底是什么?您指的是什么“十进制”?当我使用numpy函数时,5个TP。在
fit
培训中包括了Keras指标,前4个阶段给出了0.2和0.4作为真实阳性数。我不明白为什么。这是批次和年代之间的运行平均值,所以它确实可以取十进制值:谢谢你指出这一点,这正是我想要的。