由于使用tensorflow训练时经常用到一些对求准确率、损失值、预测值等数据处理的函数,特此记录一下。
首先准备一些数据,作为计算后的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_
官网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)
官网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)
官网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)
官网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)
官网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)
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)