【tensorflow】tf.one_hot,tf.reduce_mean,tf.argmax,tf.equal,tf.cast学习


由于使用tensorflow训练时经常用到一些对求准确率、损失值、预测值等数据处理的函数,特此记录一下。


0、准备数据

首先准备一些数据,作为计算后的y值和真实标签t。

一维,长度是10,代表10组数据,每个数字代表一种类别,共4种类别,0 1 2 3。

可以看到一共10组数据,有两组不一样,所以后面计算得到的准确率应该是0.8。

import numpy as np
import tensorflow as tf

y_ = [0,0,0,1,1,1,2,2,2,3]
t_ = [0,0,1,1,1,2,2,2,2,3]
y_ = np.array(y_)
t_ = np.array(t_)
print y_.shape
print y_
print t_.shape
print t_

这里写图片描述

1、tf.one_hot

官网api:https://www.tensorflow.org/api_docs/python/tf/one_hot

由于拿到的标签是数字,在tensorflow中经常要转换为一组向量,长度是数据的个数,比如10,如果一个数据类别是3,则坐标为3的值为1,其他皆为0,如[0 0 0 1 0 0 0 0 0 0]。

所以需要用到tf.one_hot函数。第一个参数代表要转换的数据,第二个参数代表类别个数。

y_label = tf.one_hot(y_, 4)
t_label = tf.one_hot(t_, 4)
print y_label.shape
print y_label
print t_label.shape
print t_label

sess = tf.Session()
print sess.run(y_label)
print "############"
print sess.run(t_label)

【tensorflow】tf.one_hot,tf.reduce_mean,tf.argmax,tf.equal,tf.cast学习_第1张图片

2、tf.reduce_mean

官网api:https://www.tensorflow.org/api_docs/python/tf/reduce_mean

求平均值,第一个参数是输入的tensor。如果没有指定axis,则默认所有的值求平均值。如果指定axis,则以axis的维度求平均值。

如:

x = tf.constant([[1., 1.], [2., 2.]])
tf.reduce_mean(x)  # 1.5
tf.reduce_mean(x, 0)  # [1.5, 1.5]
tf.reduce_mean(x, 1)  # [1.,  2.]

这里是对取得loss后做的求平均值。

loss = tf.losses.softmax_cross_entropy(y_label,t_label)
loss_t = tf.reduce_mean(loss)
print loss
print loss_t
print sess.run(loss)
print sess.run(loss_t)

这里写图片描述

3、tf.argmax

官网api:https://www.tensorflow.org/api_docs/python/tf/argmax

返回某一维度上最大值的下标。获得输出值类别和真实标签类别。

y_111 = tf.argmax(y_label, 1)
t_111 = tf.argmax(t_label, 1)
print y_111
print t_111
print sess.run(y_111)
print sess.run(t_111)

这里写图片描述

4、tf.equal

官网api:https://www.tensorflow.org/api_docs/python/tf/equal

返回比较结果后的一组true或false的向量。

pre = tf.equal(y_111, t_111)
print pre
print sess.run(pre)

这里写图片描述

5、tf.cast

官网api:https://www.tensorflow.org/api_docs/python/tf/cast

转换数据类型。如:

x = tf.constant([1.8, 2.2], dtype=tf.float32)
tf.cast(x, tf.int32)  # [1, 2], dtype=tf.int32

以下,将bool值转换为float32。

pre_f = tf.cast(pre, tf.float32)
print pre_f
print sess.run(pre_f)

这里写图片描述

6、综合代码

import numpy as np
import tensorflow as tf

y_ = [0,0,0,1,1,1,2,2,2,3]
t_ = [0,0,0,1,1,1,2,2,2,3]
y_ = np.array(y_)
t_ = np.array(t_)
print y_.shape
print y_
print t_.shape
print t_

y_label = tf.one_hot(y_, 4)
t_label = tf.one_hot(t_, 4)
print y_label.shape
print y_label
print t_label.shape
print t_label

sess = tf.Session()
print sess.run(y_label)
print sess.run(t_label)

loss = tf.losses.softmax_cross_entropy(y_label,t_label)
loss_t = tf.reduce_mean(loss)
print loss
print loss_t
print sess.run(loss)
print sess.run(loss_t)

y_111 = tf.argmax(y_label, 1)
t_111 = tf.argmax(t_label, 1)
print y_111
print t_111
print sess.run(y_111)
print sess.run(t_111)

pre = tf.equal(y_111, t_111)
print pre
print sess.run(pre)

pre_f = tf.cast(pre, tf.float32)
print pre_f
print sess.run(pre_f)

acc = tf.reduce_mean(pre_f)
print acc
print sess.run(acc)

这里写图片描述

你可能感兴趣的:(tensorflow)