09-CNN手寫數字識別

CNN卷積神經網絡的本質就是卷積運算
維度的調整:
tf.reshape(imageInput,[-1,28,28,1])
imageInput為[None,784],N行* 784維 調整為 M28行28列*1通道 即:二維轉化為四維數據
參數一:等價于運算結果M
參數二:28 28 表示圖片的寬高信息 1表示channel通道個數,因為當前讀取的是灰度圖故為1

定義變量:
tf.Variable(tf.truncated_normal([5,5,1,32],stddev = 0.1))
參數一:最終生成的維度,這里設置為5*5的卷積內核大小,輸入的維度;輸入的維度或當前通道數或imageInputReshape最后一位為1,輸出為32維
參數二:期望方差

layer1:激勵函數+卷積運算
imageInputReshape : w0:5,5,1,32
通過激勵函數,來完成當前的卷積運算
tf.nn.relu(tf.nn.conv2d(imageInputReshape,w0,strides=1,1,1,1],padding='SAME')+b0)
參數一:輸入圖像數據,imageInputReshape是一個M2828*1
參數二:權重矩陣 w0是一個5,5,1,32的維度
參數三:每次移動的步長,這里的步長是個四維的
參數四:SAME表示卷積核可以停留在圖像的邊緣

其實池化就等價于采樣
創建池化層,是得數據量大大減少;
tf.nn.max_pool(layer1,ksize=[1,4,4,1],strides=[1,4,4,1],padding='SAME')
參數一:layer1
參數二:ksize=[1,4,4,1] 表明輸入數據是一個M282832 這個數據與對應的ksize相除即M/1 28/4 28/4 32/1=M7732即為池化層的輸出結果
參數三:池化層的步長
參數四:池化層是否可以停留在圖像的邊緣
而max_pool即將[1 2 3 4]結果池化層后變為一維[4],即原來數組中最大的內容

#1 import 導包
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
# 2 load data 加載數據
mnist = input_data.read_data_sets('E:\\Jupyter_workspace\\study\\DL\\MNIST_data',one_hot = True)
# 3 input
imageInput = tf.placeholder(tf.float32,[None,784]) # 輸入圖片為28*28=784維,圖片個數為None 
labeInput = tf.placeholder(tf.float32,[None,10]) # 10表示標簽
# 4 data reshape 數據維度的調整
# [None,784]->M*28*28*1  2D->4D  28*28 wh 1 channel 
imageInputReshape = tf.reshape(imageInput,[-1,28,28,1])
# 5 實現卷積運算 w0 : 卷積內核 5*5 out:32  in:1 
w0 = tf.Variable(tf.truncated_normal([5,5,1,32],stddev = 0.1))#w0為權重矩陣,作為卷積的內核來使用,卷積核大小為5*5,輸出為32維 輸入為1維
b0 = tf.Variable(tf.constant(0.1,shape=[32]))#偏移矩陣一般放在卷積運算之后來進行相加,故相加的時候改變的只是最后一個維度,所以必須讓偏移矩陣和權重矩陣的最后一個維度保持一致,即32維
# 6 layer1:激勵函數+卷積運算
# imageInputReshape : M*28*28*1  w0:5,5,1,32  
layer1 = tf.nn.relu(tf.nn.conv2d(imageInputReshape,w0,strides=[1,1,1,1],padding='SAME')+b0)#卷積運算
# M*28*28*32
# pool 采樣 數據量減少很多M*28*28*32 => M*7*7*32
layer1_pool = tf.nn.max_pool(layer1,ksize=[1,4,4,1],strides=[1,4,4,1],padding='SAME')#創建池化層
# [1 2 3 4]->[4]# 7 layer2 out : 激勵函數+乘加運算:  softmax是一個回歸計算函數(激勵函數 + 乘加運算)
# [7*7*32,1024]
#實現第二層layer2輸出層out:(激勵函數+乘加運算)作為另外一個乘加運算的輸入內容,最后的計算結果是一個softmax回歸計算函數
w1 = tf.Variable(tf.truncated_normal([7*7*32,1024],stddev=0.1))#二維
b1 = tf.Variable(tf.constant(0.1,shape=[1024]))
h_reshape = tf.reshape(layer1_pool,[-1,7*7*32])# M*7*7*32 -> N*N1  維度轉換  將四維數據轉換維二維數據
# [N*7*7*32]  [7*7*32,1024] = N*1024
h1 = tf.nn.relu(tf.matmul(h_reshape,w1)+b1)
# 7.1 softMax
w2 = tf.Variable(tf.truncated_normal([1024,10],stddev=0.1))
b2 = tf.Variable(tf.constant(0.1,shape=[10]))
pred = tf.nn.softmax(tf.matmul(h1,w2)+b2)# N*1024  1024*10 = N*10   最后的輸出結果維N*10  N表示N張圖片,10表示0-9這10個維度上分布的概率
# N*10( 概率 )N1【0.1 0.2 0.4 0.1 0.2 。。。】0.1表示0出現的概率 0.2表示1出現的概率 0.4表示2出現的概率依此類推
# label。        【0 0 0 0 1 0 0 0。。。】
loss0 = labeInput*tf.log(pred)
loss1 = 0
# 7.2 
for m in range(0,500):#測試訓練時每次500張for n in range(0,10):#label標簽總共有10個維度,需要把這10個維度中的內容進行累加loss1 = loss1 - loss0[m,n]
loss = loss1/500#總共有500組數據# 8 train訓練過程,讓當前的誤差盡可能的減小
train = tf.train.GradientDescentOptimizer(0.01).minimize(loss)#梯度下降法,每次下降0.01,目標是盡可能的縮小當前loss的步長
# 9 run
with tf.Session() as sess:sess.run(tf.global_variables_initializer())#完成所以圖片的初始for i in range(100):images,labels = mnist.train.next_batch(500)#分別把圖片和標簽讀取出來,每次讀取500張圖片進行訓練sess.run(train,feed_dict={imageInput:images,labeInput:labels})#完成pred的獲取pred_test = sess.run(pred,feed_dict={imageInput:mnist.test.images,labeInput:labels})#獲得最終的預測結果,是10維的;與label標簽都一樣也都是10維的acc = tf.equal(tf.arg_max(pred_test,1),tf.arg_max(mnist.test.labels,1))#比較pred和label最大值是否相等acc_float = tf.reduce_mean(tf.cast(acc,tf.float32))#轉換均值為float浮點類型acc_result = sess.run(acc_float,feed_dict={imageInput:mnist.test.images,labeInput:mnist.test.labels})print(acc_result)

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378515.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】左值與右值

出處:http://www.embedded.com/electronics-blogs/programming-pointers/4023341/Lvalues-and-Rvalues C and C enforce subtle differences on the expressions to the left and right of the assignment operator If youve been programming in either C or C for…

Opencv將處理后的視頻保存出現的問題

問題描述: 代碼運行過程中,imshow出來的每幀的效果圖是正確的,但是按照網上的方法保存下來卻是0kb,打開不了。 參考的網上的一些方法,均是失敗的,具體原因我也不清楚: 1、例如我這樣設置&#x…

Java Number shortValue()方法與示例

Number類shortValue()方法 (Number Class shortValue() method) shortValue() method is available in java.lang package. shortValue()方法在java.lang包中可用。 shortValue() method is used to return the value denoted by this Number object converted to type short (…

MATLAB可以打開gms文件嗎,gms文件擴展名,gms文件怎么打開?

.gms文件類型:Gesture and Motion Signal File擴展名為.gms的文件是一個數據文件。文件說明:Low-level, binary, minimal but generic format used to organize and store Gesture and Motion Signals in a flexible and optimized way; gesture-related…

黑白圖片顏色反轉并保存

將圖像的黑白顏色反轉并保存 import cv2 # opencv讀取圖像 img cv2.imread(rE:\Python-workspace\OpenCV\OpenCV/YY.png, 1) cv2.imshow(img, img) img_shape img.shape # 圖像大小(565, 650, 3) print(img_shape) h img_shape[0] w img_shape[1] # 彩色圖像轉換為灰度圖…

家貓WEB系統

現在只放源碼在些.為它寫應用很簡單有空整理文檔演示地址:jiamaocode.com/os/ 源碼:http://jiamaocode.com/ProCts/2011/04/14/1918/1918.html轉載于:https://www.cnblogs.com/jiamao/archive/2011/04/16/2018339.html

C# DataRow數組轉換為DataTable

public DataTable ToDataTable(DataRow[] rows) { if (rows null || rows.Length 0) return null; DataTable tmp rows[0].Table.Clone(); // 復制DataRow的表結構 foreach (DataRow row in rows) tmp.Rows.Add(row); // 將DataRow添加…

plesk 運行不了php,如何在Plesk中使用composer(使用其他版本的PHP運行Composer)

對于基于Plesk的服務器, composer的默認安裝將使用系統安裝的PHP版本, 而不使用Plesk所安裝的任何版本。盡管Composer至少需要PHP 5.3.2, 但是當你嘗試在需要特定版本PHP的項目中安裝依賴項時, 就會出現問題。例如, 如果你有一個至少需要PHP 7.2的項目, 并且系統的默認PHP安裝是…

Java Calendar hashCode()方法與示例

日歷類hashCode()方法 (Calendar Class hashCode() method) hashCode() method is available in java.util package. hashCode()方法在java.util包中可用。 hashCode() method is used to retrieve the hash code value of this Calendar. hashCode()方法用于檢索此Calendar的哈…

Error: Flash Download failed - Target DLL has been cancelled

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 由于換了新電腦,keil重裝了下,然而之前的MCU的支持包沒有安裝,以及一些其他的問題,導致可以編譯但是不能將程序燒錄到單片…

設計一個較為合理的實驗方案來研究芳綸纖維的染色熱力學性能

請你設計一個較為合理的實驗方案來研究芳綸纖維的染色熱力學性能?包括吸附等溫線、親和力、染色熱和染色熵的測定,并指出實驗中應注意哪些事項來減少實驗誤差? 標準答案: 染色熱力學理論研究染色平衡問題。研究染色熱力學性能:首先研究選擇適宜的染料 吸附等溫線類型測定…

我也談委托與事件

雖然在博客園里面已經有很多關于C#委托和事件的文章,但是為了自己在學習的過程中,加深對委托的理解,我還是決定寫一下自己的心得體會。以備他日在回來復習。委托(delegate)是一個類,但是這個類在聲明的時候…

php錯誤攔截機制,php攔截異常怎么寫-PHP問題

php攔截異常可以通過PHP的錯誤、異常機制及其內建數set_exception_handler、set_error_handler、register_shutdown_function 來寫。首先我們定義錯誤攔截類,該類用于將錯誤、異常攔截下來,用我們自己定義的處理方式進行處理,該類放在文件名為…

智能車復工日記【4】:關于圖像的上下位機的調整問題總結

系列文章 【智能車Code review】—曲率計算、最小二乘法擬合 【智能車Code review】——坡道圖像與控制處理 【智能車Code review】——拐點的尋找 【智能車Code review】——小S與中S道路判斷 【智能車Code review】——環島的判定與補線操作 智能車復工日記【1】——菜單索引…

設計合理的實驗方案來研究陽離子改性棉織物與未改性棉的染色動力學性能

染色動力學性能研究染色的什么問題?設計合理的實驗方案來研究陽離子改性棉織物與未改性棉的染色動力學性能?并指出如何計算反映染色動力學的主要參數? 標準答案: 染色動力學研究染色速率問題。 為了研究陽離子改性棉纖維及未改性棉纖維對活性染料染色動力學性能,首先要測…

Java ArrayList toArray()方法及示例

ArrayList類的toArray()方法 (ArrayList Class toArray() method) Syntax: 句法: public Object[] toArray();public T[] toArray(T[] elements);toArray() method is available in java.util package. toArray()方法在java.util包中可用。 toArray() method is us…

小練習:新聞網站、SNS網站圖片播放器jQuery版

新聞網站和sns網站常見的圖片瀏覽器。直接看效果吧,效果預覽:http://u.vps168.com.cn/cos2004/photoView/, ie7、ie8、ff預覽正常,ie6和chrome預覽有一點小問題,研究中 作者:綠色花園 出處:htt…

SQL SERVER的鎖機制(四)——概述(各種事務隔離級別發生的影響)

SQL SERVER的鎖機制(一)——概述(鎖的種類與范圍) SQL SERVER的鎖機制(二)——概述(鎖的兼容性與可以鎖定的資源) 本文上接SQL SERVER的鎖機制(三)——概述&a…

如何測定拼色染液中,各染料在不同染色時間時,染液中殘留染料量及織物上吸附上染的染料量?

如何測定拼色染液中,各染料在不同染色時間時,染液中殘留染料量及織物上吸附上染的染料量? 標準答案: 通常依據各染料對特定波長光的吸光度具有加和性;吸光度值符合朗伯比爾定律,吸光度與濃度成正比;吸光度值分光光度計可以讀出;通過聯立方程,可以求出拼色各染料在染液中…

oracle云數據庫 免費的嗎,使用免費的Oracle云服務-創建ATP數據庫

前面我們講了在Oracle的云主機安裝數據庫,雖然現在安裝數據庫已經很簡單了,但是真正要在生產環境使用,還是需要進行很多配置和優化的,這通常需要專業的人員。而ATP(自治事務性數據庫服務)正是Oracle云提供的非常強大的數據庫云服務…