张量流中的numpy.digitize等价

时间:2018-02-20 14:30:18

标签: python numpy tensorflow

我正在开发一个内部使用numpy.digitize()的自定义丢失函数。对于作为数字化方法中使用的bins值的一组参数,损失最小化。为了使用tensorflow优化工具,我想知道digitize中是否有tensorflow的等效实现?如果没有,有一个很好的方法来实施解决方法?

这是一个numpy版本:

def fom_func(b, n):
    np.where((b > 0) & (n > 0), np.sqrt(2*(n*np.log(np.divide(n,b)) + b - n)),0) 
def loss(param, X, y):
    param = np.sort(np.asarray(param))
    nbins = param.shape[0]
    score = 0
    y_pred = np.digitize(X, param)
    for c in np.arange(nbins):
        b = np.where((y==0) & (y_pred==c), 1, 0).sum()
        n = np.where((y_pred==c), 1, 0).sum()
        score += fom_func(b,n)**2
    return -np.sqrt(score)

1 个答案:

答案 0 :(得分:2)

相当于np.digitize方法在TensorFlow中称为bucketize,引自this api doc

  

Bucketizes'输入'基于'边界'。

     

摘要

     

例如,如果输入是边界= [0,10,100] input = [[-5,10000] [150,10] [5,100]]

     

然后输出将输出= [[0,3] [3,2] [1,3]]

     

参数:

     

范围:Scope对象   输入:任何形状的Tensor都包含int或float类型。   边界:浮动的排序列表给出了桶的边界。   返回:

     

输出:与'输入相同的形状,输入的每个值都用铲斗索引替换   (numpy)相当于np.digitize。

我不知道为什么,但是这个方法隐藏在TensorFlow中(参见hidden_ops.txt file)。因此,即使你可以通过以下方式导入它,我也不会指望它:

from tensorflow.python.ops import math_ops
math_ops._bucketize