【小白學(xué)習(xí)keras教程】三、Kears中常見模型層Padding、Conv2D、MaxPooling2D、Flatten
「@Author:Runsen」@
基礎(chǔ)知識
1.Padding
2. FIlter/kernels
3.Pooling
4.Flattening
5.Fully Connected (Dense)
基礎(chǔ)知識
圖像格式數(shù)據(jù)的輸入通常是張量流中的四維數(shù)組
「(數(shù)值、寬度、高度、深度)」
「num_instance:「數(shù)據(jù)實例數(shù)。通常指定為」無」,以適應(yīng)數(shù)據(jù)大小的波動 「寬度」:圖像的寬度 「高度」:圖像的高度 「深度」:圖像的深度。彩色圖像的深度通常為3(RGB為3個通道)。黑白圖像的深度通常為1(只有一個通道)

from matplotlib import pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras import optimizers
from tensorflow.keras.layers import Dense, Activation, Flatten, Conv2D, MaxPooling2D, AveragePooling2D, GlobalMaxPooling2D, ZeroPadding2D, Input
from tensorflow.keras.models import Model
from tensorflow.keras.datasets import cifar10, mnist
from tensorflow.keras.preprocessing import image
(x_train, y_train), _ = cifar10.load_data()
print(x_train[0].shape)
# showing figures
fig = plt.figure(figsize = (10, 10))
for i in range(9):
fig.add_subplot(3, 3, i+1)
plt.imshow(x_train[i])
plt.show()

(x_train, y_train), _ = mnist.load_data()
print(x_train[0].shape) # Images in mnist are 2-D since they don't have color channel
# showing figures
fig = plt.figure(figsize = (10, 10))
for i in range(9):
fig.add_subplot(3, 3, i+1)
plt.imshow(x_train[i])
plt.show()

1.Padding
兩種類型的Padding選項 「'valid'」:無填充(刪除最右邊的列和最下面的行) 「'same'」:填充大小**p=[k/2]**當(dāng)內(nèi)核大小=「k時」 定制填充物可提供零填充「nD」層
# when padding = 'valid'
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'valid'))
print(model.output_shape)

# when padding = 'same'
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
print(model.output_shape)

# user-customized padding
input_layer = Input(shape = (10, 10, 3))
padding_layer = ZeroPadding2D(padding = (1,1))(input_layer)
model = Model(inputs = input_layer, outputs = padding_layer)
print(model.output_shape)

2. FIlter/kernels
可以指定過濾器的數(shù)量 過濾器數(shù)量等于下一層的「深度」
# when filter size = 10
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
# you could see that the depth of output = 10
print(model.output_shape)

# when filter size = 20
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 20, kernel_size = (3,3), strides = (1,1), padding = 'same'))
#你可以看到輸出的深度=20
print(model.output_shape)
3.Pooling
通常,最大池應(yīng)用于矩形區(qū)域 池大小、填充類型和跨步可以設(shè)置為類似于卷積層
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
print(model.output_shape)

# 如果未定義“步長”參數(shù),步長等于“池大小”
model.add(MaxPooling2D(pool_size = (2,2), padding = 'valid'))
print(model.output_shape)

model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
model.add(MaxPooling2D(pool_size = (2,2), strides = (1,1), padding = 'valid'))
print(model.output_shape)

model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
model.add(AveragePooling2D(pool_size = (2,2), padding = 'valid'))
print(model.output_shape)

# globalMapPooling在深度為1的整個通道上執(zhí)行最大池model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
model.add(GlobalMaxPooling2D())
# 當(dāng)篩選器數(shù)=10時,將返回10個值作為globalMapPooling2D的結(jié)果
print(model.output_shape)

4.Flattening
要連接到完全連接的層(密集層),卷積/池層應(yīng)**“扁平化”** 結(jié)果形狀=「(實例數(shù),寬X高X深)」
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
print(model.output_shape)

model.add(Flatten())
print(model.output_shape)

5.Fully Connected (Dense)
壓平層后,可增加全連接層 應(yīng)指定輸出形狀(節(jié)點數(shù))
model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
model.add(Flatten())
model.add(Dense(50))
print(model.output_shape)

評論
圖片
表情
