深度学习图像分类相关概念简析+个人举例3(CNN相关补充,附详细举例代码1)

news2024/9/21 14:41:47

【1】激活函数(Activation Function):在深度学习(CNN)中,激活函数用于引入非线性性质,帮助模型学习复杂的关系。常见的激活函数有ReLU、Sigmoid和Tanh等。

(1)ReLU激活函数:ReLU函数将负输入值变为零,保留正输入值不变。

  公式为f(x) = max(0, x)

(2)Sigmoid激活函数:Sigmoid函数将任意实数映射到0到1之间。

公式为f(x) = 1 / (1 + exp(-x))

(3)Tanh激活函数:Tanh函数将任意实数映射到-1到1之间。

公式为f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))

  这些激活函数可以作为CNN模型中的非线性变换函数,用于增加网络的表达能力。

【2】批归一化(Batch Normalization):是一种用于加速深度神经网络训练的技术,通过对每一层的输入进行标准化,使得模型更加稳定和收敛更快。

步骤:

  • 选择一个归一化的范围,一般是[0,1]或[-1,1]。
  • 例如,我们选择[0,1]作为范围,然后找到数据集的最小值(min)和最大值(max)。
  • 对于每个数据点,使用以下公式计算归一化后的值: normalized_value = (data_point - min) / (max - min)【(当前数据点-最小值点)/(最大-最小)】

【3】损失函数(Loss Function):用于衡量模型预测结果与真实标签之间的差异。在图像分类任务中,常用的损失函数有交叉熵损失函数。

(1)均方误差(Mean Squared Error, MSE): 均方误差是预测值与真实值之间差距的平方的平均值。

公式:MSE = (1/n) * Σ(y_true - y_pred)^2

其中,n为样本数量,y_true为真实值,y_pred为模型预测值,Σ表示对所有样本求和。

(2)交叉熵(Cross Entropy): 交叉熵是一种衡量概率分布之间差异的函数,用于多分类问题的损失函数。【用于衡量两个概率分布之间差异

公式:Binary Cross Entropy = - (y_true * log(y_pred) + (1 - y_true) * log(1 - y_pred))

其中,y_true为真实标签(取值为0或1),y_pred为模型预测的概率值(范围在0到1之间),log为自然对数函数。

    假设有一个二分类问题,有一个样本的真实标签为1,模型预测的概率为0.8。代入真实标签y_true=1和预测概率y_pred=0.8,就可以计算二分类交叉熵的值:Binary Cross Entropy = - (1 * log(0.8) + (1 - 1) * log(1 - 0.8)) = - (1 * log(0.8) + 0 * log(0.2)) = - log(0.8) ≈ 0.223。交叉熵值越小,表示模型的预测结果越接近真实情况。

【4】优化算法(Optimization Algorithm):用于更新模型参数以最小化损失函数的算法。常见的优化算法有随机梯度下降(SGD)、Adam、Adagrad等。

  在机器学习和深度学习中,模型往往具有大量的参数,通过优化算法可以自动调整这些参数,使模型能够更好地拟合训练数据,并在未见过的新数据上具有更好的泛化能力。优化算法的目标是最小化损失函数,从而提高模型的预测准确性和性能。

拟合是指通过拟合函数曲线来逼近已知数据点的过程。

【0】最小二乘法

最小二乘法是一种用于拟合数据的数学方法。它的基本思想是找到一条曲线或者函数,使得该曲线与给定的数据点之间的距离最小。

下面举一个简单的例子来演示最小二乘法的过程:

假设有一组数据点(1, 2),(2, 3),(3, 4),(4, 5),(5, 6),我们希望通过最小二乘法找到一条直线来拟合这些数据点。

  • 第一步是选择拟合函数的形式。在这个例子中,我们选择一条直线作为拟合函数,即y = ax + b。其中,a是直线的斜率,b是直线的截距。
  • 第二步是建立最小二乘拟合的目标函数。最小二乘拟合的目标是使得实际数据点和拟合函数之间的距离最小。通常,这个距离可以用误差的平方和来表示。即:E(a, b) = Σ(yi - (axi + b))^2,其中(xi, yi)表示第i个数据点。
  • 第三步是求解目标函数的最小值。为了找到目标函数的最小值,我们需要对目标函数进行求导,并令导数等于零。这样我们就可以得到方程组:∂E/∂a = 0 ∂E/∂b = 0。将目标函数和其导数进行展开和化简,可以得到如下的方程组Σ(xi^2)a + Σxi b = Σ(xi yi) Σ(xi)a + nb = Σyi,其中,n表示数据点的个数。
  • 第四步是解方程组。通过解方程组,我们可以得到最小二乘拟合的斜率a和截距b的数值。这样就得到了拟合函数y = ax + b。在这个例子中,我们可以计算得到斜率a为1,截距b为1。因此,最小二乘拟合的直线函数为y = x + 1。最后,我们可以将最小二乘拟合的直线绘制在原始数据点上,以观察拟合的效果。
【1】线性拟合

  举个简单例子,假设有以下数据点:

x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 9, 11]

  我们可以假设这些数据点满足线性关系,即 y = mx + c,其中 m 是斜率, c 是截距。我们的目标是找到最佳的 m 和 c 的值,使得拟合函数能够最好地逼近这些数据点。在这个例子中,我们可以使用最小二乘法进行拟合。最小二乘法的目标是最小化实际观测值与拟合函数预测值之间的平方差。具体来说,我们需要找到 m 和 c 的值,使得误差的平方和最小。通过求解最小二乘问题,我们可以得到最佳的 m 和 c 的值。在这个例子中,最佳的拟合函数为 y = 2x + 1。当我们把这个拟合函数应用于新的 x 值时,可以得到预测的 y 值,从而实现对未知数据的预测。

  详细的该过程如下:

  1. 计算数据点的个数 n。
  2. 计算 x 和 y 的平均值:mean_x = (1+2+3+4+5)/5 = 3,mean_y = (3+5+7+9+11)/5 = 7。
  3. 计算 x 和 y 的差值:dx = [1-3, 2-3, 3-3, 4-3, 5-3] = [-2, -1, 0, 1, 2],dy = [3-7, 5-7, 7-7, 9-7, 11-7] = [-4, -2, 0, 2, 4]。
  4. 计算 dx 和 dy 的乘积之和:sum_dx_dy = (-2)(-4) + (-1)(-2) + 00 + 12 + 2*4 = 14。
  5. 计算 dx 的平方和:sum_dx_squared = (-2)^2 + (-1)^2 + 0^2 + 1^2 + 2^2 = 10。
  6. 计算斜率 m:m = sum_dx_dy / sum_dx_squared = 14 / 10 = 1.4。
  7. 计算截距 c:c = mean_y - m * mean_x = 7 - 1.4 * 3 = 2.8。

  线性拟合的结果为 y = 1.4x + 2.8。通过这个拟合函数,我们可以预测新的 x 值获得对应的 y 值。

【2】多项式拟合

  假设有以下数据点:x = [1, 2, 3, 4, 5] y = [1.2, 3.5, 9.1, 16.9, 28.3]

  我们可以假设这些数据点满足二次多项式关系,即 y = ax^2 + bx + c,其中 a、b、c 是多项式的系数。我们的目标是找到最佳的 a、b、c 的值,使得拟合函数能够最好地逼近这些数据点。多项式拟合的计算过程可以通过最小二乘法来求解最佳的拟合参数。具体而言,我们需要找到 a、b、c 的值,使得误差的平方和最小。

计算步骤如下:

  1. 假设初始的参数值为 a = 1,b = 1,c = 1。
  2. 对于每个数据点 (xi, yi),计算拟合函数的预测值 y_pred = axi^2 + bxi + c。
  3. 计算每个数据点的误差:error = yi - y_pred。
  4. 计算误差的平方和:sum_squared_error = (error1)^2 + (error2)^2 + ... + (errorn)^2。
  5. 根据最小二乘法的原理,我们需要找到能够最小化 sum_squared_error 的 a、b、c 的值。
  6. 使用优化算法,如梯度下降法或牛顿法,调整参数 a、b、c 的值,重复步骤 2-5,直到找到最佳的拟合参数。

  通过多项式拟合计算,最终可以得到最佳的 a、b、c 的值,从而得到多项式拟合的函数表达式。需要注意的是,多项式阶数的选择也会影响拟合效果,过高的阶数可能会导致过拟合,而过低的阶数可能会导致欠拟合。因此,在实际应用中,需要进行模型选择和评估来找到最合适的多项式阶数。

【3】非线性拟合

  假设有以下数据点:x = [1, 2, 3, 4, 5] y = [3.2, 7.5, 18.1, 39.9, 85.3]

  我们可以假设这些数据点满足指数关系,即 y = ae^(bx),其中 a 是指数函数的缩放因子, b 是指数函数的指数。我们的目标是找到最佳的 a 和 b 的值,使得拟合函数能够最好地逼近这些数据点。非线性拟合通常也使用最小二乘法来求解最佳的拟合参数。具体而言,我们需要找到 a 和 b 的值,使得误差的平方和最小。

计算步骤如下:

  1. 假设初始的参数值为 a = 1 和 b = 1。
  2. 对于每个数据点 (xi, yi),计算拟合函数的预测值 y_pred = ae^(bx)。
  3. 计算每个数据点的误差:error = yi - y_pred。
  4. 计算误差的平方和:sum_squared_error = (error1)^2 + (error2)^2 + ... + (errorn)^2。
  5. 根据最小二乘法的原理,我们需要找到能够最小化 sum_squared_error 的 a 和 b 的值。
  6. 使用优化算法,如梯度下降法或牛顿法,调整参数 a 和 b 的值,重复步骤 2-5,直到找到最佳的拟合参数。

【5】数据增强(Data Augmentation):为了增加训练数据的多样性和数量,可以通过一系列的图像增强操作,如翻转、旋转、缩放等,生成新的训练样本。

  这里随便搜一张图当例子吧,就下面这张,我随便搜的,你们想用别的也可以~我随便搜了一张.jpeg文件,大小是300×300的,命名为test保存在桌面(我习惯了,想存别的盘也可以滴~),然后先导入思密达~

  
【1】随机水平翻转:将图像水平翻转,即左右翻转。这个操作可以增加训练集的多样性,尤其在处理镜像对称的物体时很有用。
def random_flip(image):
    flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
    return flipped_image
【2】随机垂直翻转:将图像垂直翻转,即上下翻转。类似于水平翻转,垂直翻转也可以增加数据集的多样性。
def random_flip(image):
    flip = random.choice([Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM])
    flipped_image = image.transpose(flip)
    return flipped_image

【3】随机裁剪:随机选择图像的一部分进行裁剪。这个操作能够帮助模型学习不同部分之间的关系,同时也能够减轻过拟合。
# 随机裁剪
def random_crop(image, size):
    width, height = image.size
    crop_width, crop_height = size
    
    x = random.randint(0, width - crop_width)
    y = random.randint(0, height - crop_height)
    
    cropped_image = image.crop((x, y, x+crop_width, y+crop_height))
    return cropped_image

# 定义裁剪后的尺寸
crop_size = (200, 200)

【4】随机旋转:随机旋转图像一定的角度。这个操作可以模拟实际场景中的不同角度拍摄,增加模型的鲁棒性。
# 随机旋转
def random_rotation(image, angle_range):
    angle = random.uniform(-angle_range, angle_range)
    rotated_image = image.rotate(angle)
    return rotated_image

# 定义旋转角度范围
angle_range = 30
【5】随机缩放:随机改变图像的尺寸,可以放大或缩小图像。这个操作可以模拟不同距离下的拍摄,增加模型对尺度变化的适应能力。
# 随机缩放
def random_scaling(image, scale_range):
    scale = random.uniform(scale_range[0], scale_range[1])
    width, height = image.size
    new_width = int(width * scale)
    new_height = int(height * scale)
    scaled_image = image.resize((new_width, new_height))
    return scaled_image

# 定义缩放范围
scale_range = (1.0, 2.0)
【7】随机噪声添加:向图像中添加随机噪声,可以增加模型对噪声的鲁棒性。
# 随机噪声添加
def random_noise(image, noise_level):
    width, height = image.size
    pixels = np.array(image)
    noise = np.random.randint(-noise_level, noise_level, (height, width, 3))
    noisy_image = np.clip(pixels + noise, 0, 255).astype(np.uint8)
    noisy_image = Image.fromarray(noisy_image)
    return noisy_image

# 定义噪声级别
noise_level = 30
【6】随机亮度调整:随机改变图像的亮度。这个操作可以增加模型对不同光照条件下的适应性。
# 随机亮度调整
def random_brightness(image, brightness_level):
    pixels = np.array(image)
    brightness = np.random.randint(-brightness_level, brightness_level)
    brightened_image = np.clip(pixels + brightness, 0, 255).astype(np.uint8)
    brightened_image = Image.fromarray(brightened_image)
    return brightened_image

# 定义亮度调整级别
brightness_level = 50
【8】随机颜色调整:随机调整图像的颜色,如亮度、对比度、饱和度等。这个操作可以增加模型对不同颜色和光照条件的适应性。
# 随机颜色调整
def random_color(image, color_level):
    pixels = np.array(image)
    color_adjustment = np.random.randint(-color_level, color_level, size=3)
    adjusted_image = np.clip(pixels + color_adjustment, 0, 255).astype(np.uint8)
    adjusted_image = Image.fromarray(adjusted_image)
    return adjusted_image

# 定义颜色调整级别
color_level = 50

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

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

相关文章

微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)-2.0.1

客户端注册临时实例,GRPC处理 客户端服务发现 及订阅处理

无人机在化工消防救援中的应用,消防无人机应用场景分析

火灾对社会环境具有较大影响,因此需要重视消防灭火救援工作,注重现代化技术的运用,将无人机应用到救援过程并保障其应用质量。无人机是一项重要技术,便于消防灭火救援操作,使救援过程灵活展开,排除不利影响…

Netty源码系列 之 EventLoop run()方法 源码

EventLoop[实现类为NioEventLoop,我们研究NioEventLoop即可] EventLoop是一个单线程的线程池 核心作用:处理执行IO操作(accept,read,write事件),普通任务,定时任务 EventLoop封装…

Linux C/C++ 原始套接字:打造链路层ping实现

在C/C中,我们可以使用socket函数来创建套接字。我们需要指定地址族为AF_PACKET,协议为htons(ETH_P_ALL)来捕获所有传入和传出的数据包。 可以使用sendto和recvfrom函数来发送和接收数据包。我们需要构建一个合法的链路层数据包,在数据包的头…

Android14音频进阶:MediaPlayerService如何启动AudioTrack 下篇(五十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

Swift Combine 发布者订阅者操作者 从入门到精通二

Combine 系列 Swift Combine 从入门到精通一 1. Combine核心概念 你只需要了解几个核心概念,就能使用好 Combine,但理解它们非常重要。 这些概念中的每一个都通过通用协议反映在框架中,以将概念转化为预期的功能。 这些核心概念是&#x…

ubuntu配置conda环境

博主最近新换了电脑,原本的笔记本便被打入了冷宫,后来想到这个电脑也不能浪费,因此想着把原本的电脑重装一下,博主装了个双系统,分别是window10与ubuntu,今天便拿ubuntu系统练下手。 首先安装nvidia驱动 …

【人工智能】神奇的Embedding:文本变向量,大语言模型智慧密码解析(10)

什么是嵌入? OpenAI 的文本嵌入衡量文本字符串的相关性。嵌入通常用于: Search 搜索(结果按与查询字符串的相关性排序)Clustering 聚类(文本字符串按相似性分组)Recommendations 推荐(推荐具有…

Android 11 访问 Android/data/或者getExternalCacheDir() 非root方式

前言: 需求要求安装三方应用ExternalCacheDir()下载下来的apk文件。 getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/ 获取访问权限 如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码 android:requestLegacyExt…

第5章——深度学习入门(鱼书)

第5章 误差反向传播法 上一章中,我们介绍了神经网络的学习,并通过数值微分计算了神经网络的权重参数的梯度(严格来说,是损失函数关于权重参数的梯度)。数值微分虽然简单,也容易实现,但缺点是计…

12.0 Zookeeper 数据同步流程

在 Zookeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性。 ZAB 协议分为两部分: 消息广播崩溃恢复 消息广播 Zookeeper 使用单一的主进程 Leader 来接收和处理客户端所有事务请求,并采用 ZAB 协议的原子广播协议,将事务请求…

Linux内核与驱动面试经典“小”问题集锦(4)

接前一篇文章:Linux内核与驱动面试经典“小”问题集锦(3) 问题5 问:Linux内核中内存分配都有哪些方式?它们之间的使用场景都是什么? 备注:这个问题是笔者近期参加蔚来面试时遇到的一个问题。这…

【Web - 框架 - Vue】随笔 - 通过`CDN`的方式使用`VUE 2.0`和`Element UI`

通过CDN的方式使用VUE 2.0和Element UI VUE 网址 https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js源码 https://download.csdn.net/download/HIGK_365/88815507测试 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全

文章目录 1. 引言2. 项目依赖配置3. 使用Lambda表达式配置Spring Security4. 自定义身份验证逻辑5. 认证与授权注解5.1 Secured注解5.2 PreAuthorize和PostAuthorize注解 6. 总结 &#x1f389;Spring Boot整合新版Spring Security&#xff1a;Lambda表达式配置优雅安全 ☆* o(…

一文掌握SpringBoot注解之@Configuration知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

2024.2.6 模拟实现 RabbitMQ —— 数据库操作

目录 引言 选择数据库 环境配置 设计数据库表 实现流程 封装数据库操作 针对 DataBaseManager 单元测试 引言 硬盘保存分为两个部分 数据库&#xff1a;交换机&#xff08;Exchange&#xff09;、队列&#xff08;Queue&#xff09;、绑定&#xff08;Binding&#xff0…

使用Volo.Abp读取Sqlite表中数据

书接上文&#xff1a;Abp 从空白的WebApplication中添加EntityFrameworkCore生成数据库 开发环境&#xff1a;.NET6、Volo.Abp 数据库&#xff1a;Sqlite 说明&#xff1a;纯属个人强行入门。我个人觉得按照官网的操作不舒服&#xff0c;所以自己研究着来&#xff0c;请读者…

[NOIP2017 提高组] 宝藏

[NOIP2017 提高组] 宝藏 题目背景 NOIP2017 D2T2 题目描述 参与考古挖掘的小明得到了一份藏宝图&#xff0c;藏宝图上标出了 n n n 个深埋在地下的宝藏屋&#xff0c; 也给出了这 n n n 个宝藏屋之间可供开发的 m m m 条道路和它们的长度。 小明决心亲自前往挖掘所有宝…

Linux 文件比较工具

在Linux系统中&#xff0c;文件比较是一种常见的任务&#xff0c;用于比较两个文件之间的差异。文件比较可以帮助我们找出两个文件的不同之处&#xff0c;或者确定它们是否完全相同。在Linux中&#xff0c;有多种方法可以进行文件比较。 1. diff 在Linux中&#xff0c;diff命…

React+Antd实现省、市区级联下拉多选组件(支持只选省不选市)

1、效果 是你要的效果&#xff0c;咱们继续往下看&#xff0c;搜索面板实现省市区下拉&#xff0c;原本有antd的Cascader组件&#xff0c;但是级联组件必须选到子节点&#xff0c;不能只选省&#xff0c;满足不了页面的需求 2、环境准备 1、react18 2、antd 4 3、功能实现 …