日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

卷积神经网络原理及实现

發(fā)布時間:2025/4/5 卷积神经网络 266 豆豆
生活随笔 收集整理的這篇文章主要介紹了 卷积神经网络原理及实现 小編覺得挺不錯的,現(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)容還不錯,歡迎將生活随笔推薦給好友。