由此:
二进制标签值–1和+1
。。。我假设在你的价值观
train_y和
test_y实际上是-1.0到+1.0
这不能与您选择的损失函数很好地配合
sigmoid_cross_entropy_with_logits-假定为0.0和+1.0。负值
y会引起混乱!但是,损失函数的选择对于二进制分类是有利的。我建议将您的
y值更改为0和1。
另外,从技术上讲,网络的输出不是最终的预测。损耗函数
sigmoid_cross_entropy_with_logits被设计为与在输出层中具有S型传递函数的网络一起使用,尽管您已经正确地知道
在执行 此 *** 作 之前 已经应用了损耗函数。所以您的训练代码看起来正确
我不确定
tf.transpose该如何做-我会亲自查看将其删除会如何?
output = tf.add(tf.matmul(l3, output_layer['weights']), output_layer['biases'])
无论哪种方式,这都是“
logit”输出,而不是您的预测。
output对于非常自信的预测,的值可能会很高,这可能会在以后由于缺少S形函数而说明您的很高的值。因此,添加一个预测张量(这表示该示例处于肯定类别中的概率/置信度):
prediction = tf.sigmoid(output)
您可以使用它来计算准确性。您的准确性计算不应基于L2误差,而应基于正确值的总和-
更接近于您注释掉的代码(这似乎来自多类分类)。要对二进制分类与真/假进行比较,您需要对预测进行阈值处理,并与真标签进行比较。像这样:
predicted_class = tf.greater(prediction,0.5) correct = tf.equal(predicted_class, tf.equal(y,1.0)) accuracy = tf.reduce_mean( tf.cast(correct, 'float') )
精度值应在0.0到1.0之间。如果要以百分比表示,请当然乘以100。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)