Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何抑制张量中的小元素_Python_Tensorflow_Lstm - Fatal编程技术网

Python 如何抑制张量中的小元素

Python 如何抑制张量中的小元素,python,tensorflow,lstm,Python,Tensorflow,Lstm,我有一个LSTM网络,它通过tf.tanh输出决策。然后我使用tf.sign获得1、-1或0的二进制操作。但是,我不希望模型在tf.tanh的输出很小时执行非零操作,因此我希望在tf.sign之前实现一个阈值T,以便只有大于T或小于-T的输出将被转换为+1和-1 来自tf.tanh的张量输出示例: logits = [0.6,0.4,-0.6,-0.4] threshold = 0.5 保留梯度时所需的张量输出: action = [1,0,-1,0] 这有点像一个带阈值的双面ReLU,但我

我有一个LSTM网络,它通过
tf.tanh
输出决策。然后我使用
tf.sign
获得1、-1或0的二进制操作。但是,我不希望模型在
tf.tanh
的输出很小时执行非零操作,因此我希望在
tf.sign
之前实现一个阈值
T
,以便只有大于T或小于-T的输出将被转换为+1和-1

来自
tf.tanh
的张量输出示例:

logits = [0.6,0.4,-0.6,-0.4]
threshold = 0.5
保留梯度时所需的张量输出:

action = [1,0,-1,0]

这有点像一个带阈值的双面ReLU,但我不知道如何在tensorflow图中实现它。非常感谢您的帮助。

这里有一些对我有用的东西。如果您查看变量名,代码是非常自解释的。如果有不清楚的地方,请告诉我

import tensorflow as tf

def suppress_range(x, a, b):
    """Sets all the elements in the range [a, b) to 0"""
    assert (a < b), "a must be less than b"
    significant = tf.logical_or(x <= a, x > b)
    zero = tf.zeros_like(x)
    return tf.where(significant, x, zero)

def main():
    logits = tf.placeholder(tf.float32)
    output = tf.sign(suppress_range(logits, -0.5, 0.5))

    with tf.Session() as sess:
        x = [[0.6, 0.4, -0.6, -0.4], [0.5, 0.1, -0.7, -0.2]]
        print(sess.run(output, feed_dict={logits: x}))

if __name__ == '__main__':
    main()
将tensorflow导入为tf
def抑制范围(x、a、b):
“”“将[a,b]到0范围内的所有元素设置为”
断言(a