Python卷积神经网络CNN

news2024/11/23 20:52:19

Python卷积神经网络CNN

提示:前言
Python卷积神经网络CNN


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • Python卷积神经网络CNN
  • 前言
  • 一、导入包
  • 二、介绍
  • 三、卷积过滤
  • 四、权重
  • 五、展示特征图
  • 六、用 ReLU 激活
  • 六、应用卷积和 ReLU


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、导入包

import numpy as np
from itertools import product

def show_kernel(kernel, label=True, digits=None, text_size=28):
    # Format kernel
    kernel = np.array(kernel)
    if digits is not None:
        kernel = kernel.round(digits)

    # Plot kernel
    cmap = plt.get_cmap('Blues_r')
    plt.imshow(kernel, cmap=cmap)
    rows, cols = kernel.shape
    thresh = (kernel.max()+kernel.min())/2
    # Optionally, add value labels
    if label:
        for i, j in product(range(rows), range(cols)):
            val = kernel[i, j]
            color = cmap(0) if val > thresh else cmap(255)
            plt.text(j, i, val, 
                     color=color, size=text_size,
                     horizontalalignment='center', verticalalignment='center')
    plt.xticks([])
    plt.yticks([])

二、介绍

我们看到卷积分类器有两部分:卷积基和密集层头部。 我们了解到,base 的工作是从图像中提取视觉特征,然后 head 将使用这些特征对图像进行分类。

在接下来的几节课中,我们将学习两种最重要的层类型,您通常会在卷积图像分类器的基础中找到它们。 这些是具有 ReLU 激活的卷积层和最大池化层。

本课是关于具有 ReLU 激活函数的卷积层。

在深入了解卷积的细节之前,让我们先讨论一下网络中这些层的用途。 我们将看到如何使用这三种操作(卷积、ReLU 和最大池化)来实现特征提取过程。

base 执行的特征提取包括三个基本操作:

  1. 针对特定特征过滤图像(卷积)
  2. 在过滤后的图像中检测该特征 (ReLU)
  3. 压缩图像以增强特征(最大池化)

下图说明了这个过程。 您可以看到这三个操作如何能够隔离原始图像的某些特定特征(在本例中为水平线)。
在这里插入图片描述
通常,网络将在单个图像上并行执行多个提取。 在现代卷积神经网络中,基础的最后一层产生超过 1000 个独特的视觉特征并不少见

三、卷积过滤

卷积层执行过滤步骤。 您可以在 Keras 模型中定义一个卷积层,如下所示:

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Conv2D(filters=64, kernel_size=3), # activation is None
    # More layers follow
])

我们可以通过查看它们与层的权重和激活的关系来理解这些参数。 让我们现在就这样做。

四、权重

convnet 在训练期间学习的权重主要包含在其卷积层中。 我们称这些权重为内核。 我们可以将它们表示为小数组:
在这里插入图片描述

内核通过扫描图像并产生像素值的加权和来运行。 通过这种方式,内核将有点像偏光镜,强调或弱化某些信息模式。
在这里插入图片描述
内核定义卷积层如何连接到后面的层。 上面的内核会将输出中的每个神经元连接到输入中的九个神经元。 通过使用 kernel_size 设置内核的维度,您告诉 convnet 如何形成这些连接。 大多数情况下,内核将具有奇数维度——如 kernel_size=(3, 3) 或 (5, 5)——因此单个像素位于中心,但这不是必需的。

卷积层中的内核决定了它创建的特征类型。 在训练期间,卷积神经网络会尝试学习解决分类问题所需的特征。 这意味着为其内核找到最佳值。

五、展示特征图

网络中的激活我们称之为特征图。 当我们对图像应用滤镜时,它们就是结果; 它们包含内核提取的视觉特征。 这里有一些内核,上面有它们生成的特征图。
训练集

测试集

从内核中的数字模式,您可以看出它创建的特征图的种类。 通常,卷积在其输入中强调的内容将与内核中正数的形状相匹配。 上面的左侧和中间内核都将过滤水平形状。

使用 filters 参数,您可以告诉卷积层您希望它创建多少个特征映射作为输出。

六、用 ReLU 激活

过滤后,特征图通过激活函数。 整流器函数有一个像这样的图:

ReLU 激活函数的图表。
整流器函数的图形看起来像一条线,负部分“整流”为 0。
附有整流器的神经元称为整流线性单元。 出于这个原因,我们也可以将整流器函数称为 ReLU 激活函数甚至 ReLU 函数。
在这里插入图片描述

ReLU 激活可以在其自己的激活层中定义,但大多数情况下,您只会将其作为 Conv2D 的激活函数包含在内。

model = keras.Sequential([
    layers.Conv2D(filters=64, kernel_size=3, activation='relu')
    # More layers follow
])

在这里插入图片描述
与其他激活函数一样,ReLU 函数是非线性的。 从本质上讲,这意味着网络中所有层的总效果变得不同于将效果加在一起所获得的效果——这与仅使用一个层所获得的效果相同。 非线性确保特征在深入网络时以有趣的方式组合。 (我们将在第 5 课中更多地探讨这种“特征复合”。)

六、应用卷积和 ReLU

我们将在这个例子中自己进行提取,以更好地理解卷积网络在“幕后”做什么。
这是我们将用于此示例的图像:

import tensorflow as tf
import matplotlib.pyplot as plt
plt.rc('figure', autolayout=True)
plt.rc('axes', labelweight='bold', labelsize='large',
       titleweight='bold', titlesize=18, titlepad=10)
plt.rc('image', cmap='magma')

image_path = '../input/computer-vision-resources/car_feature.jpg'
image = tf.io.read_file(image_path)
image = tf.io.decode_jpeg(image)

plt.figure(figsize=(6, 6))
plt.imshow(tf.squeeze(image), cmap='gray')
plt.axis('off')
plt.show();

在这里插入图片描述
对于过滤步骤,我们将定义一个内核,然后将其应用于卷积。 这种情况下的内核是“边缘检测”内核。 您可以使用 tf.constant 定义它,就像您在 Numpy 中使用 np.array 定义数组一样。 这将创建 TensorFlow 使用的那种张量。

import tensorflow as tf

kernel = tf.constant([
    [-1, -1, -1],
    [-1,  8, -1],
    [-1, -1, -1],
])

plt.figure(figsize=(3, 3))
show_kernel(kernel)

在这里插入图片描述
TensorFlow 在其 tf.nn 模块中包含许多由神经网络执行的常见操作。 我们将使用的两个是 conv2d 和 relu。 这些只是 Keras 层的函数版本。

下一个隐藏的单元格会重新格式化以使其与 TensorFlow 兼容。 细节对于这个例子并不重要。

现在让我们应用我们的内核,看看会发生什么

image_filter = tf.nn.conv2d(
    input=image,
    filters=kernel,
    # we'll talk about these two in lesson 4!
    strides=1,
    padding='SAME',
)

plt.figure(figsize=(6, 6))
plt.imshow(tf.squeeze(image_filter))
plt.axis('off')
plt.show();

在这里插入图片描述
接下来是使用 ReLU 函数的检测步骤。 这个函数比卷积简单得多,因为它没有任何参数要设置。
在这里插入图片描述
现在我们已经创建了一个特征图! 这些图像是 head 用来解决其分类问题的图像。 我们可以想象,某些特征可能更具有汽车的特征,而其他特征可能更具有卡车的特征。 训练期间卷积网络的任务是创建可以找到这些特征的内核。

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

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

相关文章

一文快速入门哈希表

目录一、基本概念1.1 哈希冲突二、整数哈希2.1 哈希函数的设计2.2 解决哈希冲突2.2.1 开放寻址法2.2.2 拉链法三、字符串哈希3.1 应用:重复的DNA序列References一、基本概念 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。所谓以「key-…

RA4M2开发(1)----使用串口进行打印

为什么使用Cube进行FreeRTOS配置 本篇文章主要介绍如何使用e2studio对瑞萨RA4M2开发板进行串口打印配置。 硬件准备 首先需要准备一个开发板,这里我准备的是芯片型号R7FAM2AD3CFP的开发板: 新建工程 工程模板 保存工程路径 芯片配置 本文中使用R7F…

【GlobalMapper精品教程】043:图片自动矢量化

本文讲解Globalmapper自动矢量化教程,配套案例数据。 参考教程:ArcGIS实验教程——实验三十三:ArcScan自动矢量化完整案例教程 文章目录 一、加载实验数据二、启动矢量化工具三、矢量化栅格四、矢量化结果五、注意事项一、加载实验数据 打开配套实验数据包中的data043.rar…

参数检验与非参数检验

综述 假设检验 参数检验 T检验 T检验是通过比较不同数据的均值,研究两组数据之间是否存在显著差异。 单总体检验:单总体t检验是检验一个样本平均数与一个已知的总体平均数的差异是否显著。当总体分布是正态分布,如总体标准差未知且样本容量小…

算法——垃圾回收算法——标记清除

标记清除简介算法过程1.标记阶段2.清除阶段3.缺点3.1内存碎片化简介 标记清除算法简介。 文章中使用的动画网站地址: 限 pc: 标记清除动画 :http://www.donghuasuanfa.com/platform/portal?pcmark-sweep 算法一览表:https://blog.csdn.net…

23种设计模式之面向对象的设计原则

23种设计模式之面向对象的设计原则1. 设计模式概述1.1 什么是设计模式1.2 设计模式的好处2. 设计原则分类3. 详解3.1 单一职责原则3.2 开闭原则3.3 里氏代换原则3.4 依赖倒转原则3.5 接口隔离原则3.6 合成复用原则3.7 迪米特法则4. Awakening1. 设计模式概述 我们的软件开发技术…

18《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限,如果错误欢迎批评指正。 第四章:Protein Binding Leads to Biological Actions (蛋白质的结合会产生生物作用) -偶联结合是调控、信号传…

【Java基础】-【Spring Boot】-【Spring】

文章目录Spring BootSpring Boot的启动流程Spring Boot项目是如何导入包的?Spring Boot自动装配的过程Spring Boot注解Spring的核心Spring AOP既然有没有接口都可以用CGLIB,为什么Spring还要使用JDK动态代理?AOP的应用场景Spring AOP不能对哪…

图论(7)负环和差分约束

一、概念 给定一张有向图,如果存在一个环,环上各边权值之和是负数,则称这个环为负环。 判断方式:bellman-ford算法和spfa算法。抽屉原理 这里只介绍spfa。设立cnt数组表示从1到x的最短路径包含的边数,如果cnt[i]大于…

JZ65 不用加减乘除做加法

【答案解析】:十进制相加思想: 1507 , 先计算不考虑进位的相加结果 12 (因为 57 的不考虑进位的结果是 2 ,遇 10 进位嘛),然后计算进位 57 进位是 10 ,则 10 与 12 再次相加&#xf…

2023年山东最新交安安全员考试题库及答案

百分百题库提供交安安全员考试试题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 35.建设行政主管部门或者其他有关部门可以将施工现场的监督检查委托给建设工程()…

Visual Studio 17.5: 有关 C++ 的新特性预览

Visual Studio 17.5 在 C 代码编辑方面带来了一些新的改进,这些改进包括:C 代码中的大括号对着色,拼写检查,多合一搜索,重新设计的成员列表以及宏展开改进等。上述这些改进都融入到了 Visual Studio 的最新预览版本 17…

CTF-Horizontall HackTheBox渗透测试(一)

** 0X01 简介** #Horizontall#难度是一个相对“简单”的 CTF Linux盒子。该CTF环境涵盖了通过利用Strapi RCE 漏洞并使用内部应用程序 (Laravel) 将隧道传输到本地计算机,并且在 Laravel v 7.4.18 上运行 漏洞PoC最来提升权限拿到root用户权限。 ** 1.1信息收集**…

GuLi商城-人人开源搭建后台管理系统

参考: 谷粒商城-基础篇(详细流程梳理代码) 谷粒商城-day01 项目的基本搭建_周周写不完的代码的博客-CSDN博客_谷粒商城 若依 谷粒商城分布式基础篇1-个人版_断河愁的博客-CSDN博客_谷粒商城 https://blog.csdn.net/yudbl/category_11902060.html 学习路线 源代…

博客搭建教程2-hexo框架初搭建

文章目录1 前言2 准备工作3 hexo安装4 共享文件夹创建(额外)1 前言 本次教程选用hexo来搭建博客,hexo是一个开源的架构,只需要进行简单的操作就可以拥有自己的博客。 参考网站: hexo官网 注意:下面的命令在root下进行,在日常的工…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【04】跨域_OSS_后端校验

持续学习&持续更新中… 学习态度:守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【04】跨域问题解决实现逻辑删除文件存储普通上传云存储阿里云OSS简介术语简单使用使用SpringCloudAlibaba—oss服务端签名后直传普通上传方式:服务端签名后…

Win10安装ElasticSearch笔记

1、安装前准备条件因为ElasticSearch7.17需要JDK1.8的支持,首先确保你的win10已经提前安装好了jdk8的版本ElasticSearch支持的JDK最低版本是1.8.0。ElasticSearch7.17及以下的版本最低版本是JDK1.8.0ElasticSearch8.0及以上的版本最低版本是JDK162、官网下载ES安装包…

Java开发环境配置 “IntelliJ IDEA”(超详细整理,适合新手入门)

前言 📜 “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴 目录 前言 一、IDEA的介绍 1、大概介绍 2、详细介绍 二、Intelli…

Python中的logging模块

软件开发中通过日志记录程序的运行情况是一个开发的好习惯,对于错误排查和系统运维都有很大帮助。Python标准库自带日志模块,程序的日志功能直接调用标准库的日志模块即可通过日志,开发者可以清楚的了解发生了哪些事件,包括出现了…

Linux随记(五)

一、已用statefulset创了两个nginx副本 web-0 和 web-1 ,目的将各自容器的hostname重定向到index.html。但显示的是master节点的hostname。 怎么写才是搞成 pod里面的主机名?#最终解决方法: 在sh -c 双引号里$符号前面加上\转义。 或者 sh -…