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

tensorflow基于CNN實(shí)戰(zhàn)mnist手寫識(shí)別(小白必看)

 更新時(shí)間:2020年07月20日 08:40:32   作者:梁先森-python數(shù)據(jù)分析師進(jìn)階之路  
這篇文章主要介紹了tensorflow基于CNN實(shí)戰(zhàn)mnist手寫識(shí)別(小白必看),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

很榮幸您能看到這篇文章,相信通過標(biāo)題打開這篇文章的都是對(duì)tensorflow感興趣的,特別是對(duì)卷積神經(jīng)網(wǎng)絡(luò)在mnist手寫識(shí)別這個(gè)實(shí)例感興趣。不管你是什么基礎(chǔ),我相信,你在看完這篇文章后,都能夠完全理解這個(gè)實(shí)例。這對(duì)于神經(jīng)網(wǎng)絡(luò)入門的小白來說,簡直是再好不過了。


通過這篇文章,你能夠?qū)W習(xí)到

  • tensorflow一些方法的用法
  • mnist數(shù)據(jù)集的使用方法以及下載
  • CNN卷積神經(jīng)網(wǎng)絡(luò)具體python代碼實(shí)現(xiàn)
  • CNN卷積神經(jīng)網(wǎng)絡(luò)原理
  • 模型訓(xùn)練、模型的保存和載入

Tensorflow實(shí)戰(zhàn)mnist手寫數(shù)字識(shí)別

關(guān)于這個(gè)mnist手寫數(shù)字識(shí)別實(shí)戰(zhàn),我是跟著某課網(wǎng)上的教學(xué)視頻跟著寫的

需要導(dǎo)入的包

import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data #mnist數(shù)據(jù)用到的包

下載mnist數(shù)據(jù)

mnist = input_data.read_data_sets('mnist_data',one_hot=True)

通過這一行代碼,就可以將mnist數(shù)據(jù)集下載到本地文件夾mnist_data目錄下,當(dāng)然,你也可以使用絕對(duì)地址下載你想要下載的地方。這里需要注意一點(diǎn)是,如果第一次運(yùn)行程序,由于需要下載資源的緣故,故需要一段時(shí)間,并且下載過程是沒有提示的,之后下載成功時(shí) 才會(huì)提示 Success xxxxxx 。另一種方式就是直接去官網(wǎng)下載數(shù)據(jù)集
mnist官網(wǎng) 進(jìn)去點(diǎn)擊就可以直接下載了。

張量的聲明

input_x = tf.compat.v1.placeholder(tf.float32,[None,28*28],name='input_x')#圖片輸入
output_y = tf.compat.v1.placeholder(tf.int32,[None,10],name='output_y')#結(jié)果的輸出
image = tf.reshape(input_x,[-1,28,28,1])#對(duì)input_x進(jìn)行改變形狀,

稍微解釋一下
[-1,28,28,1] -1表示不考慮輸入圖片的數(shù)量,28*28是圖片的長和寬的像素值,1是通道數(shù)量,由于原圖片是黑白的 ,所以通道是1,若是彩色圖片,應(yīng)為3.

取測試圖片和標(biāo)簽

test_x = mnist.test.images[:3000]
test_y = mnist.test.labels[:3000]

[:3000]表示從列表下標(biāo)為0到2999 這些數(shù)據(jù)
[1:3] 表示列表下標(biāo)從1到2 這些數(shù)據(jù)

卷積神經(jīng)網(wǎng)絡(luò)第一層卷積層(用最通俗的言語告訴你什么是卷積神經(jīng)網(wǎng)絡(luò))

#第一層卷積
conv1 = tf.layers.conv2d(inputs=image,#輸入
  filters=32,#32個(gè)過濾器
  kernel_size=[5,5],#過濾器在二維的大小是5*5
  strides=1,#步長是1
  padding='same',#same表示輸出的大小不變,因此需要補(bǔ)零
  activation=tf.nn.relu#激活函數(shù)
 )#形狀[28,28,32]

第二層池化層

pool1 = tf.layers.max_pooling2d(
  inputs=conv1,#第一層卷積后的值
  pool_size=[2,2],#過濾器二維大小2*2
  strides=2 #步長2
)#形狀[14,14,32]

第三層卷積層2

conv2 = tf.layers.conv2d(inputs=pool1,
  filters=64,
  kernel_size=[5,5],
  strides=1,
  padding='same',
  activation=tf.nn.relu
)#形狀[14,14,64]

第四層池化層2

pool2 = tf.layers.max_pooling2d(
  inputs=conv2,
  pool_size=[2,2],
  strides=2
)#形狀[7,7,64]

平坦化

flat = tf.reshape(pool2,[-1,7*7*64])

使用flat.shape 輸出的形狀為(?, 3136)

1024個(gè)神經(jīng)元的全連接層

dense = tf.layers.dense(inputs=flat,units=1024,activation=tf.nn.relu)

tf.nn.relu 是一種激活函數(shù),目前絕大多數(shù)神經(jīng)網(wǎng)絡(luò)使用的激活函數(shù)是relu

Droupout 防止過擬合

dropout = tf.layers.dropout(inputs=dense,rate=0.5)

就是為了避免訓(xùn)練數(shù)據(jù)量過大,造成過于模型過于符合數(shù)據(jù),泛化能力大大減弱。

10個(gè)神經(jīng)元的全連接層

logits = tf.layers.dense(inputs=dropout,units=10,name="logit_1")

計(jì)算誤差,使用adam優(yōu)化器優(yōu)化誤差

#計(jì)算誤差,使用交叉熵(交叉熵用來衡量真實(shí)值和預(yù)測值的相似性)
loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y,logits=logits)
#學(xué)習(xí)率0.001 最小化loss值,adam優(yōu)化器
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

計(jì)算精度值

accurary = tf.metrics.accuracy(
   labels=tf.argmax(output_y,axis=1),
   predictions=tf.argmax(logits,axis=1),)[1]

創(chuàng)建會(huì)話,初始化變量

sess = tf.compat.v1.Session()#創(chuàng)建一個(gè)會(huì)話
#初始化全局變量和局部變量
init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
sess.run(init)

基本上到這里,這個(gè)程序就完成了,不過你也可以在此基礎(chǔ)上加上一些數(shù)據(jù)的輸出,使其更容易顯示整個(gè)訓(xùn)練的過程。
比如我加上了這一段

for i in range(1000):
 #獲取以batch_size為大小的一個(gè)元組,包含一組圖片和標(biāo)簽
 batch = mnist.train.next_batch(50)
 train_loss,train_op_,logits_output = sess.run([loss,train_op,logits],{input_x:batch[0],output_y:batch[1]})
 if i % 100 == 0:
  test_accuracy = sess.run(accurary,{input_x:test_x,output_y:test_y})
  print(("step=%d,Train loss=%.4f,[Test accuracy=%.2f]") \
    % (i, train_loss, test_accuracy))

輸出為:


完整的代碼數(shù)據(jù)文件我整理到了GitHub 下載地址 大家如果覺得可以的話,可以給個(gè)⭐

下面就回答一些我在學(xué)習(xí)過程中的遇到的問題:

【問】如何開始學(xué)習(xí)tensorflow,小白如何入門?
【答】 我的建議是先找到自己感興趣的點(diǎn),從這個(gè)點(diǎn)出發(fā),通過實(shí)踐將自己不明白的方法原理通過看官網(wǎng),看博客,查百度,一一解決。文章開頭的那個(gè)視頻,我認(rèn)為作為入門還不錯(cuò),最好再有一本tensorflow相關(guān)書籍結(jié)合著來。

【問】 CNN卷積神經(jīng)網(wǎng)絡(luò)的流程是什么,其中的轉(zhuǎn)化是什么樣的?
【答】主要涉及的知識(shí)就是數(shù)組之間的計(jì)算,具體關(guān)于我對(duì)卷積神經(jīng)網(wǎng)絡(luò)的理解,可以參考這篇博客 最易懂-CNN卷積神經(jīng)網(wǎng)絡(luò)運(yùn)行原理和流程

【問】訓(xùn)練好的模型如何保存或者直接拿來使用呢?
【答】具體看我的另一篇博客 模型的保存和使用 也是通過這個(gè)例子,教你如何保存模型和使用模型

【問】為什么中間有出現(xiàn)兩次卷積層,兩次池化層?
【答】這個(gè)不是必須的,有的比較復(fù)雜的模型需要很多層,每一層都是對(duì)上一層特征的提取,只是這個(gè)就是比較基本的模型,都是使用兩次。初次咱們學(xué)習(xí)的話,就使用兩次就夠了,后面學(xué)習(xí)的知識(shí)多了,就可以自己根據(jù)實(shí)際情況加了。

【問】為什么全連接層有兩個(gè),里面的神經(jīng)元數(shù)是固定的嗎?
【答】有幾個(gè)全連接層不是固定的,你就可以理解,這個(gè)全連接層就是做最后的收尾工作的,就是將前面幾個(gè)層所提取到的信息,最后進(jìn)行匯總 并顯示,所以,最后一個(gè)全連接層的神經(jīng)元必須是10,由于本次使用的ont-hot (獨(dú)熱碼)的形式來表示圖片的label,所以最后一個(gè)輸出的神經(jīng)元個(gè)數(shù)必須是10.至于前面的,大家可以嘗試多使用幾個(gè)嘗試一下。
【問】one_hot獨(dú)熱碼在咱們這個(gè)程序中是怎么使用的?
【答】其實(shí)我也是頭一次聽說這個(gè)編碼(我是小白),舉個(gè)例子吧。
0:1000000000
1:0100000000
2:0010000000
就是這種

到此這篇關(guān)于tensorflow基于CNN實(shí)戰(zhàn)mnist手寫識(shí)別(小白必看)的文章就介紹到這了,更多相關(guān)tensorflow mnist手寫識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python函數(shù)實(shí)現(xiàn)一個(gè)萬歷表完整示例

    利用Python函數(shù)實(shí)現(xiàn)一個(gè)萬歷表完整示例

    這篇文章主要給大家介紹了關(guān)于如何利用Python函數(shù)實(shí)現(xiàn)一個(gè)萬歷表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Django MTV和MVC的區(qū)別詳解

    Django MTV和MVC的區(qū)別詳解

    這篇文章主要介紹了Django MTV和MVC的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)

    Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)

    本文將結(jié)合實(shí)例代碼,介紹Python3 多線程(連接池)操作MySQL插入數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python 深度學(xué)習(xí)中的4種激活函數(shù)

    python 深度學(xué)習(xí)中的4種激活函數(shù)

    這篇文章主要介紹了python深度學(xué)習(xí)中的4種激活函數(shù),幫助大家更好的進(jìn)行深度學(xué)習(xí),感興趣的朋友可以了解下
    2020-09-09
  • 集調(diào)試共享及成本控制Prompt工具PromptLayer使用指南

    集調(diào)試共享及成本控制Prompt工具PromptLayer使用指南

    這篇文章主要介紹了集調(diào)試共享及成本控制Prompt工具PromptLayer使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Python Pillow 圖像處理庫詳解(常用Pillow函數(shù)及其參數(shù))

    Python Pillow 圖像處理庫詳解(常用Pillow函數(shù)及其參數(shù))

    Pillow,原名PIL(Python Imaging Library),是一個(gè)功能強(qiáng)大的Python圖像處理庫,支持多種格式,提供豐富的圖像操作功能,如旋轉(zhuǎn)、縮放、顏色轉(zhuǎn)換等,以及易于使用的API,Pillow支持廣泛的圖像文件格式,并提供圖像過濾、繪制等功能
    2024-09-09
  • 一起來了解python的if流程控制

    一起來了解python的if流程控制

    這篇文章主要為大家詳細(xì)介紹了python的if流程控制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python jenkins 打包構(gòu)建代碼的示例代碼

    python jenkins 打包構(gòu)建代碼的示例代碼

    這篇文章主要介紹了python jenkins 打包構(gòu)建代碼的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python安裝第三方庫攻略(pip和Anaconda)

    Python安裝第三方庫攻略(pip和Anaconda)

    這篇文章主要介紹了Python安裝第三方庫攻略(pip和Anaconda),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python調(diào)用訊飛語音合成API接口來實(shí)現(xiàn)文字轉(zhuǎn)語音

    Python調(diào)用訊飛語音合成API接口來實(shí)現(xiàn)文字轉(zhuǎn)語音

    這篇文章主要為大家介紹了Python調(diào)用訊飛語音合成API接口來實(shí)現(xiàn)文字轉(zhuǎn)語音方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論