【发布时间】:2017-05-31 17:15:29
【问题描述】:
我有一个深度 CNN,可以很好地用于多类分类。我想“升级”挑战并在多标签分类问题上对其进行训练。
为此,我用 sigmoid 替换了我的 softmax,并尝试训练我的网络以最小化:
tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y_, logits=y_pred)
但我最终得到了奇怪的预测:
Prediction for Im1 : [ 0.59275776 0.08751075 0.37567005 0.1636796 0.42361438 0.08701646
0.38991812 0.54468459 0.34593087 0.82790571]
Prediction for Im1 : [ 0.52609032 0.07885984 0.45780018 0.04995904 0.32828355 0.07349177
0.35400775 0.36479294 0.30002621 0.84438241]
Prediction for Im1 : [ 0.58714485 0.03258472 0.3349618 0.03199361 0.54665488 0.02271551
0.43719986 0.54638696 0.20344526 0.88144571]
所以我想我尝试让我的网络学习每个类的阈值,以确定样本是否属于该类。
所以我将它添加到我的代码中:
initial = tf.truncated_normal([numberOfClasses], stddev=0.1)
W_thresh = tf.Variable(initial)
y_predict_thresh = int(y_predict > W_thresh)
但我有一个错误:
TypeError: int() argument must be a string or a number, not 'Tensor'.
任何人有任何想法可以帮助我前进(如何避免这个错误?,我的数据集真的不平衡的事实是否会导致这种“恒定”预测?关于多标签分类的其他建议?,...) ?
谢谢
编辑:我刚刚意识到对反向传播进行阈值处理可能不是很酷:/
【问题讨论】:
标签: python tensorflow deep-learning