在Tensorflow中实现Logistic回归(LR),但在使用偏差时结果看起来很奇怪,但在没有偏见的情况下很好

时间:2016-02-19 08:01:28

标签: tensorflow logistic-regression

我使用tensorflow软件包(0.7.0)为稀疏数据集尝试了LR 以下是我的程序的一部分:

weight_values=generateWeight([trainset.feature_num,1],name='weight')  
bias=init_bias([1,1],name='bias')  
sp_shape=tf.placeholder(tf.int64)  
sp_indices=tf.placeholder(tf.int64)  
sp_ids_value=tf.placeholder(tf.int64)  
sp_features_value=tf.placeholder(tf.float32)  
Y=tf.placeholder('float',name='Y')  

sp_ids=tf.SparseTensor(sp_indices,sp_ids_value,sp_shape)
sp_values=tf.SparseTensor(sp_indices,sp_features_value,sp_shape)
\#Z=tf.nn.embedding_lookup_sparse(weight_values,sp_ids,sp_values);
Z_b=tf.nn.embedding_lookup_sparse(weight_values,sp_ids,sp_values)+bias  
predict_op=tf.sigmoid(Z_b,name='result')   
\#cost=tf.nn.sigmoid_cross_entropy_with_logits(Z,Y)
cost=tf.nn.sigmoid_cross_entropy_with_logits(Z_b,Y)
train_op=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

...

但我发现在使用偏置时结果是有线的,使用偏置我发现abs(成本)变得越来越大,甚至abs(偏置)也变得越来越大。

在早期的迭代中,结果如下:

1 labels[-1], j-sample 1662,  i-bias 0.100000 cost 0.761811, z_b 0.045602    
2 labels[1],  j-sample 823,   i-bias 0.084886 cost 0.653277, z_b 0.081396  
3 labels[-1], j-sample 20802, i-bias 0.089683 cost 0.826316, z_b 0.088132  
4 labels[-1], j-sample 25965, i-bias 0.074462 cost 0.806052, z_b 0.074804  
5 labels[1],  j-sample 10322, i-bias 0.059276 cost 0.664358, z_b 0.058433  
6 labels[-1], j-sample 23946, i-bias 0.064129 cost 0.795182, z_b 0.067642  
......   

但迭代次数越多,结果如下:

270504 labels[-1], j-sample 446,   i-bias -248.318787 cost -250.818787, z_b   -250.818787    
270505 labels[1],  j-sample 10314, i-bias -248.328781 cost 248.306259,  z_b -248.306259  
270506 labels[1],  j-sample 3820,  i-bias -248.318787 cost 247.367340,  z_b -247.367340  
270507 labels[1],  j-sample 2922,  i-bias -248.308792 cost 248.276184,  z_b -248.276184  
270508 labels[-1], j-sample 20797, i-bias -248.298798 cost -255.061432, z_b -255.061432  
270509 labels[-1], j-sample 19755, i-bias -248.308792 cost -251.686646, z b -251.686646   
270510 labels[1],  j-sample 9528,  i-bias -248.318787 cost 248.405624,  z b 248.405624  

然而,如果我不使用偏见,结果看起来不错,可能是什么问题,我非常想知道原因。

任何人都可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

我认为使用“embedding_lookup_sparse”是错误的。 看看这个source code of embedding_lookup_sparse

组合器的默认值是"表示",但是如果你想获得w * x,哪个x是稀疏数据,你应该设置组合器是" sum"而不是"意思是"。 所以我认为这是你的主要问题。