欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python手寫數(shù)字識(shí)別模型的構(gòu)建與使用

 更新時(shí)間:2022年12月22日 08:31:40   作者:顧城沐心  
這篇文章主要為大家詳細(xì)介紹了Python中手寫數(shù)字識(shí)別模型的構(gòu)建與使用,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下

一:手寫數(shù)字模型構(gòu)建與保存

1 加載數(shù)據(jù)集

# 1加載數(shù)據(jù)
digits_data = load_digits()

可以先簡(jiǎn)單查看下 手寫數(shù)字集,如下可以隱約看出數(shù)字為8

plt.imshow(digits_data.images[8])
plt.show()

2 特征數(shù)據(jù) 標(biāo)簽數(shù)據(jù)

# 數(shù)據(jù)劃分
x_data = digits_data.data
y_data = digits_data.target

3 訓(xùn)練集 測(cè)試集

# 訓(xùn)練集 + 測(cè)試集
x_test = x_data[:40]
y_test = y_data[:40]
 
x_train = x_data[40:]
y_train = y_data[40:]
# 概率問題
y_train_2 = np.zeros(shape=(len(y_train), 10))

4 數(shù)據(jù)流圖 輸入層

input_size = digits_data.data.shape[1]  # 輸入的列數(shù)
# 數(shù)據(jù)流圖的構(gòu)建
# x:輸入64個(gè)特征值--像素
x = tf.placeholder(np.float32, shape=[None, input_size])
# y:識(shí)別的數(shù)字 有幾個(gè)類別[0-9]
y = tf.placeholder(np.float32, shape=[None, 10])

5 隱藏層

5.1 第一層

# 第一層隱藏層
# 參數(shù)1 輸入維度  參數(shù)2:輸出維度(神經(jīng)元個(gè)數(shù)) 標(biāo)準(zhǔn)差是0.1的正態(tài)分布
w1 = tf.Variable(tf.random_normal([input_size, 80], stddev=0.1))
# b的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)
b1 = tf.Variable(tf.constant(0.01), [80])
# 第一層計(jì)算
one = tf.matmul(x, w1) + b1
# 激活函數(shù)  和0比 大于0則激活
op1 = tf.nn.relu(one)

5.2 第二層

# 第二層隱藏層  上一層輸出為下一層輸入
# 參數(shù)1 輸入維度  參數(shù)2:輸出維度(神經(jīng)元個(gè)數(shù)) 標(biāo)準(zhǔn)差是0.1的正態(tài)分布
w2 = tf.Variable(tf.random_normal([80, 10], stddev=0.1))
# b的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)
b2 = tf.Variable(tf.constant(0.01), [10])
# 第一層計(jì)算
two = tf.matmul(op1, w2) + b2
# 激活函數(shù)  和0比 大于0則激活
op2 = tf.nn.relu(two)

6 損失函數(shù)

# 構(gòu)建損失函數(shù) 
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=op2))

7 梯度下降算法

# 梯度下降算法
Optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.005).minimize(loss)

8 輸出損失值 

# 變量初始化
init = tf.global_variables_initializer()
data_size = digits_data.data.shape[0]
 
# 開啟會(huì)話
with tf.Session() as sess:
    sess.run(init)
    # 訓(xùn)練次數(shù)
    for i in range(500):
        # 數(shù)據(jù)分組
        start = (i * 100) % data_size
        end = min(start + 100, data_size)
        batch_x = x_train[start:end]
        batch_y = y_train_2[start:end]
        sess.run(Optimizer, feed_dict={x: batch_x, y: batch_y})
        # 輸出損失值
        train_loss = sess.run(loss, feed_dict={x: batch_x, y: batch_y})
        print(train_loss)

9 模型 保存與使用

    obj = tf.train.Saver()
    # 模型保存
    obj.save(sess, 'model-digits.ckpt')

10 完整源碼分享

import tensorflow as tf
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
 
# 1加載數(shù)據(jù)
digits_data = load_digits()
# 查看數(shù)據(jù)
# print(digits_data)
# 查看數(shù)據(jù)基本特征 (1797, 64) 64:8*8像素點(diǎn)
# print(digits_data.data.shape)
 
# plt.imshow(digits_data.images[8])
# plt.show()
 
# 數(shù)據(jù)劃分
x_data = digits_data.data
y_data = digits_data.target
 
# 訓(xùn)練集 + 測(cè)試集
x_test = x_data[:40]
y_test = y_data[:40]
 
x_train = x_data[40:]
y_train = y_data[40:]
# 概率問題
y_train_2 = np.zeros(shape=(len(y_train), 10))
 
# 對(duì)應(yīng)的分類 當(dāng)前行對(duì)應(yīng)列變成1
for index, row in enumerate(y_train_2):
    # 當(dāng)前行 對(duì)應(yīng)的數(shù)字對(duì)應(yīng)列
    row[int(y_train[index])] = 1
# print(y_train_2[0])
 
input_size = digits_data.data.shape[1]  # 輸入的列數(shù)
# 數(shù)據(jù)流圖的構(gòu)建
# x:輸入64個(gè)特征值--像素
x = tf.placeholder(np.float32, shape=[None, input_size])
# y:識(shí)別的數(shù)字 有幾個(gè)類別[0-9]
y = tf.placeholder(np.float32, shape=[None, 10])
 
# 第一層隱藏層
# 參數(shù)1 輸入維度  參數(shù)2:輸出維度(神經(jīng)元個(gè)數(shù)) 標(biāo)準(zhǔn)差是0.1的正態(tài)分布
w1 = tf.Variable(tf.random_normal([input_size, 80], stddev=0.1))
# b的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)
b1 = tf.Variable(tf.constant(0.01), [80])
# 第一層計(jì)算
one = tf.matmul(x, w1) + b1
# 激活函數(shù)  和0比 大于0則激活
op1 = tf.nn.relu(one)
 
# 第二層隱藏層  上一層輸出為下一層輸入
# 參數(shù)1 輸入維度  參數(shù)2:輸出維度(神經(jīng)元個(gè)數(shù)) 標(biāo)準(zhǔn)差是0.1的正態(tài)分布
w2 = tf.Variable(tf.random_normal([80, 10], stddev=0.1))
# b的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)
b2 = tf.Variable(tf.constant(0.01), [10])
# 第一層計(jì)算
two = tf.matmul(op1, w2) + b2
# 激活函數(shù)  和0比 大于0則激活
op2 = tf.nn.relu(two)
 
# 構(gòu)建損失函數(shù)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=op2))
# 梯度下降算法 優(yōu)化器          learning_rate學(xué)習(xí)率(步長(zhǎng))
Optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.005).minimize(loss)
 
# 變量初始化
init = tf.global_variables_initializer()
data_size = digits_data.data.shape[0]
 
# 開啟會(huì)話
with tf.Session() as sess:
    sess.run(init)
    # 訓(xùn)練次數(shù)
    for i in range(500):
        # 數(shù)據(jù)分組
        start = (i * 100) % data_size
        end = min(start + 100, data_size)
        batch_x = x_train[start:end]
        batch_y = y_train_2[start:end]
        sess.run(Optimizer, feed_dict={x: batch_x, y: batch_y})
        # 輸出損失值
        train_loss = sess.run(loss, feed_dict={x: batch_x, y: batch_y})
        print(train_loss)
    obj = tf.train.Saver()
    # 模型保存
    obj.save(sess, 'modelSave/model-digits.ckpt')

 損失值在0.303左右,如下圖所示

二:手寫數(shù)字模型使用與測(cè)試

對(duì)上一步創(chuàng)建的模型,使用測(cè)試

import tensorflow as tf
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
 
# 1加載數(shù)據(jù)
digits_data = load_digits()
 
# 數(shù)據(jù)劃分
x_data = digits_data.data
y_data = digits_data.target
 
# 訓(xùn)練集 + 測(cè)試集
x_test = x_data[:40]
y_test = y_data[:40]
 
x_train = x_data[40:]
y_train = y_data[40:]
# 概率問題
y_train_2 = np.zeros(shape=(len(y_train), 10))
 
# 對(duì)應(yīng)的分類 當(dāng)前行對(duì)應(yīng)列變成1
for index, row in enumerate(y_train_2):
    # 當(dāng)前行 對(duì)應(yīng)的數(shù)字對(duì)應(yīng)列
    row[int(y_train[index])] = 1
 
# 網(wǎng)絡(luò)搭建
num_class = 10  # 數(shù)字0-9
hidden_num = 80  # 神經(jīng)元個(gè)數(shù)
input_size = digits_data.data.shape[1]  # 輸入的列數(shù)
# 數(shù)據(jù)流圖的構(gòu)建
# x:輸入64個(gè)特征值--像素
x = tf.placeholder(np.float32, shape=[None, 64])
# y:識(shí)別的數(shù)字 有幾個(gè)類別[0-9]
y = tf.placeholder(np.float32, shape=[None, 10])
 
# 第一層隱藏層
# 參數(shù)1 輸入維度  參數(shù)2:輸出維度(神經(jīng)元個(gè)數(shù)) 標(biāo)準(zhǔn)差是0.1的正態(tài)分布
w1 = tf.Variable(tf.random_normal([input_size, 80], stddev=0.1))
# b的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)
b1 = tf.Variable(tf.constant(0.01), [80])
# 第一層計(jì)算
one = tf.matmul(x, w1) + b1
# 激活函數(shù)  和0比 大于0則激活
op1 = tf.nn.relu(one)
 
# 第二層隱藏層  上一層輸出為下一層輸入
# 參數(shù)1 輸入維度  參數(shù)2:輸出維度(神經(jīng)元個(gè)數(shù)) 標(biāo)準(zhǔn)差是0.1的正態(tài)分布
w2 = tf.Variable(tf.random_normal([80, 10], stddev=0.1))
# b的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)
b2 = tf.Variable(tf.constant(0.01), [10])
# 第一層計(jì)算
two = tf.matmul(op1, w2) + b2
# 激活函數(shù)  和0比 大于0則激活
op2 = tf.nn.relu(two)
 
# 變量初始化
init = tf.global_variables_initializer()
 
train_count = 500
batch_size = 100
data_size = x_train.shape[0]
 
pre_max_index = tf.argmax(op2, 1)
plt.imshow(digits_data.images[13])  # 3
plt.show()
 
with tf.Session() as sess:
    sess.run(init)
    # 使用網(wǎng)絡(luò)
    obj = tf.train.Saver()
    obj.restore(sess, 'modelSave/model-digits.ckpt')
    print(sess.run(op2, feed_dict={x: [x_test[13], x_test[14]]}))
    print(sess.run(pre_max_index, feed_dict={x: [x_test[13], x_test[14]]}))

想要測(cè)試的數(shù)據(jù),如下圖所示

使用模型測(cè)試出來的結(jié)果,如下圖所示,模型基本能夠使用

到此這篇關(guān)于詳解Python手寫數(shù)字識(shí)別模型的構(gòu)建與使用的文章就介紹到這了,更多相關(guān)Python手寫數(shù)字識(shí)別模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)微信防撤回神器

    python實(shí)現(xiàn)微信防撤回神器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信防撤回神器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python網(wǎng)絡(luò)爬蟲項(xiàng)目:內(nèi)容提取器的定義

    Python網(wǎng)絡(luò)爬蟲項(xiàng)目:內(nèi)容提取器的定義

    本篇文章主要介紹了Python網(wǎng)絡(luò)爬蟲項(xiàng)目,這能有效的節(jié)省程序員的時(shí)間,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • Python Flask前端自動(dòng)登錄功能實(shí)現(xiàn)詳解

    Python Flask前端自動(dòng)登錄功能實(shí)現(xiàn)詳解

    這篇文章主要介紹了Python Flask前端自動(dòng)登錄功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Flask 數(shù)據(jù)庫(kù)集成的介紹

    Flask 數(shù)據(jù)庫(kù)集成的介紹

    這篇文章主要給大家分享了Flask 數(shù)據(jù)庫(kù)集成的介紹,數(shù)據(jù)庫(kù)是大多數(shù) Web 應(yīng)用的基礎(chǔ)設(shè)施,只要想把數(shù)據(jù)存儲(chǔ)下來,就離不開數(shù)據(jù)庫(kù),下面將一起學(xué)習(xí)一下如何給 Flask 應(yīng)用添加數(shù)據(jù)庫(kù)支持。下面詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • PyQt與pycharm的結(jié)合使用教程

    PyQt與pycharm的結(jié)合使用教程

    這篇文章主要介紹了PyQt的使用與pycharm的結(jié)合,主要包括環(huán)境安裝,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Django中間件工作流程及寫法實(shí)例代碼

    Django中間件工作流程及寫法實(shí)例代碼

    這篇文章主要介紹了Django中間件工作流程及寫法實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 編寫同時(shí)兼容Python2.x與Python3.x版本的代碼的幾個(gè)示例

    編寫同時(shí)兼容Python2.x與Python3.x版本的代碼的幾個(gè)示例

    這篇文章主要介紹了編寫同時(shí)兼容Python2.x與Python3.x版本的代碼的幾個(gè)示例,在Python2.7.x的更新中由于采用了某些Python3中的代碼編寫特性、使得在有些原本不同之處編寫兼容性代碼成為可能,需要的朋友可以參考下
    2015-03-03
  • pytorch使用nn.Moudle實(shí)現(xiàn)邏輯回歸

    pytorch使用nn.Moudle實(shí)現(xiàn)邏輯回歸

    這篇文章主要為大家詳細(xì)介紹了pytorch使用nn.Moudle實(shí)現(xiàn)邏輯回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 詳解Python中對(duì)Excel的處理操作

    詳解Python中對(duì)Excel的處理操作

    Excel是一種常見的電子表格文件格式,廣泛用于數(shù)據(jù)記錄和處理,Python提供了多個(gè)第三方庫(kù),可以方便地對(duì)Excel操作,下面就來和大家詳細(xì)講講吧
    2023-07-07
  • opencv3/C++圖像像素操作詳解

    opencv3/C++圖像像素操作詳解

    今天小編就為大家分享一篇opencv3/C++圖像像素操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論