生活随笔
收集整理的這篇文章主要介紹了
卷积神经网络原理及实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
卷積神經(jīng)網(wǎng)絡(luò)的主要結(jié)構(gòu)是卷積層+池化層,該算法在圖像上有較好的效果
小知識:圖片有彩色圖片和黑白圖片,顏色都是有RGB三種顏色調(diào)和而成,所以彩色圖片有三層通道,黑白圖片有一層通道
咱們拿黑白圖片說事:
簡單來講一個圖片可以看作是一個矩陣24*24的,來一個卷積核( 這個是自己指定大小數(shù)值隨機的小矩陣,假如2*2),與前面那個24*24的相乘,先與24*24左上角2*2的小矩陣相乘,得出一個數(shù)值作為這個過程結(jié)果矩陣的左上角數(shù)值,之后卷積和往右移動(移動的不長stride自己設(shè)置一般設(shè)置1或2),不斷重復(fù)之間操作(卷積核小矩陣從圖片的左上角一直滑動到右下角),這個過程叫做一次卷積過程,這個過程得到的結(jié)果是一個矩陣,為了降低維度,采用池化操作,一般采用均值池化或最大池化,假如你采取2*2平均池化,前面的卷積結(jié)果為4*4 ,2*2池化的意思就是在4*4的左上角2*2當(dāng)中取均值當(dāng)作結(jié)果的左上角結(jié)果,右上角2*2矩陣的均值作為結(jié)果的右上角值,左下角和右下角同理,如果采用最大值池化就是取最大值不是取均值;假如池化得到的結(jié)果是2*2,之后用tf.reshape給它變成flat,就是變成1維的( 原來是2*2,這回編程1*4),之后作為全連接神經(jīng)網(wǎng)絡(luò)的輸入得到分類結(jié)果
這里面主要學(xué)習(xí)的參數(shù)就是卷積核,不斷通過反向傳遞學(xué)習(xí)卷積核里面參數(shù),知道結(jié)果收斂或達到實現(xiàn)設(shè)定好的閾值,上面說的只是進行一個卷積池化操作而已,還可以在后面再添加卷積池化操作,之后連接全連接層
比較詳細的解釋可以參考帖子:
https://blog.csdn.net/laingliang/article/details/53073591
https://blog.csdn.net/laingliang/article/details/53073591
https://blog.csdn.net/qq_33414271/article/details/79337141
代碼:
#encoding='utf-8'????"""?????????Description:以cifar10_input數(shù)據(jù)為例,?????????cifar數(shù)據(jù)和代碼下載地址:git?clone?https://github.com/tensorflow/model.git?????????代碼下載/model/tutorials/image/CIFAR10文件夾即是操作區(qū)域,建一個.py文件?????????.py文件里面代碼寫上:?????????#encoding='utf-8'?????????import?cifar10?????????cifar10.maybe_download_and_extract()?????????運行文件,即可獲取數(shù)據(jù)?"""????import?cifar10_input??import?tensorflow?as?tf??import?numpy?as?np????batch_size?=?128??data_dir?=?'/tmp/cifar10_data/cifar-10-batches-bin'??print("begin")????images_train,labels_train?=?cifar10_input.inputs(eval_data?=?False,???????????????????????????????????????????????????data_dir?=?data_dir,???????????????????????????????????????????????????batch_size?=?batch_size)??images_test,labels_test?=?cifar10_input.inputs(eval_data??=?True,?????????????????????????????????????????????????data_dir?=?data_dir,?????????????????????????????????????????????????batch_size?=?batch_size)??print("begin?data")????def?weight_variable(shape):??????initial?=?tf.truncated_normal(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):??????return?tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')????def?max_pool_2x2(x):??????return?tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')????def?avg_pool_6x6(x):??????return?tf.nn.avg_pool(x,ksize=[1,6,6,1],strides=[1,6,6,1],padding='SAME')????x?=?tf.placeholder(tf.float32,[None,24,24,3])??y?=?tf.placeholder(tf.float32,[None,10])????w_conv1?=?weight_variable([5,5,3,64])??b_conv1?=?bias_variable([64])????x_image?=?tf.reshape(x,[-1,24,24,3])????h_pool1?=?max_pool_2x2(tf.nn.relu(conv2d(x_image,w_conv1))+b_conv1)????w_conv2?=?weight_variable([5,5,64,64])??b_conv2?=?bias_variable([64])????h_pool2?=?max_pool_2x2(tf.nn.relu(conv2d(h_pool1,w_conv2))+b_conv2)????w_conv3?=?weight_variable([5,5,64,10])??b_conv3?=?bias_variable([10])????h_conv3?=?max_pool_2x2(tf.nn.relu(conv2d(h_pool2,w_conv3))+b_conv3)????h_pool3?=?avg_pool_6x6(h_conv3)??h_pool3_flat?=?tf.reshape(h_pool3,[-1,10])??y_conv?=?tf.nn.softmax(h_pool3_flat)????cross_entropy?=?-tf.reduce_sum(y*tf.log(y_conv))??train_step?=?tf.trainable_variables.AdamOptimizer(1e-4).minimize(cross_entropy)????correct_prediction?=?tf.equal(tf.argmax(y_conv,1),tf.argmax(y,1))??accuracy?=?tf.reduce_mean(tf.cast(correct_prediction,"float"))????sess?=?tf.Session()??sess.run(tf.global_variables_initializer())??tf.train.start_queue_runners(sess=sess)????for?i?in?range(15000):??????image_batch,label_batch?=?sess.run([images_train,labels_train])??????label_b?=?np.eye(10,dtype=float)[label_batch]????????train_step.run(feed_dict={x:image_batch,y:label_b},session=sess)????????if?i%200?==?0:??????????train_accuracy?=?accuracy.eval(feed_dict={x:image_batch,y:label_b},session=sess)????????print("step?%d,training?accuracy?%g"%(i,train_accuracy))??
總結(jié)
以上是生活随笔為你收集整理的卷积神经网络原理及实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。