作为度量函数的平衡误差率

2024-04-27 00:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Keras的序列模型来解决二进制分类问题
必须满足给定的Balanced Error Rate (BER)

所以我认为用误码率代替准确度是个好主意。在

我的BER自定义度量实现如下所示:

def balanced_error_rate(y_true, y_pred):
    labels = theano.shared(np.asmatrix([[0, 1]], dtype='int8'))
    label_matrix = K.repeat_elements(labels, K.shape(y_true)[0], axis=1)
    true_matrix = K.repeat_elements(y_true, K.shape(labels)[0], axis=1)
    pred_matrix = K.repeat_elements(K.round(y_pred), K.shape(labels)[0], axis=1)

    class_lens = K.sum(K.equal(label_matrix, true_matrix), axis=1)
    return K.sum(K.sum(class_lens - K.sum(K.equal(label_matrix, K.not_equal(true_matrix,pred_matrix)), axis=1), axis=0)/class_lens, axis=0)/2

我们的想法是从可用的标签中创建一个矩阵,并将其与输入数据进行比较(然后求和),以获得该标签的元素数。。。。在

我的问题是:

^{pr2}$

……我也不知道为什么。在


我现在正在寻找:

一种获取数组维数的方法/解释shape的行为方式/为什么y_true似乎有0

通过重复给定的行/列向量来创建具有给定with/height的张量矩阵的一种方法。在

使用张量函数计算误码率的一个更聪明的解决方案。在


Tags: truelabelsequalelementsmatrixlabelclasslens
1条回答
网友
1楼 · 发布于 2024-04-27 00:20:26

A way to get the array dimensions / an explanation why shape acts like it does / the reason why y_true seems to have 0 dimensions

处理print和抽象库(如Theano)的方法是,通常不获取值,而是获取值的表示。所以如果你这么做

print(foo.shape)

您不会得到实际的形状,而是运行时完成的操作的表示。由于这些都是在外部设备上计算的,所以计算不会立即运行,而是在创建具有适当输入的函数(或调用foo.shape.eval())之后才运行。在

打印值的另一种方法是在使用值时使用theano.printing.Print,例如:

^{pr2}$

A method to create a tensor matrix with a given with/height by repeating a given row/column vector.

请参见^{}。numpy中的示例(用法非常类似):

>>> x
array([[1, 2, 3]])
>>> x.repeat(3, axis=0)
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

相关问题 更多 >