国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用tensorflow搭建CNN的方法

2020-02-22 23:21:00
字體:
來源:轉載
供稿:網友

CNN(Convolutional Neural Networks) 卷積神經網絡簡單講就是把一個圖片的數據傳遞給CNN,原涂層是由RGB組成,然后CNN把它的厚度加厚,長寬變小,每做一層都這樣被拉長,最后形成一個分類器

在 CNN 中有幾個重要的概念:

    stride padding pooling

stride,就是每跨多少步抽取信息。每一塊抽取一部分信息,長寬就縮減,但是厚度增加。抽取的各個小塊兒,再把它們合并起來,就變成一個壓縮后的立方體。

padding,抽取的方式有兩種,一種是抽取后的長和寬縮減,另一種是抽取后的長和寬和原來的一樣。

pooling,就是當跨步比較大的時候,它會漏掉一些重要的信息,為了解決這樣的問題,就加上一層叫pooling,事先把這些必要的信息存儲起來,然后再變成壓縮后的層

利用tensorflow搭建CNN,也就是卷積神經網絡是一件很簡單的事情,筆者按照官方教程中使用MNIST手寫數字識別為例展開代碼,整個程序也基本與官方例程一致,不過在比較容易迷惑的地方加入了注釋,有一定的機器學習或者卷積神經網絡制式的人都應該可以迅速領會到代碼的含義。

#encoding=utf-8 import tensorflow as tf  import numpy as np  from tensorflow.examples.tutorials.mnist import input_data  mnist = input_data.read_data_sets('MNIST_data', one_hot=True)  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') # strides第0位和第3為一定為1,剩下的是卷積的橫向和縱向步長 def max_pool_2x2(x):   return tf.nn.max_pool(x,ksize = [1,2,2,1],strides=[1,2,2,1],padding='SAME')# 參數同上,ksize是池化塊的大小  x = tf.placeholder("float", shape=[None, 784]) y_ = tf.placeholder("float", shape=[None, 10])  # 圖像轉化為一個四維張量,第一個參數代表樣本數量,-1表示不定,第二三參數代表圖像尺寸,最后一個參數代表圖像通道數 x_image = tf.reshape(x,[-1,28,28,1])  # 第一層卷積加池化 w_conv1 = weight_variable([5,5,1,32]) # 第一二參數值得卷積核尺寸大小,即patch,第三個參數是圖像通道數,第四個參數是卷積核的數目,代表會出現多少個卷積特征 b_conv1 = bias_variable([32])  h_conv1 = tf.nn.relu(conv2d(x_image,w_conv1)+b_conv1) h_pool1 = max_pool_2x2(h_conv1)  # 第二層卷積加池化  w_conv2 = weight_variable([5,5,32,64]) # 多通道卷積,卷積出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)  # 原圖像尺寸28*28,第一輪圖像縮小為14*14,共有32張,第二輪后圖像縮小為7*7,共有64張  w_fc1 = weight_variable([7*7*64,1024]) b_fc1 = bias_variable([1024])  h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64]) # 展開,第一個參數為樣本數量,-1未知 f_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(f_fc1,keep_prob)  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)  cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv)) # 定義交叉熵為loss函數 train_step = tf.train.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.InteractiveSession() sess.run(tf.initialize_all_variables()) for i in range(2000):  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 %g"%(i, train_accuracy)  train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})  print "test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images[0:500], y_: mnist.test.labels[0:500], keep_prob: 1.0})             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 道孚县| 隆化县| 祁东县| 全州县| 桂阳县| 綦江县| 襄垣县| 栾城县| 通化市| 成安县| 应用必备| 凤城市| 滨海县| 银川市| 邵武市| 宜兰市| 黎川县| 高阳县| 瑞金市| 安多县| 杭锦旗| 九江县| 阿勒泰市| 宿迁市| 瓦房店市| 景泰县| 崇礼县| 武山县| 卫辉市| 凤台县| 漠河县| 东乡族自治县| 绿春县| 尉氏县| 民乐县| 维西| 尤溪县| 九江市| 石家庄市| 无锡市| 黑龙江省|