卷積池化操作輸出的尺寸大小

2021-09-25 12:26:38 字數 3265 閱讀 4203

**演示

# -*- 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...