IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> tensorflow实验五-----MNIST手写数字识别 -> 正文阅读

[Python知识库]tensorflow实验五-----MNIST手写数字识别

作者:recommend-item-box-tow

导入库

import tensorflow.compat.v1 as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
print("Tensorflow版本是:",tf.__version__)

数据获取

mnist = tf.keras.datasets.mnist
(train_images,train_labels),(test_images,test_labels) = mnist.load_data()

之前没有下载过数据,会显示一个下载的过程

划分验证集

total_num = len(train_images)
valid_split = 0.2
train_num = int(total_num*(1-valid_split))

train_x = train_images[:train_num]
train_y = train_labels[:train_num]

valid_x = train_images[train_num:]
valid_y = train_labels[train_num:]

test_x = test_images
test_y = test_labels

在这里插入图片描述

valid_x.shape

在这里插入图片描述

数据塑形

将(28,28)的结构拉直为一行 784(28*28)

train_x = train_x.reshape(-1,784)
valid_x = valid_x.reshape(-1,784)
test_x = test_x.reshape(-1,784)

在这里插入图片描述

特征数据归一化

train_x = tf.cast(train_x/255.0,tf.float32)
valid_x = tf.cast(valid_x/255.0,tf.float32)
test_x = tf.cast(test_x/255.0,tf.float32)

在这里插入图片描述

train_x[1]

在这里插入图片描述

标签数据独热编码

train_y = tf.one_hot(train_y,depth=10)
valid_y = tf.one_hot(valid_y,depth=10)
test_y= tf.one_hot(test_y,depth=10)
train_y

在这里插入图片描述

构建模型

在这里插入图片描述

def model(x,w,b):
    pred = tf.matmul(x,w) + b
    return tf.nn.softmax(pred)

在这里插入图片描述

定义模型变量

W = tf.Variable(tf.random.normal([784,10],mean=0.0,stddev=1.0,dtype=tf.float32))

B = tf.Variable(tf.zeros([10]),dtype = tf.float32)

在这里插入图片描述

定义损失函数

定义交叉熵损失函数

def loss(x,y,w,b):
    pred = model(x,w,b)
    loss_ = tf.keras.losses.categorical_crossentropy(y_true=y,y_pred = pred)
    return tf.reduce_mean(loss_)

在这里插入图片描述

在自定义的损失函数loss中直接调用了TensorFlow提供的交叉熵函数。

定义训练超参数

training_epochs = 20
batch_size = 50
learning_rate = 0.001

在这里插入图片描述

定义梯度计算函数

def grad(x,y,w,b):
    with tf.GradientTape() as tape:
        loss_ = loss(x,y,w,b)
    return tape.gradient(loss_,[w,b])

在这里插入图片描述

选择优化器

常用优化器:SGD、Adagrad、Adadelta、RMSprop、Adam

optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)

在这里插入图片描述

定义准确率

def accuracy(x,y,w,b):
    pred = model(x,w,b)
    correct_prediction = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
    return tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

在这里插入图片描述

训练模型

total_step = int(train_num/batch_size)

loss_list_train = []
loss_list_valid = []
acc_list_train = []
acc_list_valid = []

for epoch in range (training_epochs):
    for step in range(total_step):
        xs = train_x[step*batch_size:(step+1)*batch_size]
        ys = train_y[step*batch_size:(step+1)*batch_size]
        
        grads = grad(xs,ys,W,B)
        optimizer.apply_gradients(zip(grads,[W,B]))
    
    loss_train = loss(train_x,train_y,W,B).numpy()
    loss_valid = loss(valid_x,valid_y,W,B).numpy()
    acc_train = accuracy(train_x,train_y,W,B).numpy()
    acc_valid = accuracy(valid_x,valid_y,W,B).numpy()
    loss_list_train.append(loss_train)
    loss_list_valid.append(loss_valid)
    acc_list_train.append(acc_train)
    acc_list_valid.append(acc_valid)
    print("epoch={:3d},train_loss={:.4f},train_acc={:.4f},val_loss={:.4f},val_lacc={:.4f}".format(epoch+1,loss_train,acc_train,loss_valid,acc_valid))

在这里插入图片描述
有的时候可能执行的比较慢,不会立即出结果,稍微耐心等一下
从上述打印结果可以看出损失值(Loss)是趋于更小的,同时准确率(accuracy)越来越高

显示训练过程数据

plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.plot(loss_list_train,'blue',label="Train Loss")
plt.plot(loss_list_valid,'red',label='Valid Loss')
plt.legend(loc=1)

在这里插入图片描述

plt.xlabel("Epochs")
plt.ylabel("Accuracy")
plt.plot(acc_list_train,'blue',label="Train Loss")
plt.plot(acc_list_valid,'red',label='Valid Loss')
plt.legend(loc=1)

在这里插入图片描述

评估模型

acc_test = accuracy(test_x,test_y,W,B).numpy
print("Test accuracy:",acc_test)

在这里插入图片描述

模型应用与可视化

应用模型

def predict(x,w,b):
    pred = model(x,w,b)
    result = tf.argmax(pred,1).numpy()
    return result
pred_test=predict(test_x,W,B)
pred_test[0]

在这里插入图片描述
定义可视化函数

import matplotlib.pyplot as plt
import numpy as np
def plot_images_labels_prediction(images,
                                 labels,
                                 preds,
                                 index=0,
                                 num=10):
    fig = plt.gcf()
    fig.set_size_inches(10,4)
    if num > 10:
        num = 10
    for i in range(0,num):
        ax = plt.subplot(2,5,i+1)
        
        ax.imshow(np.reshape(images[index],(28,28)),cmap='binary')
        
        title = "label=" + str(labels[index])
        if len(preds)>0:
            title +=",predict=" + str(labels[index])
            
        ax.set_title(title,fontsize=10)
        ax.set_xticks([]);
        ax.set_yticks([])
        index = index + 1
    plt.show()    

在这里插入图片描述

可视化预测结果

plot_images_labels_prediction(test_images,test_labels,pred_test,10,10)

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:41:12  更:2022-04-30 08:42:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 9:27:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计