前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小白学习keras教程】三、Kears中常见模型层Padding、Conv2D、MaxPooling2D、Flatten

【小白学习keras教程】三、Kears中常见模型层Padding、Conv2D、MaxPooling2D、Flatten

作者头像
润森
发布2022-08-18 09:34:15
5150
发布2022-08-18 09:34:15
举报
文章被收录于专栏:毛利学Python毛利学Python

「@Author:Runsen」@

  • 基础知识
  • 1.Padding
  • 2. FIlter/kernels
  • 3.Pooling
  • 4.Flattening
  • 5.Fully Connected (Dense)

基础知识

  • 图像格式数据的输入通常是张量流中的四维数组

「(数值、宽度、高度、深度)」

  • 「num_instance:「数据实例数。通常指定为」无」,以适应数据大小的波动
  • 「宽度」:图像的宽度
  • 「高度」:图像的高度
  • 「深度」:图像的深度。彩色图像的深度通常为3(RGB为3个通道)。黑白图像的深度通常为1(只有一个通道)
代码语言:javascript
复制
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()
代码语言:javascript
复制
(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]**当内核大小=「k时」
  • 定制填充物可提供零填充「nD」
代码语言:javascript
复制
# 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)
代码语言:javascript
复制
# 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)
代码语言:javascript
复制
# 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

  • 可以指定过滤器的数量
  • 过滤器数量等于下一层的「深度」
代码语言:javascript
复制
# 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)
代码语言:javascript
复制
# 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

  • 通常,最大池应用于矩形区域
  • 池大小、填充类型和跨步可以设置为类似于卷积层
代码语言:javascript
复制
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)
代码语言:javascript
复制
# 如果未定义“步长”参数,步长等于“池大小”
model.add(MaxPooling2D(pool_size = (2,2), padding = 'valid'))
print(model.output_shape)
代码语言:javascript
复制
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)
代码语言:javascript
复制
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)
代码语言:javascript
复制
# globalMapPooling在深度为1的整个通道上执行最大池model = Sequential()
model.add(Conv2D(input_shape = (10, 10, 3), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'same'))
model.add(GlobalMaxPooling2D())
# 当筛选器数=10时,将返回10个值作为globalMapPooling2D的结果
print(model.output_shape)

4.Flattening

  • 要连接到完全连接的层(密集层),卷积/池层应**“扁平化”**
  • 结果形状=「(实例数,宽X高X深)」
代码语言:javascript
复制
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)
代码语言:javascript
复制
model.add(Flatten())
print(model.output_shape)

5.Fully Connected (Dense)

  • 压平层后,可增加全连接层
  • 应指定输出形状(节点数)
代码语言:javascript
复制
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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础知识
  • 1.Padding
  • 2. FIlter/kernels
  • 3.Pooling
  • 4.Flattening
  • 5.Fully Connected (Dense)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档