TensorFlow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)
本文實(shí)例為大家分享了TensorFlow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的具體代碼,供大家參考,具體內(nèi)容如下
代碼(源代碼都有詳細(xì)的注釋)和數(shù)據(jù)集可以在github下載:
# -*- coding: utf-8 -*- '''卷積神經(jīng)網(wǎng)絡(luò)測(cè)試MNIST數(shù)據(jù)''' #########導(dǎo)入MNIST數(shù)據(jù)######## from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) # 創(chuàng)建默認(rèn)InteractiveSession sess = tf.InteractiveSession() #########卷積網(wǎng)絡(luò)會(huì)有很多的權(quán)重和偏置需要?jiǎng)?chuàng)建,先定義好初始化函數(shù)以便復(fù)用######## # 給權(quán)重制造一些隨機(jī)噪聲打破完全對(duì)稱(比如截?cái)嗟恼龖B(tài)分布噪聲,標(biāo)準(zhǔn)差設(shè)為0.1) def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial) # 因?yàn)槲覀円褂肦eLU,也給偏置增加一些小的正值(0.1)用來避免死亡節(jié)點(diǎn)(dead neurons) def bias_variable(shape): initial = tf.constant(0.1, shape=shape) return tf.Variable(initial) ########卷積層、池化層接下來重復(fù)使用的,分別定義創(chuàng)建函數(shù)######## # tf.nn.conv2d是TensorFlow中的2維卷積函數(shù) def conv2d(x, W): return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') # 使用2*2的最大池化 def max_pool_2x2(x): return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') ########正式設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò)之前先定義placeholder######## # x是特征,y_是真實(shí)label。將圖片數(shù)據(jù)從1D轉(zhuǎn)為2D。使用tensor的變形函數(shù)tf.reshape x = tf.placeholder(tf.float32, shape=[None, 784]) y_ = tf.placeholder(tf.float32, shape=[None, 10]) x_image = tf.reshape(x,[-1,28,28,1]) ########設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò)######## # 第一層卷積 # 卷積核尺寸為5*5,1個(gè)顏色通道,32個(gè)不同的卷積核 W_conv1 = weight_variable([5, 5, 1, 32]) # 用conv2d函數(shù)進(jìn)行卷積操作,加上偏置 b_conv1 = bias_variable([32]) # 把x_image和權(quán)值向量進(jìn)行卷積,加上偏置項(xiàng),然后應(yīng)用ReLU激活函數(shù), h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # 對(duì)卷積的輸出結(jié)果進(jìn)行池化操作 h_pool1 = max_pool_2x2(h_conv1) # 第二層卷積(和第一層大致相同,卷積核為64,這一層卷積會(huì)提取64種特征) W_conv2 = weight_variable([5, 5, 32, 64]) b_conv2 = bias_variable([64]) h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) h_pool2 = max_pool_2x2(h_conv2) # 全連接層。隱含節(jié)點(diǎn)數(shù)1024。使用ReLU激活函數(shù) W_fc1 = weight_variable([7 * 7 * 64, 1024]) b_fc1 = bias_variable([1024]) h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) # 為了防止過擬合,在輸出層之前加Dropout層 keep_prob = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # 輸出層。添加一個(gè)softmax層,就像softmax regression一樣。得到概率輸出。 W_fc2 = weight_variable([1024, 10]) b_fc2 = bias_variable([10]) y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) ########模型訓(xùn)練設(shè)置######## # 定義loss function為cross entropy,優(yōu)化器使用Adam,并給予一個(gè)比較小的學(xué)習(xí)速率1e-4 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y_conv),reduction_indices=[1])) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) # 定義評(píng)測(cè)準(zhǔn)確率的操作 correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) ########開始訓(xùn)練過程######## # 初始化所有參數(shù) tf.global_variables_initializer().run() # 訓(xùn)練(設(shè)置訓(xùn)練時(shí)Dropout的kepp_prob比率為0.5。mini-batch為50,進(jìn)行2000次迭代訓(xùn)練,參與訓(xùn)練樣本5萬) # 其中每進(jìn)行100次訓(xùn)練,對(duì)準(zhǔn)確率進(jìn)行一次評(píng)測(cè)keep_prob設(shè)置為1,用以實(shí)時(shí)監(jiān)測(cè)模型的性能 for i in range(1000): batch = mnist.train.next_batch(50) if i%100 == 0: train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) print "-->step %d, training accuracy %.4f"%(i, train_accuracy) train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) # 全部訓(xùn)練完成之后,在最終測(cè)試集上進(jìn)行全面測(cè)試,得到整體的分類準(zhǔn)確率 print "卷積神經(jīng)網(wǎng)絡(luò)在MNIST數(shù)據(jù)集正確率: %g"%accuracy.eval(feed_dict={ x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python3利用Dlib19.7實(shí)現(xiàn)攝像頭人臉識(shí)別的方法
- python3+dlib實(shí)現(xiàn)人臉識(shí)別和情緒分析
- python實(shí)現(xiàn)人臉識(shí)別經(jīng)典算法(一) 特征臉法
- Python3結(jié)合Dlib實(shí)現(xiàn)人臉識(shí)別和剪切
- Python人臉識(shí)別初探
- Tensorflow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的詳細(xì)代碼
- Tensorflow實(shí)現(xiàn)AlexNet卷積神經(jīng)網(wǎng)絡(luò)及運(yùn)算時(shí)間評(píng)測(cè)
- Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例進(jìn)階
- Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
- 基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識(shí)別
相關(guān)文章
pytorch如何獲得模型的計(jì)算量和參數(shù)量
這篇文章主要介紹了pytorch如何獲得模型的計(jì)算量和參數(shù)量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05淺談PyTorch中in-place operation的含義
這篇文章主要介紹了淺談PyTorch中in-place operation的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python實(shí)現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解
這篇文章主要介紹了Python實(shí)現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解,zip() 函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象,這樣做的好處是節(jié)約了不少的內(nèi)存,需要的朋友可以參考下2023-08-08Python檢測(cè)一個(gè)對(duì)象是否為字符串類的方法
這篇文章主要介紹了Python檢測(cè)一個(gè)對(duì)象是否為字符串類的方法,即檢測(cè)是一個(gè)對(duì)象是否是字符串對(duì)象,本文還講解了一個(gè)有趣的判斷方法,需要的朋友可以參考下2015-05-05使用 Python 快速實(shí)現(xiàn) HTTP 和 FTP 服務(wù)器的方法
這篇文章主要介紹了使用 Python 快速實(shí)現(xiàn) HTTP 和 FTP 服務(wù)器 的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07