我正在研究一个使用的自定义损失函数numpy.digitize()
内部。对于一组参数,损失最小化bins
数字化方法中使用的值。为了使用tensorflow
优化器,我想知道是否有等效的实现digitize
in 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)
相当于np.digitize
方法被称为bucketize
在 TensorFlow 中,引用自这个API文档 https://www.tensorflow.org/api_docs/cc/class/tensorflow/ops/bucketize:
根据“边界”对“输入”进行分桶。
概括
例如,如果输入为边界 = [0, 10, 100] 输入 = [[-5, 10000] [150, 10] [5, 100]]
那么输出将是output = [[0, 3] [3, 2] [1, 3]]
论据:
范围:范围对象
输入:包含 int 或 float 类型的任何形状的 Tensor。
边界:浮点数的排序列表给出了桶的边界。
返回:
输出:与“输入”形状相同,输入的每个值都替换为桶索引。
(numpy) 相当于 np.digitize。
我不知道为什么,但是,这个方法隐藏在 TensorFlow 中(请参阅hidden_ops.txt 文件 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/hidden_ops.txt)。因此,即使您可以通过执行以下操作导入它,我也不会指望它:
from tensorflow.python.ops import math_ops
math_ops._bucketize
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)