Keras--metrics相关问题

最近做实验发现了一个奇怪的现象,让我有些迷

我的样本属于文本多标签分类问题,在metrics的选择上出现了问题,放几个实验结果。

模型是这样的

def birnn2(max_len = 29, vocab_size=394, embed_size=23):
    inputs = Input(shape=(max_len))
    embedding_layer = Embedding(input_dim=394,
                                output_dim=23,
                                input_length=29,
                                trainable=True)(inputs)
    bi_lsty_layer = Bidirectional(LSTM(units=100))(embedding_layer)
    out = Dense(units=504, activation='sigmoid')(bi_lsty_layer)
    model = Model(inputs, out)
    return model

有两个自定义函数

def myloss(y_true, y_pred):
    loss = tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true=y_true, y_pred=y_pred))
    return loss

def My_acc(y_true,y_pred):
    return tf.reduce_sum(tf.cast(y_pred * y_true > 0.5, tf.float32)) / tf.reduce_sum(y_true)

第一个模型

model.compile(optimizer='adam',
              loss = myloss,
              metrics = ['acc'])
model.fit(X_Train,Y_Train,
          epochs=10,
          batch_size=2)

第二个模型,因为我的实验要改动loss,所以上一个自定义的loss计算其实就是binary_crossentropy,我只是想看一下自定义函数正不正确,结果。。

model1 = birnn2()
model1.summary()
model1.compile(optimizer='adam',
              loss = 'binary_crossentropy',
              metrics = ['acc'])
model1.fit(X_Train,Y_Train,
          epochs=10,
          batch_size=2)

以上两个模型除了在loss有所变动,并没有改变metrics的‘acc’,数据都是一样的。但是,这结果也差太多了吧

我想,会不会是编译自动根据loss选择metrics的acc

model3 = birnn2()
model3.summary()
model3.compile(optimizer='adam',
              loss = 'binary_crossentropy',
              metrics = ['acc','accuracy',tf.keras.metrics.CategoricalAccuracy(),tf.keras.metrics.BinaryAccuracy(),tf.keras.metrics.TopKCategoricalAccuracy(),My_acc])
model3.fit(X_Train,Y_Train,
          epochs=10,
          batch_size=2)

虽然是多标签,多分类的我也试了一下,还有一个自己的。

看这个结果的话,第一个模型的metrics结果和categorical_ accuracy是相近的。但是我在第一个模型metrics并没有选择它,从第三个实验也可以看出,‘acc’=‘accuracy’和‘categorical_accuracy'没什么关系。

这是怎么回事儿呢?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值