【问题标题】:Understanding metrics computation in Keras了解 Keras 中的指标计算
【发布时间】:2019-03-21 18:06:58
【问题描述】:

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

def TP(y_true, y_pred):
    estimated = K.argmax(y_pred, axis=1)
    truth = K.argmax(y_true, axis=1)
    TP = K.sum(truth * estimated)
    return TP

基于我的最后一层输出形状:(batch, 2)。 该函数已使用 numpy argmax 等效项进行了测试,并且运行良好。

我使用 cross_entropy 损失函数,每个时期它都会给我度量值。但是这个值怎么可能是一个十进制数?我做错了什么?谢谢!

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

def TP(y_true, y_pred):
    estimated = K.argmax(y_pred, axis=1)
    truth = K.argmax(y_true, axis=1)
    TP = K.sum(truth * estimated)
    return TP

epochs = 10
batch_size = 2

model = Sequential([
        Dense(32, input_shape=(4,)),
        Activation('relu'),
        Dense(2),
        Activation('softmax'),
])
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy', TP])

model.summary()

train = np.array([[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],[0,1,0,1]])
labels = np.array([ [1,0],[1,0],[1,0],[1,0],[1,0], [0,1],[0,1],[0,1],[0,1],[0,1] ])

model.fit(train, labels, epochs=epochs, batch_size=batch_size, verbose=2)

这里显示 TP 功能的测试似乎有效

def npTP(y_true, y_pred):
    estimated = np.argmax(y_pred, axis=1)
    truth = np.argmax(y_true, axis=1)
    TP = np.sum(truth * estimated)
    return TP

y_true = np.array([ [1,0],[1,0],[1,0],[1,0],[1,0], [0,1],[0,1],[0,1],[0,1],[0,1] ])
y_pred = np.array([ [0,1],[0,1],[0,1],[0,1],[0,1], [0,1],[0,1],[0,1],[0,1],[0,1]])
print("np check : ")
print(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

谢谢!

【问题讨论】:

  • 请注意,发布问题不是一劳永逸的事情,最好的发布时间是不是,然后再去吃午餐/咖啡/其他任何东西。如果您想回答您的问题,前 20-30 分钟非常重要,并且您应该可以回答 cmets 和澄清请求;来自How to ask:“发布后,请在浏览器中打开问题一会儿,看看是否有人参与。如果您错过了明显的信息,请准备好通过编辑您的问题以包含它来做出回应”。
  • 所以,你确实有 5 个 TP(y_predy_true 的最后 5 个元素);这里到底是什么问题,你指的这个“十进制”是什么?
  • 这 5 个 TP 是当我使用 numpy 函数时。使用fit 训练中包含的 Keras 指标,前 4 个 epoch 给出了 0.2 和 0.4 作为真阳性的数量。我不明白为什么。
  • 这是批次和时期之间的运行平均值,因此它确实可以采用十进制值:stackoverflow.com/questions/48831242/…
  • 感谢您指出这一点,这正是我想要的。

标签: keras


【解决方案1】:

正如desertnaut 指出的那样,答案已解释为in this thread

Keras 在批次和时期之间进行运行平均值

这里有 batch_size=2 和 10 个样本,每个 epoch 运行 5 次训练 (10/2=5)。

要了解 epoch 1 的输出指标,5 次训练后的 TP 总数必须为 1,因此指标为 1/5 = 0.2。 Epoch 4 在 5 次训练中有 2 个 TP,在指标中给出了2/5 = 0.4

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2022-07-19
    相关资源
    最近更新 更多