以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 二 交叉線與直連線 三 自動分辨網線的交叉或直連線口 ...