TensorFlow2_200729系列---11、测试(张量)实例
一、总结
一句话总结:
就用算好的w和b,来计算测试集上面的正确率即可,非常简单
# test/evluation # [w1, b1, w2, b2, w3, b3] total_correct, total_num = 0, 0 for step, (x,y) in enumerate(test_db): # [b, 28, 28] => [b, 28*28] x = tf.reshape(x, [-1, 28*28]) # [b, 784] => [b, 256] => [b, 128] => [b, 10] h1 = tf.nn.relu(x@w1 + b1) h2 = tf.nn.relu(h1@w2 + b2) out = h2@w3 +b3 # out: [b, 10] ~ R # prob: [b, 10] ~ [0, 1] prob = tf.nn.softmax(out, axis=1) # [b, 10] => [b] # int64!!! pred = tf.argmax(prob, axis=1) pred = tf.cast(pred, dtype=tf.int32) # y: [b] # [b], int32 # print(pred.dtype, y.dtype) # tf.cast:bool 值转换成整型的0和1 correct = tf.cast(tf.equal(pred, y), dtype=tf.int32) # 求和,预测对的个数 correct = tf.reduce_sum(correct) total_correct += int(correct) total_num += x.shape[0] acc = total_correct / total_num print('test acc:', acc)
二、测试(张量)实例
博客对应课程的视频位置:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# x: [60k, 28, 28], [10, 28, 28]
# y: [60k], [10k]
(x, y), (x_test, y_test) = datasets.mnist.load_data()
# x: [0~255] => [0~1.]
x = tf.convert_to_tensor(x, dtype=tf.float32) / 255.
y = tf.convert_to_tensor(y, dtype=tf.int32)
x_test = tf.convert_to_tensor(x_test, dtype=tf.float32) / 255.
y_test = tf.convert_to_tensor(y_test, dtype=tf.int32)
print(x.shape, y.shape, x.dtype, y.dtype)
print(tf.reduce_min(x), tf.reduce_max(x))
print(tf.reduce_min(y), tf.reduce_max(y))
train_db = tf.data.Dataset.from_tensor_slices((x,y)).batch(128)
test_db = tf.data.Dataset.from_tensor_slices((x_test,y_test)).batch(128)
train_iter = iter(train_db)
sample = next(train_iter)
print('batch:', sample[0].shape, sample[1].shape)
# [b, 784] => [b, 256] => [b, 128] => [b, 10]
# [dim_in, dim_out], [dim_out]
w1 = tf.Variable(tf.random.truncated_normal([784, 256], stddev=0.1))
b1 =