边写代码边学习之卷积神经网络CNN

1. 卷积神经网络CNN

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络的架构,主要用于图像识别、图像分类和计算机视觉等任务。它是由多层神经元组成的神经网络,其中包含卷积层、池化层和全连接层等组件。

CNN的设计受到了生物视觉系统的启发,其中最重要的组件是卷积层。卷积层通过使用一系列称为卷积核(或过滤器)的小矩阵,对输入图像进行卷积操作。这个卷积操作可以理解为滑动窗口在输入图像上的移动,对窗口中的图像部分和卷积核进行逐元素相乘并相加,从而生成输出特征图。这个过程可以有效地提取输入图像中的局部特征,例如边缘、纹理等信息。

随后,通常会应用池化层来降低特征图的空间维度,减少模型中的参数数量,以及提取更加抽象的特征。常见的池化操作包括最大池化和平均池化,它们分别选择局部区域中的最大值或平均值作为池化后的值。

最后,通过一个或多个全连接层对池化后的特征进行处理,将其映射到特定的输出类别。全连接层通常是传统的神经网络结构,其输出用于执行分类、回归或其他任务。

卷积神经网络在图像处理领域表现出色,因为它们能够自动从原始像素中学习特征,并且能够处理大量数据,从而实现较高的准确性。在过去的几年里,CNN在计算机视觉和其他领域的许多任务上取得了显著的突破,成为深度学习的重要组成部分。

2. tf.keras.layers.Conv1D

 

tf.keras.layers.Conv1D(filters,kernel_size,strides=1,padding="valid",data_format="channels_last",dilation_rate=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
)

一维卷积层(例如时间卷积(temporal convolution))。

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

当将此层用作模型中的第一层时,请提供 input_shape 参数(整数元组或 None,例如 (10, 128) 表示 10 个 128 维向量的向量序列,或 (None, 128) 表示可变长度 128 维向量的序列。

3. 例子

3.1 简单的一层卷积网络

定义一个一维的卷积,卷积核的shape的(,2),输入的shape是(None, 1)。 biase没有,filter是1.  

定义输入数据和卷积核,然后输入到卷积网络中,输出结果。

def case1():# Create a Conv1D modelmodel = tf.keras.Sequential([tf.keras.layers.Conv1D(filters=1, kernel_size=2, activation='linear', use_bias=False,input_shape=(None, 1)),])model.summary()# Input sequence and filterinput_sequence = np.array([1, 2, 3, 4, 5, 6])filter_kernel = np.array([2, -1])# Reshape the input sequence and filter to fit Conv1Dinput_sequence = input_sequence.reshape(1, -1, 1)filter_kernel = filter_kernel.reshape(-1, 1, 1)# Set the weights of the Conv1D layer to the filter_kernelmodel.layers[0].set_weights([filter_kernel])# Perform 1D Convolutionoutput_sequence = model.predict(input_sequence).flatten()print("Input Sequence:", input_sequence.flatten(), "shape:", input_sequence.shape)print("Filter:", filter_kernel.flatten(), " shape :",filter_kernel.shape )print("Output Sequence:", output_sequence)if __name__ == '__main__':case1()

输出

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================conv1d (Conv1D)             (None, None, 1)           2         =================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________
1/1 [==============================] - 0s 121ms/step
Input Sequence: [1 2 3 4 5 6] shape: (1, 6, 1)
Filter: [ 2 -1]  shape : (2, 1, 1)
Output Sequence: [0. 1. 2. 3. 4.]Process finished with exit code 0

3.2 . 自定激活函数

为了验证激活函数是在卷积后调用, 特写下面代码。你们可以根据输入和输出做校验。

def case_custom_activation():# Input sequence and filterinput_sequence = np.array([1, 2, 3, 4, 5, 6])filter_kernel = np.array([2, -1])# Reshape the input sequence and filter to fit Conv1Dinput_sequence = input_sequence.reshape(1, -1, 1)filter_kernel = filter_kernel.reshape(-1, 1, 1)def custom_activation(x):# return tf.square(tf.nn.tanh(x))return tf.square(x)# Create a Conv1D modelmodel = keras.Sequential([keras.layers.Conv1D(filters=1, kernel_size=2, activation=custom_activation, use_bias=False,input_shape=(None, 1)),])model.summary()# Set the weights of the Conv1D layer to the filter_kernelmodel.layers[0].set_weights([filter_kernel])# Perform 1D Convolutionoutput_sequence = model.predict(input_sequence).flatten()print("Input Sequence:", input_sequence.flatten(), "shape:", input_sequence.shape)print("Filter:", filter_kernel.flatten(), " shape :",filter_kernel.shape )print("Output Sequence:", output_sequence)if __name__ == '__main__':case_custom_activation()

输出

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================conv1d (Conv1D)             (None, None, 1)           2         =================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________
1/1 [==============================] - 0s 57ms/step
Input Sequence: [1 2 3 4 5 6] shape: (1, 6, 1)
Filter: [ 2 -1]  shape : (2, 1, 1)
Output Sequence: [ 0.  1.  4.  9. 16.]

3.3. 验证偏置

和上面代码唯一不同是,定义了偏置。

def cnn1d_biase():# Input sequence and filterinput_sequence = np.array([1, 2, 3, 4, 5, 6])filter_kernel = np.array([2, -1])biase = np.array([2])# Reshape the input sequence and filter to fit Conv1Dinput_sequence = input_sequence.reshape(1, -1, 1)filter_kernel = filter_kernel.reshape(-1, 1, 1)def custom_activation(x):# return tf.square(tf.nn.tanh(x))return tf.square(x)# Create a Conv1D modelmodel = keras.Sequential([keras.layers.Conv1D(filters=1, kernel_size=2, activation=custom_activation,input_shape=(None, 1)),])model.summary()print(model.layers[0].get_weights()[0].shape)print(model.layers[0].get_weights()[1].shape)# Set the weights of the Conv1D layer to the filter_kernelmodel.layers[0].set_weights([filter_kernel, biase])# Perform 1D Convolutionoutput_sequence = model.predict(input_sequence).flatten()print("Input Sequence:", input_sequence.flatten(), "shape:", input_sequence.shape)print("Filter:", filter_kernel.flatten(), " shape :", filter_kernel.shape)print("Output Sequence:", output_sequence)if __name__ == '__main__':cnn1d_biase()

输出

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================conv1d (Conv1D)             (None, None, 1)           3         =================================================================
Total params: 3
Trainable params: 3
Non-trainable params: 0
_________________________________________________________________
(2, 1, 1)
(1,)
1/1 [==============================] - 0s 60ms/step
Input Sequence: [1 2 3 4 5 6] shape: (1, 6, 1)
Filter: [ 2 -1]  shape : (2, 1, 1)
Output Sequence: [ 4.  9. 16. 25. 36.]Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/17990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】实验十:哈夫曼编码

实验十 哈夫曼编码 一、实验目的与要求 1)掌握树、森林与二叉树的转换; 2)掌握哈夫曼树和哈夫曼编码算法的实现; 二、 实验内容 1. 请编程实现如图所示的树转化为二叉树。 2. 编程实现一个哈夫曼编码系统,系统功能…

C语言预备

安装Visual studio 官方网址 https://visualstudio.microsoft.com/zh-hans/ 选择第一个社区版本(免费) 下载完成后打开安装包 安装完成后会自动打开程序选择c项目然后安装即可(c兼容c) 安装完成后启动程序注意这里需要注册也可…

scrapy框架简单实现豆瓣评分爬取案例

豆瓣网址:https://movie.douban.com/top250 1.创建scrapy框架 scrapy startproject 项目名(scrapy_test_one)创建好以后的目录是这样的 2.创建spider文件 在spiders目录下创建一个spider_one.py文件,可以随意命名,该文件主要是让我们进行数…

树、二叉树(C语言版)详解

🍕博客主页:️自信不孤单 🍬文章专栏:数据结构与算法 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 文章目录 🍊树的概念及结构1. 树的概念2. 树的相关概念3.树…

解决sonar的单元测试的覆盖率会为0问题

今天做项目遇到一个问题,明明做单元测试时覆盖率已经百分百了,然后传到Jenkin上,构建也成功了,但偏偏覆盖率就是为零,非常确定代码没有问题,所以唯一的问题就是出现在配置上了。 一开始的结果如下&#xf…

css 利用模糊属性 制作水滴

<style>.box {background-color: #111;height: 100vh;display: flex;justify-content: center;align-items: center;/* 对比度*/filter: contrast(20);}.drop {width: 150px;height: 159px;border-radius: 50%;background-color: #fff;position: absolute;/* 模糊 */filt…

Flowable-服务-微服务任务

目录 定义图形标记XML内容界面操作 定义 Sc 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Sc 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用springcloud的微服务使用。 图形标记 由于 Sc 任务不是 BPMN 2.0 规范的“官方”任务…

CASAIM自动化平面度检测设备3D扫描零部件形位公差尺寸测量

平面度是表面形状的度量&#xff0c;指示沿该表面的所有点是否在同一平面中&#xff0c;当两个表面需要连接在一起形成紧密连接时&#xff0c;平面度检测至关重要。 CASAIM自动化平面度检测设备通过搭载领先的激光三维测头和智能检测软件自动获取零部件高质量测量数据&#xf…

剑指offer刷题笔记--Num61-68

1--扑克牌中的顺子&#xff08;61&#xff09; 主要思路&#xff1a; 五个数是顺子的充要条件&#xff1a;① 最大值 - 最小值 < 5&#xff08;大小王除外&#xff09;&#xff1b;② 没有出现重复的值&#xff08;大小王除外&#xff09;&#xff1b; 判断是否出现重复的值…

IDEA如何快捷创建serialVersionUID【详细图解】

在Java Bean&#xff0c;快速创建serialVersionUID&#xff0c;详细操作流程如下&#xff1a; 1.File->Settings->Editor->Inspections 在搜索框里搜索 Uid,选择下图中勾选的选择 2.如何使用 双击选中需要序列化Uid的类名&#xff0c;使用Alt enter&#xff0c;快捷…

Java里的static import使用小结

Java里的static import使用小结 换了工作要把Java重新捡起来了&#xff0c;这个在大学里用过的语言&#xff0c;虽然不复杂&#xff0c;还是有一些奇怪的地方的。比如static Slgluimport。 Static import是JDK 1.5中引进的特性&#xff0c;不过读大学那会还真没注意到。它的作…

机器学习 | Python实现NARX模型预测控制

机器学习 | Python实现NARX模型预测控制 目录 机器学习 | Python实现NARX模型预测控制效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 机器学习 | Python实现NARX模型预测控制 研究内容 贝叶斯黑盒模型预测控制,基于具有外源输入的非线性自回归模型的预期自由能最…

微信小程序防盗链referer问题处理

公司使用百度云存储一些资源&#xff0c;然后现在要做防盗链&#xff0c;在CDN加入Referer白名单后发现PC是正常的&#xff0c;微信小程序无法正常访问资源了。然后是各种查啊&#xff0c;然后发现是微信小程序不支持Referer的修改&#xff0c;且在小程序开发工具是Referer是固…

将程序打包成单一一个可执行文件

最近做了一个界面交互渲染的小项目&#xff0c;项目主要的功能是通过TCP接收数据然后在界面中渲染出对应的状态。由于用户的最大需求是炫酷&#xff0c;于是为了方便实现特殊的交互逻辑&#xff0c;我选择用freeglut自行实现了界面的交互和渲染&#xff0c;又用OpenCV做了部分图…

图数据库Neo4j学习四——Spring Data NEO

1配置 1.1Maven依赖 <!--neo4j --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency>1.2yml配置 spring:data:neo4j:uri: bolt://localhost:76…

QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)

QT实现tcpf服务器代码&#xff1a;&#xff08;源文件&#xff09; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTc…

excel中使地址按十六进制进行数值递增的函数

这里是尼德兰的喵工具相关文章&#xff0c;欢迎您的访问&#xff01; 如果文章对您有所帮助&#xff0c;期待您的点赞收藏&#xff01; 让我们一起为成为芯片前端全栈工程师而努力&#xff01; 在进行寄存器编写时很多时候会涉及到算地址的问题&#xff0c;通常32bit位宽的寄存…

棕榈酰三肽-38——对额间纹,鱼尾纹,抬头纹和颈纹非常有效

简介 棕榈酰三肽-38由三个氨基酸组成&#xff0c;是一种双氧化的脂肽。这种肽的灵感源自于天然存在于胶原蛋白VI和层粘连蛋白中的一种三肽。 它可以在需要的地方&#xff0c;从内部重建肌肤&#xff0c;使皱纹平滑皮肤得到舒缓&#xff0c;尤其对额间纹&#xff0c;鱼尾纹&…

Spring整合Mybatis、Spring整合JUnit

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Spring整合 一、Spring整合Mybatis1.1 整合Mybatis&#x…

记录一次通过iostat命令定位系统数据库CPU飙升的案例

一、背景 我们有个移动考勤的系统&#xff0c;运维监控系统显示&#xff0c;每到上下班时间&#xff0c;考勤数据库的CPU就飙升到100%&#xff0c;磁盘读写请求等待时间变长&#xff0c;最初无法确定是磁盘性能下降导致的CPU飙升&#xff0c;还是CPU飙升导致的磁盘性能下降&…