1. 程式人生 > >【tensorflow】tf.one_hot,tf.reduce_mean,tf.argmax,tf.equal,tf.cast學習

【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

由於拿到的標籤是數字,在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)

這裡寫圖片描述

2、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

返回某一維度上最大值的下標。獲得輸出值類別和真實標籤類別。

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

返回比較結果後的一組true或false的向量。

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

這裡寫圖片描述

5、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)

這裡寫圖片描述