**演示
# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
"""created on tue jul 17 10:03:21 2018
@author: c.h.
"""tf.reset_default_graph()#這一句話非常重要,如果沒有這句話,就會出現重複定義變數的錯誤
x = tf.placeholder(tf.float32, shape=(1, 500, 500, 3))
#分別設定3*3,5*5,7*7三種大小的卷積核
weights1 = tf.get_variable('weights1',shape=[3, 3, 3, 16],dtype=tf.float32,initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
weights2 = tf.get_variable('weights2',shape=[5, 5, 3, 16],dtype=tf.float32,initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
weights3 = tf.get_variable('weights3',shape=[7, 7, 3, 16],dtype=tf.float32,initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
#第一組實驗採用步長為1,填充採用same,然後採用三種不同大小的卷積核來進行實驗,討論卷積核對卷積後影象大小的影響。第一組實驗為其他實驗的對照組
conv1 = tf.nn.conv2d(x, weights1, strides=[1, 1, 1, 1], padding='same')
conv2 = tf.nn.conv2d(x, weights2, strides=[1, 1, 1, 1], padding='same')
conv3 = tf.nn.conv2d(x, weights3, strides=[1, 1, 1, 1], padding='same')
#第二組實驗,控制卷積核的大小為3*3,分別採用1,2,3三種步長,padding方式採用same,討論步長對卷積後影象大小的影響。
conv4 = tf.nn.conv2d(x, weights1, strides=[1, 1, 1, 1], padding='same')
conv5 = tf.nn.conv2d(x, weights1, strides=[1, 2, 2, 1], padding='same')
conv6 = tf.nn.conv2d(x, weights1, strides=[1, 3, 3, 1], padding='same')
#第三組實驗,與第一組實驗對照,選擇和第一組實驗相同的卷積核大小和步長,採用padding的填充方式進行測試。討論不同padding方式對卷積後影象的影響
conv7 = tf.nn.conv2d(x, weights1, strides=[1, 1, 1, 1], padding='valid')
conv8 = tf.nn.conv2d(x, weights2, strides=[1, 1, 1, 1], padding='valid')
conv9 = tf.nn.conv2d(x, weights3, strides=[1, 1, 1, 1], padding='valid')
#池化過程的'valid','same'引數的對照。討論不同引數設定對最大池化過程後影象大小的影響
pool1 = tf.nn.max_pool(x, [1, 3, 3, 1], [1, 3, 3, 1], padding = 'valid')
pool2 = tf.nn.max_pool(x, [1, 3, 3, 1], [1, 3, 3, 1], padding = 'same')
with tf.session() as sess:
a = np.full((1, 500, 500, 3), 2)
sess.run(tf.global_variables_initializer())
conv1= sess.run(conv1,feed_dict=)
conv2= sess.run(conv2,feed_dict=)
conv3= sess.run(conv3,feed_dict=)
conv4= sess.run(conv4,feed_dict=)
conv5= sess.run(conv5,feed_dict=)
conv6= sess.run(conv6,feed_dict=)
conv7= sess.run(conv7,feed_dict=)
conv8= sess.run(conv8,feed_dict=)
conv9= sess.run(conv9,feed_dict=)
pool1= sess.run(pool1,feed_dict=)
pool2= sess.run(pool2,feed_dict=)
print(conv1.shape)
print(conv2.shape)
print(conv3.shape)
print(conv4.shape)
print(conv5.shape)
print(conv6.shape)
print(conv7.shape)
print(conv8.shape)
print(conv9.shape)
print(pool1.shape)
print(pool2.shape)
# 結果輸出
# (1, 500, 500, 16)
# (1, 500, 500, 16)
# (1, 500, 500, 16)
# (1, 500, 500, 16)
# (1, 250, 250, 16)
# (1, 167, 167, 16)
# (1, 498, 498, 16)
# (1, 496, 496, 16)
# (1, 494, 494, 16)
# (1, 166, 166, 3)
# (1, 167, 167, 3)
感受野計算 卷積 池化輸出尺寸計算 卷積引數量計算
目錄 1 卷積後輸出尺寸的大小 1.1卷積引數量計算 2 池化後輸出尺寸大小 3 感受野的計算 鑑於網上資源比較混亂,而且筆試考的多,故作此總結。希望能幫到大家。輸入 l l d 卷積核 大小size f f d,滑動步長stride s,0填充 0 padding p 輸出 l l d 則輸出尺寸...
卷積池化後的大小
比如輸入是28 28的單通道,其輸入shape為 batch size,28,28,1 第一層卷積為32個5 5卷積核,其shape為 5,5,1,32 其步長strides為 1,1,1,1 緊接著是第一層的2 2的max pooling,其形狀為 1,2,2,1 其步長strides為 1,2,...
卷積 池化 反卷積 空洞卷積的輸出大小計算公式
對於卷積經過某層後的特徵圖大小計算方式 h2 h1 k 2p s 1 w2 w1 k 2p s 1 總結 卷積輸出大小 輸入大小 卷積核大小 2 padding 步長 1 所以當stride為1時,當卷積核的大小比padding的兩倍大1時,可以不改變特徵圖的尺寸,只改變通道數。對於池化 h h k...