續(利用tensorflow實現簡單的卷積神經網路-對程式碼中相關函式介紹)——遷移學習小記(三)
上篇文章對cnn進行了一些介紹,附了完整小例子程式碼,介紹了一部分函式概念,但是對我這樣的新手來說,程式碼中涉及的部分函式還是無法一下子全部理解。於是在本文中將對程式碼中使用的函式繼續進行一一介紹。
具體程式碼見上一篇(二)
一、
#定義輸入的placehoder,x是特徵,y_是真實的label。因為卷積神經網路會用到2D的空間資訊,所以需要把784維資料恢復成28*28結構,使用的是tf.shape函式 x = tf.placeholder(tf.float32, [None, 784]) y_ = tf.placeholder(tf.float32, [None, 10]) x_image = tf.reshape(x, [-1, 28, 28, 1])
1.1 tf.placeholder(dtype,shape=None,name=None)
placeholder,佔位符,在tensoflow中類似於函式引數,執行時必須傳入值。
dtype:資料型別。常用的是tf.float32,tf.float64等數值型別。
shape:資料形狀。預設是None,就是一維值,也可以是多維,比如[2,3],[None,3]表示列是3,行不定。
name:名稱
1.2 tf.reshape(tensor,shape,name=None)
在處理影象時總會遇到輸入影象的維數不符合的情況,此時tensorflow中reshape()就很好的解決了這個問題。
函式的作用是將tensor變換為引數shape形式,其中shape為一個列表形式,特殊的列表可以實現逆序的遍歷,即list(-1)。-1代表的含義是我們不需要親自去指定這一維的大小,函式自動計算,但是列表中只能存在一個-1.
二、
#定義第一個卷積層
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2_2(h_conv1)
2.1 tf.nn.relu()
該函式讓大於0的數保持不變,小於0的數置為0
2.2 tf.nn.max_pool(value,ksize,strides,padding,name=None)
max_pool是CNN中最大值池化操作
value:需要池化的輸入,一般池化曾接在卷積層後面,所以通常輸入是feature map,依然是[batch,height,width,channels]這樣的shape
ksize:池化視窗的大小,取一個四維向量,一般是[1,height,width,1],因為我們不想在batch和channels上做池化,所以這兩個維度設定為1
strides:和卷積類似,視窗在每一個維度上滑動的步長,一般也是[1,stride,stride,1]
padding:和卷積類似,可以取‘VALID' 或者’SAME‘
返回一個Tensor,型別不變,shape仍然是[batch,height,width,channels]這種形式
三、
#定義損失函式和訓練的步驟,用adam優化器最小化損失函式
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)
3.1 reduce_mean(input_tensor,reduction_indices=None,keep_dims=False,name=None)
用於求平均值
input_tensor:帶求值的tensor
reduction_indices:在哪一維上求解
引數(3),(4)可忽略
四、
#計算預測的精確度
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
4.1 tf.argmax(input,axis=None,name=None,dimension=None)
對矩陣按行或者列計算最大值
input:輸入值
axis:可選值0表示按列,1表示按行求最大值
name:名字
4.2 tf.equal(A,B)是對比這兩個矩陣或者向量的相等的元素,如果相等就返回True,否則返回False,返回值的矩陣維度與A相同
4.3 tf.cast(x,dtype,name=None) 型別轉換函式
將x的資料轉化成dtype