如何限制张量流中变量的范围

时间:2017-10-29 21:11:34

标签: variables tensorflow

我想使用tensorflow训练模型。

我有以下变量,我希望模型能够学习它

Mj=tf.get_variable('Mj_',dtype=tf.float32, shape=[500,4],initializer=tf.random_uniform_initializer(maxval=1, minval=0))

我希望Mj的结果值介于0和1之间。如何添加此约束?

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找的功能是print "abc" in ("abc d","ab")

链接到Docs

答案 1 :(得分:0)

执行此操作的正确方法是将剪切函数tf.clip_by_value作为constraint参数传递给tf.Variable构造函数:

Mj=tf.get_variable('Mj_',
                   dtype=tf.float32,
                   shape=[500,4],
                   initializer=tf.random_uniform_initializer(maxval=1, minval=0),
                   constraint=lambda t: tf.clip_by_value(t, 0, 1))

来自tf.Variable的文档:

  

约束:一个可选的投影函数应用于   由优化器更新后的变量(例如用于实现   层权重的范数约束或值约束)。功能   必须将表示值的未投影张量作为输入   变量并返回Tensor的预计值(必须   具有相同的形状)。在做的时候使用约束是不安全的   异步分布式培训。

或者您可以考虑在变量之上添加非线性tf.sigmoid

Mj=tf.get_variable('Mj_',dtype=tf.float32, shape=[500,4])
Mj_out=tf.sigmoid(Mj)

这会将您的变量转换为0到1之间的范围。详细了解激活函数here