训练一个分类网络,没想到预测结果为一个定值。
找了很久发现,是因为tensor的维度的原因。 注意:我说的是我的label数据的维度。
我的输入是:
y_= tf.placeholder(tf.int32,[None,1]) #维度:(batchsize,1)
我使用的损失函数:
loss = -y_*log(pred) pred = tf.softmax(wx+b) #维度:(batch_size,10034)
所以我需要将y_的 维度转化为(batch_size,10034)
我使用的是
y__ = tf.one_hot(y,10034) #维度是:(batch_size,1,10034),而不是我们的预期:(batch_size,10034)
显然这时有问题的,所以才会在坑中转了好久。
tf.one_hot()的输入数据为一维数组。
正确方法:
y1 = tf.reshape(y_,[-1]) # 变成一维数组(batch_size,) y__ = tf.one_hot(y1,10034) # (batch_size,10034) loss = tf.reduce_mean(-tf.reduce_sum(y__*log(pred),reduction_indices=[1]))