【问题标题】:Efficient alternative to np.piecewise in TensorflowTensorflow 中 np.piecewise 的有效替代方案
【发布时间】:2018-01-23 09:28:33
【问题描述】:

我目前正在将我的 NumPy 代码移植到 Tensorflow,以便将其有效地应用于神经网络。虽然 Tensorflow 涵盖了一些基本的 NumPy 功能,但它显然没有提供完整的覆盖。现在,我在尝试将漂亮的 numpy.piecewise 函数转换为 Tensorflow 时有点卡住了。目标是检查输入矩阵(张量?)中的每个元素是否会在添加某个步骤时超出给定边界,如果是,则修改相同大小的掩码矩阵中的伴随元素。这是函数在 NumPy 中的样子:

 def bounds_check(inputs, mask, step, bounds):
    conds = [np.absolute(inputs + step) > bounds, np.absolute(inputs + step) <= bounds]
    funcs = [lambda mask: -mask, lambda mask: mask]
    return np.piecewise(mask, conds, funcs)  # return mask

什么是符合逻辑的 Tensorflow 替代方案?这必须是图中的一个操作,因为每个时期都将涉及通过搜索空间进行下一步并检查边界。

【问题讨论】:

    标签: python arrays numpy tensorflow


    【解决方案1】:

    如果我正确理解您的代码,它应该与以下内容相同:

    new_inputs = inputs + step
    over_bounds = tf.abs(new_inputs) > bounds
    new_mask = mask * (1 + (-2) * tf.cast(over_bounds, tf.float32))
    return new_mask
    

    【讨论】:

    • over_bounds 是否包含布尔值?谢谢,这看起来又好又简单——我试试看!
    • @anna-earwen 是的,它将包含布尔值。它们被转换为 1.0 和 0.0 。
    • 默认情况下它们没有被转换,但没有什么 tf.cast 不能做的;)再次感谢,我会接受答案 - 它有效。
    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 2016-10-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2021-08-13
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多