当前位置: 首页 > news >正文

深度学习笔记《一》:keras_core.layers.Conv2D()

一、说明

        卷积,池化,激活函数,这三者号称是深度神经网络的三驾马车;其中卷积是最复杂的一个,因此,对卷积这个东西需要精心认知,这样对后面学习大有帮助。本篇为系列博文,专门介绍Ceras库的各种API的应用方法,力求从根本上学习 。

二、卷积层(Conv2D层)

        该层一个流动性创建,该流动性与层输入以产生输出张量。如果 use_bias 为 True,则创建一个偏置允许将其添加到输出中。最后,如果激活不是无,则创建一个偏置评估输出。

        启用图层模型中的第一层时,请提供关键字参数input_shape(整数元组或None,不包括结束轴),例如input_shape=(128, 128, 3)对于data_format=“中的128x128 RGB图片channels_last。

  • 函数名称:

        keras_core.layers.Conv2D()

  • 函数原型:
keras_core.layers.Conv2D(filters,kernel_size,strides=(1, 1),padding="valid",data_format=None,dilation_rate=(1, 1),groups=1,activation=None,use_bias=True,kernel_initializer="glorot_uniform",bias_initializer="zeros",kernel_regularizer=None,bias_regularizer=None,activity_regularizer=None,kernel_constraint=None,bias_constraint=None,**kwargs
)

  • 2D 卷积层描述。

该层创建一个卷积核,该卷积核与单个空间(或时间)维度上的层输入进行卷积,以产生输出张量。如果use_bias为 True,则创建偏置向量并将其添加到输出中。最后,如果activation不是None,它也应用于输出。

  •  参数解释
参数名称格式意义描述对象【输入,输出 】
filtersint输出空间的维度(卷积中过滤器的数量)是输出
kernel_size(int,int)一个整数或 2 个整数的元组/列表,指定 2D 卷积窗口的高度和宽度。可以是单个整数,为所有空间维度指定相同的值。内部
strides(int,int)int 或 2 个整数的元组/列表,指定卷积的步长。strides > 1与 dilation_rate > 1不兼容。(dilation_rate是膨胀卷积,以后再谈内部
padding

字符串(‘valid’

‘same’

"valid"或者"same"(不区分大小写)。 "valid"意味着没有填充。"same"结果均匀地填充到输入的左/右或上/下,使得输出具有与输入相同的高度/宽度尺寸。内部
data_format

字符串

"channels_last"或

"channels_first"

"channels_last""channels_first"。输入中维度的顺序。

"channels_last" 对应于具有 shape 的输入 (batch_size, height, width,channels) ,而"channels_first"对应于具有 shape 的输入 (batch_size, channels, height, width)。它默认为 image_data_formatKeras 配置文件中找到的值,位于 ~/.keras/keras.json

如果您从未设置过它,那么它将是 "channels_last"

dilation_rate int或 2 个整数的元组/列表,指定用于扩张卷积的扩张率。
groupsint一个正整数,指定输入沿通道轴分割的组数。每组分别与filters // groups滤波器进行卷积。输出是所有结果groups沿通道轴的串联。输入通道 和filters必须都能被 整除groups
activation字符串激活函数。如果None,则不应用任何激活。
use_biasbool 如果True,偏差将添加到输出中。
kernel_initializer函数指针卷积核的初始化器。如果,则将使用None默认初始化程序 ( )。"glorot_uniform"
bias_initializer函数指针:偏置向量的初始化器。如果,则将使用None默认初始化程序 ( )。"zeros"
kernel_regularizer函数指针 卷积核的可选正则化器。
bias_regularizer函数指针:偏置向量的可选正则化器。
Activity_regularizer函数指针:输出的可选正则化函数。
kernel_constraint函数指针可选的投影函数,在更新后应用于内核Optimizer(例如,用于实现层权重的范数约束或值约束)。该函数必须将未投影变量作为输入,并且必须返回投影变量(必须具有相同的形状)。进行异步分布式训练时,使用约束并不安全。
bias_constraint 函数指针可选的投影函数,在由 更新后应用于偏差Optimizer

输入形状

形状为batch_shape + (channels, rows, cols)if 的 4+D 张量data_format='channels_first' 或 形状为batch_shape + (rows, cols, channels)if 的 4+D 张量data_format='channels_last'

输出形状

形状为batch_shape + (filters, new_rows, new_cols)if 的 4+D 张量data_format='channels_first'或 形状为batch_shape + (new_rows, new_cols, filters)

if的 4+D 张量data_format='channels_last'。 rows 并且cols值可能由于填充而发生变化。

返回

表示 的 4D 张量activation(conv2d(inputs, kernel) + bias)

提高

  • ValueError:当strides > 1和 都存在时dilation_rate > 1

三、参考示例

3.1 验证输入和输出

>>> # The inputs are 28x28 RGB images with `channels_last` and the batch
>>> # size is 4.
>>> input_shape = (4, 28, 28, 3)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.Conv2D(
... 2, 3, activation='relu', input_shape=input_shape[1:])(x)
>>> print(y.shape)
(4, 26, 26, 2)

 3.2 验证膨胀卷积

>>> # With `dilation_rate` as 2.
>>> input_shape = (4, 28, 28, 3)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.Conv2D(
...     2, 3,
...     activation='relu',
...     dilation_rate=2,
...     input_shape=input_shape[1:])(x)
>>> print(y.shape)
(4, 24, 24, 2)

  3.3 验证卷积前填充

>>> # With `padding` as "same".
>>> input_shape = (4, 28, 28, 3)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.Conv2D(
... 2, 3, activation='relu', padding="same", input_shape=input_shape[1:])(x)
>>> print(y.shape)
(4, 28, 28, 2)

   3.4 验证将batch-size扩展成张量维度

>>> # With extended batch shape [4, 7]:
>>> input_shape = (4, 7, 28, 28, 3)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.Conv2D(
... 2, 3, activation='relu', input_shape=input_shape[2:])(x)
>>> print(y.shape)
(4, 7, 26, 26, 2)

四、实现一个深度网络

4.1 代码和项目介绍

        我们搭建简单网络,该网络能跑起来,但并不保证有多么有效,相反,我们要逐步改进其弱点,实现更高效能。

4.2 数据集导入

导入cifar10数据集,以下两步完成:

from tensorflow.keras.datasets import cifar10# Load the CIFAR-10 dataset
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

4.3 项目设计 

        网络结构预先设计好,比如,下图详细描述了一个图片输入,卷积-连接层的分类神经网络,以及实现步骤。详细代码见下端。

 

4.4 模型实现

  • 模型实现是通过管道完成:model = Sequential( [ list ] )
  • 模型生成后需要编译,编译过后执行速度提升。model.compile。此处定义代价函数。
  • 训练定义和执行。model.fit 训练。

4.5 代码实现

# Image Classification with Convolutional Neural Networks (CNN)
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense# Load the CIFAR-10 dataset
(x_train, y_train), (x_test, y_test) = cifar10.load_data()# Preprocess the data
x_train, x_test = x_train / 255.0, x_test / 255.0# Build a CNN model
model = Sequential([Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),MaxPooling2D((2, 2)),Conv2D(64, (3, 3), activation='relu'),MaxPooling2D((2, 2)),Conv2D(64, (3, 3), activation='relu'),Flatten(),Dense(64, activation='relu'),Dense(10)
])# Compile the model
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])# Train the model
model.fit(x_train, y_train, epochs=20, validation_data=(x_test, y_test))

相关文章:

  • 插入区间[中等]
  • interface previously declared 的bug问题
  • 代码随想录二刷|第七章:回溯算法
  • 第一章 Python基础
  • 【gpts】学算法题[缺失的第一个正数](https://leetcode.cn/problems/first-missing-positive/)
  • Findreport中框架图使用的注意事项
  • 【迅搜04】索引配置(一)加载配置文件以及服务端配置
  • 第四章 python基础之面向对象
  • YoloV7改进策略:RefConv打造轻量化YoloV7利器
  • 实力登榜!迅镭激光荣膺“江苏省瞪羚企业”称号!
  • 初识操作系统
  • 九、hdfs中Namenode元数据处理
  • SDN核心技术与内容
  • 34970A 数据采集 / 数据记录仪开关单元
  • 黑马点评笔记 redis缓存三大问题解决
  • [译] React v16.8: 含有Hooks的版本
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • extjs4学习之配置
  • idea + plantuml 画流程图
  • iOS 系统授权开发
  • JavaScript 基本功--面试宝典
  • java取消线程实例
  • js递归,无限分级树形折叠菜单
  • js作用域和this的理解
  • laravel with 查询列表限制条数
  • mysql innodb 索引使用指南
  • node入门
  • Swoft 源码剖析 - 代码自动更新机制
  • Terraform入门 - 3. 变更基础设施
  • Vue 2.3、2.4 知识点小结
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • Semaphore
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (function(){})()的分步解析
  • (九)信息融合方式简介
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)uboot源码分析
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (已解决)什么是vue导航守卫
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)德国人的记事本
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ 转载 ] SharePoint 资料
  • [20150707]外部表与rowid.txt
  • [20170713] 无法访问SQL Server
  • [Android] 修改设备访问权限
  • [Android]使用Android打包Unity工程