import tensorflow as tf
#通過tf.get_variable的方式建立過濾器的權重變數和偏置項變數。卷積層的引數個數只和
#過濾器的尺寸、深度以及當前層節點矩陣的深度有關,所以這裡宣告的引數變數
#是乙個四維矩陣,前面兩個維度代表了過濾器的尺寸,第三個維度代表當前層的深度,
# 第四個維度表示過濾器的深度
filter_weight = tf.get_variable(
'weight', [5, 5, 3, 16], initializer=tf.truncated_normal_initializer(stddev=0.1))
#和卷積層的權重類似,當前層矩陣上不同位置的偏置項也是共享的,所以總共有下一層深度個
# 不同的偏置項。本樣例**中16為過濾器的深度,也是神經網路中下一層節點矩陣的深度
biases = tf.get_variable(
'biases', [16], initializer=tf.constant_initializer(0.1))
#tf.nn.conv2d提供了乙個非常方便的函式來實現卷積層前向傳播演算法。這個函式的第乙個輸入
#為當前層的節點矩陣。注意這個矩陣是乙個四維矩陣,後面三個維度對應乙個節點矩陣,第一
#維對應乙個輸入batch。比如在輸入層,input[0,:,:,:]表示第一張,input[1,:,:,:]表示
#第二張,以此類推。tf.nn.conv2d第二個引數提供了卷積層的權重,第三個引數為不同維度
#上的步長。雖然第三個引數提供的是乙個長度為4的陣列,但是第一維和最後一維的數字要求一定
#是1。因為卷積層的步長只對矩陣的長和寬有效。最後乙個引數是填充(padding)的方法,
#tensorflow中提供same和valid兩種選擇。其中same表示新增全0填充,valid表示不新增。
conv = tf.nn.conv2d(
input, filter_weight, strides=[1, 1, 1, 1], padding='same')
#tf.nn.bias_add提供了乙個方便的函式給每乙個節點加上偏置項。注意這裡不能直接使用加
#法,因為矩陣上不通位置上的節點都需要加上同樣的偏置項。如圖6-13所示,雖然下一層
#神經網路的大小為2*2,但是偏置項只有乙個數(因為深度為1),而2*2矩陣中的每乙個值
#都需要加上這個偏置項。
bias = tf.nn.bias_add(conv, biases)
#將計算結果通過relu啟用函式完成去線性化
actived_conv = tf.nn.relu(bias)
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
卷積神經網路文字輸入 使用卷積神經網路進行文字分類
cnn 是卷積神經網路,通常用於影象領域,並且在影象分類取得非常好的效果。2014 年 yoon kim 在 convolutional neural networks for sentence classification 中將 cnn 的思想應用到文字處理中,後續很多把 convnet 用在 n...