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)用來(lái)避免死亡節(jié)點(diǎn)(dead neurons)
def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
########卷積層、池化層接下來(lái)重復(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)
# 為了防止過(guò)擬合,在輸出層之前加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))
########開(kāi)始訓(xùn)練過(guò)程########
# 初始化所有參數(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萬(wàn))
# 其中每進(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)典算法(一) 特征臉?lè)?/a>
- 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)文章
Django接收post前端返回的json格式數(shù)據(jù)代碼實(shí)現(xiàn)
這篇文章主要介紹了Django接收post前端返回的json格式數(shù)據(jù)代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境完整圖文教程
這篇文章主要給大家介紹了關(guān)于使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境的相關(guān)資料,我們?cè)谑褂胮ycharm做項(xiàng)目時(shí),最好給每一個(gè)工程都創(chuàng)建一個(gè)虛擬環(huán)境,將對(duì)應(yīng)的安裝包放在該虛擬環(huán)境中,避免項(xiàng)目與項(xiàng)目之間產(chǎn)生關(guān)系或沖突,便于管理,需要的朋友可以參考下2023-09-09
python使用UDP實(shí)現(xiàn)客戶端和服務(wù)器對(duì)話
這篇文章主要為大家介紹了python使用UDP實(shí)現(xiàn)客戶端和服務(wù)器對(duì)話示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Django集成celery發(fā)送異步郵件實(shí)例
今天小編就為大家分享一篇Django集成celery發(fā)送異步郵件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
python使用xlsxwriter實(shí)現(xiàn)有向無(wú)環(huán)圖到Excel的轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了python使用xlsxwriter實(shí)現(xiàn)有向無(wú)環(huán)圖到Excel的轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12

