拾遺 卷積神經網路關於通道數改變

2021-10-02 21:15:23 字數 2554 閱讀 9367

以rgb影象為例。

乙個12*12的畫素圖,對其進行5*5的卷積,最後得到乙個8*8的畫素圖。

rgb影象有3個通道(12*12*3),所以卷積核也要有3個通道(5*5*3),對畫素圖進行卷積後得到的結果是8*8*1而不是8*8*3的影象。最後畫素圖的深度(輸出影象的通道數)取決於卷積核的個數。

如果要得到8*8*256的結果,應該這樣做:用256個5*5*3的卷積核來卷12*12*3的畫素圖。最後得到的結果進行堆疊就是8*8*256的影象。(256個5*5*3的卷積核可以想象成它的輸入通道數為3,而輸出通道數為256,兩者互不影響。)

這裡**補上

import  tensorflow as tf

from tensorflow.keras import layers, optimizers, datasets, sequential

import os

os.environ['tf_cpp_min_log_level']='2'

tf.random.set_seed(2345)

conv_layers = [#主要關注全鏈結層和卷積層

#unit 1

layers.conv2d(64, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),#64 64個核心 padding 輸入和輸出的h,w相同

layers.conv2d(64, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),#32 * 32 * 64

layers.maxpool2d(pool_size=[2, 2], strides=2, padding='same'), #16 * 16 * 64

#unit 2

layers.conv2d(128, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),#64 64個核心 padding 輸入和輸出的h,w相同

layers.conv2d(128, kernel_size=[3, 3], padding="same", activation=tf.nn.relu), #16 * 16 * 128

layers.maxpool2d(pool_size=[2, 2], strides=2, padding='same'),# 8 * 8 * 128

#unit 3

layers.conv2d(256, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),#64 64個核心 padding 輸入和輸出的h,w相同

layers.conv2d(256, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),

layers.maxpool2d(pool_size=[2, 2], strides=2, padding='same'), # 4 * 4 * 256

#unit 4

layers.conv2d(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),#64 64個核心 padding 輸入和輸出的h,w相同

layers.conv2d(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),

layers.maxpool2d(pool_size=[2, 2], strides=2, padding='same'), #2 * 2 * 512

#unit 5

layers.conv2d(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),#64 64個核心 padding 輸入和輸出的h,w相同

layers.conv2d(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),

layers.maxpool2d(pool_size=[2, 2], strides=2, padding='same') #1 * 1 * 512

]def main():

# [b, 32, 32, 3] => [b, 1, 1, 512]

conv_net = sequential(conv_layers)

conv_net.build(input_shape=[none, 32, 32, 3])

x = tf.random.normal([4, 32, 32, 3])

out = conv_net(x)

print(out.shape)

if __name__ == '__main__':

main()

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...

神經網路 卷積神經網路

1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...

網路知識點拾遺

一 各種乙太網的速度與等級名稱 速度網線等級 乙太網 ethernet 10mbps 快速乙太網 fast ethernet 100mbps cat 5 g位元乙太網 gigabit ethernet 1000mbps cat 5e cat 6 二 交叉線與直連線 三 自動分辨網線的交叉或直連線口 ...