我有像
这样的训练模型Y = w * X + b
其中Y和X是输出和输入占位符,w和b是矢量
我已经知道w的值只能是0或1,而b仍然是tf.float32。
在定义变量w时,如何量化变量w的范围?
或
我可以有两种不同的学习率吗? w的比率为1或-1,b的比率通常为0.0001。
答案 0 :(得分:5)
在激活期间无法限制变量。但是你可以做的是在每次迭代后限制它。以下是使用tf.where()
执行此操作的一种方法:
import tensorflow as tf
a = tf.random_uniform(shape=(3, 3))
b = tf.where(
tf.less(a, tf.zeros_like(a) + 0.5),
tf.zeros_like(a),
tf.ones_like(a)
)
with tf.Session() as sess:
A, B = sess.run([a, b])
print A, '\n'
print B
将把0.5以上的所有内容转换为1,将其他所有内容转换为0:
[[ 0.2068541 0.12682056 0.73839438]
[ 0.00512838 0.43465161 0.98486936]
[ 0.32126224 0.29998791 0.31065524]]
[[ 0. 0. 1.]
[ 0. 0. 1.]
[ 0. 0. 0.]]
答案 1 :(得分:1)
我用来将变量限制到特定范围的一种方法是在我的损耗方程中添加约束。如果变量超出所需范围,那么损失将变大,优化器会将其推回到所需范围内。
例如:
Drawable yellowSmileyFace = getResources().getDrawable(R.drawable.happy_yellow_small);
if (getClickCountInt == 4){
ShowRewardDialog("Test" + "\n\n" + yellowSmileyFace);