TensorFlow-Coding icon indicating copy to clipboard operation
TensorFlow-Coding copied to clipboard

label的one-hot编码

Open carrie0307 opened this issue 5 years ago • 6 comments

https://github.com/zhaoyingjun/TensorFlow-Coding/blob/0034d92e17f164b86accac3c49826dab0ce79fa6/lessonOne/imgClassifierWeb/cnnModel.py#L152 老师您好,我是听了小象学院课程的学生,关于这行代码有两个问题想请教:

  1. 根据tf.nn.sparse_softmax_cross_entropy_with_logits的文档,label可以直接放入数值化的标签结果,请问您这里为什么做了One-hot处理呢?
  2. 根据tf.nn.sparse_softmax_cross_entropy_with_logits的文档,这里的logits应该是未经softmax处理的结果(这个函数会进行softmax操作),您这里输入的为什么是经过softmax后的值呢?

初学请教,理解错误之处请您谅解;万望回复,谢谢啦!

carrie0307 avatar Feb 27 '19 07:02 carrie0307

1、这个是用错了,当时没有仔细看文档,这个不需要对label进行onehot编码的,如果进行onehot编码需要改用tf.nn.softmax_cross_entropy_with_logits,正好最近在改写用tensorflow2.0的api编码的时候发现这个问题,多谢提出,造成困惑还请见谅。 2、是的,这是是不需要在网络的最后一层再加上softmax的,已经更新代码。

zhaoyingjun avatar Feb 28 '19 06:02 zhaoyingjun

好的,谢谢您的回复~

carrie0307 avatar Feb 28 '19 06:02 carrie0307

@zhaoyingjun ,您好,您的第一课的代码运行还是有问题。 首先 , 在 cnnModel下,step,label运行时不匹配。 第二, 我主要想问的就是execute.py文件中。 softmax_propabilities = graph.get_tensor_by_name(name="softmax_probs:0") softmax_predictions = tf.argmax(softmax_propabilities, axis=1) data_tensor = graph.get_tensor_by_name(name="data_tensor:0") "softmax_probs:0" 这么没法获取的问题。

请老师 能给我解决一下 第二个问题。

CourteousWood avatar Mar 15 '19 12:03 CourteousWood

老师 目前对于第一课代码有个疑问。 #将label变成one-hot编码,因为softmax_propabilities是一个数组,是10个概率,每个概率代表着预测结果属于其index类的概率,为了计算交叉熵,我们需要把label也转换成一个数组 self.label_tensor=tf.one_hot(self.label_tensor,10) #计算交叉熵 cross_entropy=tf.nn.softmax_cross_entropy_with_logits(logits=self.fc_result,labels=self.label_tensor) 您修改成这个样子了 目前跑不通 报错: ValueError: Cannot feed value of shape (1000,) for Tensor 'one_hot:0', which has shape '(1000, 10)' 去掉onehot 仍然修改为cross_entropy=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.fc_result,labels=self.label_tensor) 可以跑通,但是模型不收敛。acc一直很低。

zlh1992 avatar Apr 19 '20 03:04 zlh1992

@zhaoyingjun ,您好,您的第一课的代码运行还是有问题。 首先 , 在 cnnModel下,step,label运行时不匹配。 第二, 我主要想问的就是execute.py文件中。 softmax_propabilities = graph.get_tensor_by_name(name="softmax_probs:0") softmax_predictions = tf.argmax(softmax_propabilities, axis=1) data_tensor = graph.get_tensor_by_name(name="data_tensor:0") "softmax_probs:0" 这么没法获取的问题。

请老师 能给我解决一下 第二个问题。

cnnmodel里加上:self.softmax_propabilities=tf.nn.softmax(self.fc_result,name="softmax_probs") 就能获取到了。 您说的第一个问题是从哪发现的?

zhenglinghan avatar Apr 24 '20 16:04 zhenglinghan

Cannot feed value of shape (500,) for Tensor 'one_hot:0', which has shape '(500, 1, 10)'

maiqkun369 avatar Jun 12 '20 14:06 maiqkun369