如何获取张量的张量的元素对数,然后将每个张量乘以tf中的不同标量?

时间:2019-03-19 01:52:09

标签: python tensorflow keras

我正在尝试为Keras创建一个自定义损失函数以供使用,但遇到了一些麻烦。在此发布之后:Custom loss function in Keras我知道创建函数的语法,但是我不熟悉如何使用张量。 我用标量填充了yTrue,而yPred是实际的预测值。我想对预测值的对数进行加权总和,并按yTrue中的标量加权。当我做这样的事情时:

def customLoss(yTrue,yPred):
        L = 0
        for i in range(len(yTrue)):
            L += tf.math.scalar_mul(yTrue[i], K.log(yPred[i]))
        return L

当我尝试使用自定义损失函数编译模型时,程序崩溃,因为在执行model.compile时似乎传递了一些张量并运行了损失函数。打印出yTrue和yPred,我得到Tensor("dense_4_target:0", shape=(?, ?), dtype=float32) Tensor("dense_4/Softmax:0", shape=(?, 4), dtype=float32) 这告诉我必须使自定义损失函数与张量一起使用。

我尝试过return K.sum(K.prod(yTrue,K.log(yPred))),但得到

    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py", line 1722, in reduce_prod
    name=name))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/gen_math_ops.py", line 6239, in prod
    name=name)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 610, in _apply_op_helper
    param_name=input_name)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 60, in _SatisfiesTypeConstraint
    ", ".join(dtypes.as_dtype(x).name for x in allowed_list)))

我觉得不是很有帮助

1 个答案:

答案 0 :(得分:0)

我想出了办法。我传递给model.fit(x = states,y = G),其中G是一个与yPred大小匹配的数组。这些是我放置标量值的地方。然后我的损失函数可能只是return K.sum(K.sum(yTrue*K.log(yPred)))