卷積層:
ws=tf.get_variable('w',[5,5,3,16],initializer=tf.truncated_normal_initializer(stddev=0.1))bs=tf.get_variable('b',[16],initializer=tf.constant_initializer(0.1))conv=tf.nn.conv2d(input,ws,strides=[1,1,1,1],padding='SAME')b=tf.nn.bias_add(conv,bs)now_conv=tfnn.relu(b)tf.get_variable函數有四個參數,第一維為名字,第二維為變數維度(前兩維為卷積核尺寸,第三維為層的深度,第四維為卷積核深度),第三維是變數的初始化方法,主要有以下幾種:
tf.constant_initializer:常量初始化函數
tf.random_normal_initializer:常態分佈
tf.truncated_normal_initializer:截取的常態分佈
tf.random_uniform_initializer:均勻分布
tf.zeros_initializer:全部是0
tf.ones_initializer:全是1
tf.uniform_unit_scaling_initializer:滿足均勻分布,但不影響輸出數量級的隨機值
tf.nn.conv2d函數有四個參數,第一維為輸入映像,第二維為卷積層權值,第三維為不同維度步長(在CNN中,第一維、第四維固定為1),第四維填充方式(SAME表示全0填充,VALID為不填充)。
層的深度:例如一個輸入映像是28*28*3,其中3代表深度,即為(R,G,B)
卷積核的深度:我的理解就是卷積核的個數(不知道對不對)
當然,我們有更簡單的方法實現一個卷積層,代碼如下:
now_conv=slim.conv2d(input,16,[3,3])
slim.conv2d函數有三個必填參數,第一維為輸入映像,第二維為卷積核的深度,第三維為卷積核的尺寸。
池化層(採樣層):
p=tf.nn.max_pool(now_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME']
TensorFlow提供兩種池化函數,分別是max_pool和avg_pool,前者為最大值池化,後者為均值池化。