我有一个GRU网络,它接收一系列数据,并将其标记为类别0或类别1。我希望模型对类别0有很高的特异性(至少≥0.8),同时确保它仍然具有良好的敏感性(希望接近0.5)。
我如何在Tensorflow中实现这一点?是否有办法让损失函数由单一类别的特异性和敏感性的组合来决定?我对类别1的预测准确性并不关心,但在这种情况下,当预测为类别0时,预测的正确性非常重要,同时还需要有相当数量的类别0预测(至少在标签为类别0时有一半的时间预测为类别0)。
任何帮助都将不胜感激。
以下是我目前相关的代码:
states_concat = tf.concat(axis=1, values=states)logits = tf.layers.dense(states_concat, n_outputs)softmax = tf.nn.softmax(logits=logits)xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)loss = tf.reduce_mean(xentropy)#通过梯度裁剪设置优化器,以减少值爆炸的可能性optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate, momentum=0.9, use_nesterov=True)
回答:
我自己回答了这个问题。
对于遇到此问题的其他人,有用的术语还有精确度和召回率,其中精确度测量的是:真阳性/(真阳性 + 假阳性),而召回率测量的是敏感性。
帮助我的链接如下:https://www.quora.com/How-do-I-penalize-false-positive-in-deep-learning-tensorflowhttps://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits