CNN/RNN TF1.4

###CNN###
import
tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data'''這些是tf1.*版本,現在我已經升級到2.0版本,上方數據集都用不了了...''''''黑白圖片,因此這里使用的是2D'''mnist=input_data.read_data_sets("MNIST_data",one_hot=True)batch_size=100 n_batch=mnist.train.num_examples//batch_sizetf=tf.compat.v1#初始化權值(這樣初始化真的很重要) def weight_variable(shape):initial=tf.truncated_normal(shape=shape,stddev=0.1)#生成一個截斷的正態分布return tf.Variable(initial)#初始化偏置值 def bias_variable(shape):initial=tf.constant(0.1,shape=shape)return tf.Variable(initial)#卷積層 def conv2d(x,W):#x:輸入 【batch,in_height,in_width,in_channels(通道數)】#W:濾波器#strides:步長#padding:個人選擇:SAME/VALIDreturn tf.nn.conv2d(x,W,strides=[1,1,1,1],padding="SAME")#池化層 def max_pool_2x2(x):#ksize=[1 x y 1] #步長2return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')#用max_pool2d也是可以的 x=tf.placeholder(tf.float32,[None,784]) y=tf.placeholder(tf.float32,[None,10])#改變x的格式轉為4D的向量[batch,in_height,in_width,in_channels] x_image=tf.reshape(x,[-1,28,28,1])#-1還是那個意思,就是輸入的個數不確定,讓它自行計算是多少#初始化第一個卷積層的權值和偏置 W_conv1=weight_variable([5,5,1,32])#5*5采樣窗口,32個卷積核從1個平面抽取特征(從一個平面提取32個特征平面)【就是生成1D的32個卷積核,分別進行卷積,從而1個平面得到32個卷積特征平面】 b_conv1=bias_variable([32])#給這個卷積核設置一個偏置值#把x_image和權值向量進行卷積,再加上偏置值,然后應用relu激活函數 h_cov1=tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)#利用平面(2D)卷積進行卷積,并加一個偏置,得到批次*32個平面的 h_pool1=max_pool_2x2(h_cov1)#進行max-pooling#初始化第二個卷積層的權值和偏置 W_conv2=weight_variable([5,5,32,64])#5*5采樣窗口,64個卷積核從32個平面抽取特征(從32個平面提取64個特征平面)【生成32D的64個卷積核,分別進行卷積,從而得到1個包含64個卷積平面】 b_conv2=bias_variable([64])#么個卷積核設置一個偏置值#把h_pool1和權值向量進行卷積,再加上偏置值,然后應用relu激活函數 h_cov2=tf.nn.relu(conv2d(h_pool1,W_conv2)+b_conv2) h_pool2=max_pool_2x2(h_cov2)#進行max-pooling#28*28的圖片第一次卷積后還是28*28,第一次初花后變成14*14 #第二次卷積后14*14,第二次池化后變成7*7 #上方操作完后的得到64張7*7的平面'''下方就是正常的神經網絡(全連接)'''#初始化第一個全連接層的權值 W_fc1=weight_variable([7*7*64,1024])#上一層有7*7*64個神經元,全連接層有1024個神經元 b_cf1=bias_variable([1,1024])#將池化層2的輸出扁平化為1維 h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])#100,7*7*64 #求第一個全連接層的輸出 h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1)+b_cf1)#keep_prob用來表示神經元的輸出概率 keep_prob=tf.placeholder(tf.float32) h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)#初始化第二個全連接層 W_fc2=weight_variable([1024,10]) b_cf2=bias_variable([1,10])#計算輸出 prediction=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_cf2)#交叉熵代價函數 cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction)) #優化器 train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)#結果存放在一個布爾列表中 correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))acc=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in range(21):for batch in range(n_batch):batch_x,batch_y=mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_x,y:batch_y,keep_prob:0.7})accuracy=sess.run(acc,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})print(""+str(i+1)+"次迭代準確率為:"+str(accuracy))

?

###RNN###
import
tensorflow as tf from tensorflow.examples.tutorials.mnist import input_datamnist=input_data.read_data_sets("MNIST_data",one_hot=True)tf=tf.compat.v1#輸入圖片是28*28 n_input=28#輸入一行,一行有28個數據 max_time=28#一共28行 lstm_size=100#隱藏單元 n_classes=10#10個分類 batch_size=50#m每個批次50個樣本 n_batch=mnist.train.num_examples//batch_size#一共有多少個批次 x=tf.placeholder(tf.float32,[None,784]) y=tf.placeholder(tf.float32,[None,10])'''下方權重是隱藏層和輸出層之間的權重和偏置''' #初始化權值 weights=tf.Variable(tf.truncated_normal([lstm_size,n_classes],stddev=0.1)) #初始化偏置值 biases=tf.Variable(tf.constant(0.1,shape=[1,n_classes]))#定義RNN網絡 def RNN(x,weights,biases):#inputs=[batch_size,max_time,n_input]>>[batch_size,in_height,in_width]inputs=tf.reshape(x,[-1,max_time,n_input])#定義LSTM基本CELLlstm_Cell=tf.nn.rnn_cell.BasicLSTMCell(lstm_size)#每個隱藏層中都會有一個cell#final_state[0]是cell_state#final_state[1]是hidden_state 由34行可見該形狀為 ?*100(隱藏單元個數) 由返回值prediction可知results它與y形狀相同(50,10) 所以他的形狀為50(batch_size)*100(隱藏單元個數)outputs,final_state=tf.nn.dynamic_rnn(lstm_Cell,inputs,dtype=tf.float32)results=tf.nn.softmax(tf.matmul(final_state[1],weights)+biases)#經過softmax轉化為概率顯示return results#計算RNN返回結果 prediction=RNN(x,weights,biases) #損失函數 cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y)) #使用Adam優化器 train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))init=tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)for i in range(21):for j in range(n_batch):batch_x,batch_y=mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_x,y:batch_y})acc=sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})print(""+str(i+1)+"次迭代準確率為:"+str(acc))

?

轉載于:https://www.cnblogs.com/ningxinjie/p/11412665.html

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

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

相關文章

Java-類與對象

Java,從一開始學習這門技術,我們就被注入了一個概念——“Java是一門面向對象編程語言。”是的,Java之所以簡單而具有優勢,就是因為面向對象所帶來的方便。這種方式免去了C 中反復而難以理解的指針和多繼承,“可以讓程…

Hibernate學習筆記(一)

####1.1Hibernate框架的學習路線?第一天:Hibernate的入門(Hibernate的環境搭建、Hibernate的API、Hibernate的CRUD)?第二天:Hibernate的一級緩存、其他的API?第三天:Hibernate的一對多配置、Hibernate的多對多的配置…

Java-進階:Java-File--IO—1

#目錄 一、File 類 二、IO流 三、字節輸出流 四、字節輸入流 五、字節流文件復制 六、字符輸出流 七、字符輸入流 八、字符流復制文本文件 ##一、File 類 ###1. 概述 文件 和 目錄路徑名 的抽象表達形式 Java中把文件或者目錄(文件夾)都封裝成 File對象…

北理工爬蟲課程學習記錄

Requests post方法如果提交字典會被存到form下,如果直接提交字符串,會被存到data下 put方法和post類似,只不過他會覆蓋原始數據 ###各個方法的使用### 13個 訪問參數 url修改的字段 //模擬瀏覽器進行訪問 //模擬不同的IP地址對這個網站進行訪…

Java-進階:Java-File--IO—2

目錄 一、轉換流 二、字節緩沖流 三、字符緩沖流 四、序列化流與反序列化流 五、打印流 六、標準輸入、輸出流 七、IO流總結 一、轉換流 1. OutputStreamWriter 類 (1) 概述 java.io.OutputStreamWriter繼承 Writer類;就是一個字符輸出流…

Hibernate學習筆記(二)

Hibernate概述: 什么是Hibernate:是一個持久層的ORM的框架 什么是ORM: ORM:對象關系映射,指的是將一個java中的對象與關系型數據庫中的表建立一種映射關系,從而操作對象就可以完成數據庫的相關操作為什么學習Hibernate 簡化JDBC的開發 性能很好Hibernate…

Java-進階:多線程1

目錄 一、概述 二、Thread 類 三、創建線程:繼承 Thread 類 四、創建線程:實現 Runnable 接口 五、線程優先級 六、線程的生命周期 七、同步代碼塊 一、概述 1. 進程和線程 進程:進程指正在運行的程序。線程:線程是進程中的一個…

Struts2學習筆記(一)--入門常見配置

Struts2框架的學習路線 l 第一天:Struts2的概述、Struts2的入門、Struts2常見的配置、Struts2的Action的編寫 l 第二天:Struts2的數據的封裝、結果頁面配置 l 第三天:Struts2的值棧和OGNL表達式 l 第四天:Struts2的標簽庫 Struts2…

Java-進階:多線程2

目錄 一、Lock 接口 二、線程間的通信 三、線程池 四、定時器 Timer 五、多線程和異常 一、Lock 接口 1. 線程鎖 鎖是控制多個線程對共享資源進行訪問的工具。通常,鎖提供了對共享資源的獨占訪問。一次只能有一個線程獲得鎖,對共享資源的所有訪問…

Java周總結1

一、計算機高級編程語言類型: a.編譯型 b.解釋型 Hello.java Java源文件 編譯 Hello.class 字節碼文件 解釋 01101100.... (二進制)機器碼指令 computer…

MMKV集成與原理,先收藏了

標準文檔流 標準文檔流,指的是元素排版布局過程中,元素會默認自動從左往右,從上往下的流式排列方式。前面內容發生了變化,后面的內容位置也會隨著發生變化。 HTML就是一種標準文檔流文件 HTML中的標準文檔流特點通過兩種方式體現…

Java周總結3

撰寫第三周課程總結及實驗報告(一) Java實驗報告 班級 計科一班 學號 20188375 姓名 湯云云 完成時間 評分等級 實驗一 Java開發環境與簡單Java程序 一、 實驗目的 (1) 熟悉JDK開…

MMKV集成與原理,吊打面試官系列!

前言 校招 -1 年 這個階段還屬于成長期,更需要看重的是你的基礎和熱情。對于 JS 基礎,計算機基礎,網絡通信,算法等部分的要求會相對高一些。畢竟這個階段比較難考察你的業務項目中的沉淀,所以只能從基礎部分入手考察。…

CV2攝像頭人臉、人眼、微笑等檢測

import cv2face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)#人臉 eye_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_eye.xml)#人眼 smile_cascadecv2.CascadeClassifier(cv2.data.haarcascades haa…

MMKV集成與原理,成功跳槽阿里!

前言 在初學前端的時候,我們總會遇到一些問題,我們可以在網上看到很多關于前端的這些問題: 你們都是怎么學web前端的? 零基礎,怎么自學好前端? 前端需要學多久,都學哪些知識? 想成為…

第四周課程總結試驗報告(二)

Java實驗報告 實驗二 Java簡單類與對象 一、 實驗目的 (1) 掌握類的定義,熟悉屬性、構造函數、方法的作用,掌握用類作為類型聲明變量和方法返回值; (2) 理解類和對象的區別,掌握構造…

MMKV集成與原理,薪資翻倍

畢業工作一年之后,有了轉行的想法,偶然接觸到程序員這方面,產生了濃厚且強烈的興趣,開始學習前端,成功收割了大廠offer,開始了我的程序員生涯。 在自學過程中有過一些小廠的面試經歷,也在一些小…

Spring入門與常用配置

什么是Spring Spring:SE/EE開發的一站式框架。 一站式框架:有EE開發的每一層解決方案。 WEB層 :SpringMVC Service層 :Spring的Bean管理,Spring聲明式事務 DAO層 :Spring的Jdbc模板,Spring的ORM…

MMKV集成與原理,詳細學習指南

前言 本文主要是javascript和css方面的基礎面試題,適合面試前以及平時復習食用。 基礎知識是前端一面必問的,如果你在基礎知識這一塊翻車了,就算你框架玩的再6,webpack、git、node學習的再好也無濟于事,因為對方就不…

第五周課程總結實驗報告(三)

實驗三 String類的應用 一、實驗目的 (1) 掌握類String類的使用; (2) 學會使用JDK幫助文檔; 二、實驗內容 1.已知字符串:"this is a test of java".按要求執行以下操作:&a…