1. 程式人生 > >續(利用tensorflow實現簡單的卷積神經網路-對程式碼中相關函式介紹)——遷移學習小記(三)

續(利用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