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

【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2万字曝光:华尔街疯狂抢购比特币背后

作者/来源:Mark Goodwin and whitney Webb BitcoinMagazine 编译:秦晋 全文:19000余字 在最近比特币ETF获得批准之后,贝莱德的拉里-芬克透露,很快所有东西都将被「ETF化」与代币化,不仅威胁到现有的资产和商…

详细介绍Python网络编程模块

根据前面对网络分层棋型的介绍,我们知道实际的网络模型大致分为四层,这四层各有对应的网络协议提供支持, 网络层协议主要是 IP,它是所有互联网协议的基础,其中 ICMP(Internet Control Message Protocol&…

JAVA设计模式之策略模式详解

策略模式 1 策略模式概述 策略模式(strategy pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。 其实我们在现实生活中常常遇到实现某种目标存在多种策略…

Netty应用(一) 之 NIO概念 基本编程

目录 第一章 概念引入 1.分布式概念引入 第二章 Netty基础 - NIO 1.引言 1.1 什么是Netty? 1.2 为什么要学习Netty? 2.NIO编程 2.1 传统网络通信中开发方式及问题(BIO) 2.1.1 多线程版网络编程 2.1.2 线程池版的网络编程…

6.JavaScript中赋值运算符,自增运算符,比较运算符,逻辑运算符

赋值运算符 就是简单的加减乘除&#xff0c;没啥可说的这里直接上代码比较好 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…

一文彻底搞懂Kafka如何保证消息不丢失

文章目录 1. kafka 架构2. producer端是如何保证数据不丢失的2.1 同步发送2.2 异步发送2.3 批量发送 3. consumer端是如何保证数据不丢失的3.1 手动提交3.2 幂等性消费 4. broker端是如何保证数据不丢失的4.1 副本机制4.2 ISR机制4.3 刷盘机制 1. kafka 架构 Producer&#xff…

redis的主从配置模拟(一主双从)

目录 先来给大家扩展机道面试官经常会问到关于redis的题 一、redis有哪些好处 二、redis相比memcached有哪些优势 三、redis常见性能问题和解决方案 四、redis集群的工作原理 五、redis主从的原理 redis的主从配置模拟&#xff08;一主双从&#xff09; 一、准备环境 …

二级建造师试题答案?学生党都在用的6款搜题工具来了 #学习方法#学习方法#微信

作为大学生&#xff0c;我们应该善于利用各种学习工具&#xff0c;提高学习效率和质量。 1.灵兔搜题 这是一个公众号 包含大学网课、课后教材、选修课、mooc慕课及各类职业资格证、学历提升考试、公务员考试等常见题库。 下方附上一些测试的试题及答案 1、Uri主要由三部分组…

spark sql上线前的调试工作实现

背景 每个公司应该都有大数据的平台的吧&#xff0c;平台的作用就是可以在上面执行各种spark sql以及定时任务&#xff0c;不过一般来说&#xff0c;由于这些spark sql的上线不经过测试&#xff0c;所以可能会影响到生产的数据&#xff0c;这种情况下大数据平台提供一个上线前…

Blazor Wasm Google 登录

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

Docker 有哪些常见的用途?

Docker 是一种容器化技术&#xff0c;它允许应用程序在不同的环境之间具有一致的运行环境。这使得 Docker 在开发和运维领域中非常受欢迎&#xff0c;因为它简化了应用程序的部署和管理。以下是 Docker 的一些常见用途&#xff1a; 快速部署应用程序 Docker 允许开发人员和运…

Mysql Day04

mysql体系结构 连接层服务层引擎层&#xff08;索引&#xff09;存储层 存储引擎 存储引擎是基于表建立的&#xff0c;默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML&#xff08;数据增删改&#xff09;遵循ACID模…

c++之说_11|自定义类型 enum(枚举)与enumclass (c11新枚举)

至于枚举 会用就行 至少目前我感觉没什么太多问题 enum 被称为无作用域枚举 &#xff0c; enumclass / enumstruct 被称为有作用域枚举 看到了吧 语法规则 和 struct 差不多 只不过枚举成员 只是一个标志 它本质是数值 从上到下 下面的数根据上面的数 加 1 也可以直接…

Codeforces Round 923 (Div. 3) C. Choose the Different Ones(Java)

比赛链接&#xff1a;Round 923 (Div. 3) C题传送门&#xff1a;C. Choose the Different Ones! 题目&#xff1a; ** Example** ** input** 6 6 5 6 2 3 8 5 6 5 1 3 4 10 5 6 5 6 2 3 4 5 6 5 1 3 8 10 3 3 3 4 1 3 5 2 4 6 2 5 4 1 4 7 3 4 4 2 1 4 2 2 6 4 4 2 1 5 2 3 …

决策树之scikit-learn

实例 from sklearn.datasets import load_iris from sklearn import tree import matplotlib.pyplot as plt# Load iris dataset iris load_iris() X, y iris.data, iris.target# Fit the classifier clf tree.DecisionTreeClassifier() clf clf.fit(X, y)# Plot the deci…

【FPGA】Verilog:奇偶校验位发生器 | 奇偶校验位校验器

目录 0x00 奇偶校验位发生器 0x01 奇偶校验位校验器 0x02 错误检测器和纠错器

16.1 Spring框架_SpringIoC容器与Bean管理(❤❤❤❤)

16.1 Spring框架_SpringIoC容器与Bean管理 1. Spring IOC1.1 IoC控制反转 1. Spring IOC 1.1 IoC控制反转 需要自己查找3种苹果的特色,从而选择符合自己的需求 告诉水果店老板自己的口味,由老板推荐哪种苹果,省去自己查询水果特点 在java中,各种水果就是各种对象,买水果就是创…

【CC++】内存管理1:new + delete

前言 之前我们学习过C语言中的内存管理&#xff08;各种函数&#xff09;今天我们来学习C中的内存管理 引入 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {…

leetcode:63.不同路径二

dp数组含义&#xff1a;由初始位置到最终位置路径个数 递推公式&#xff1a;如果没有障碍再进行递推公式 初始化&#xff1a;1.若起始位置和终止位置有障碍路径个数为0 2.dp[i][0] 1和dp[0][j] 1的for循环条件都需要加上一个and dp[i][0] 0和and dp[0][j] 0. 3.遍历顺序…

在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务

背景 本人目前在境外某大学读博&#xff0c;校园网屏蔽了所有内网穿透的工具的数据包和IP访问&#xff0c;为了实现在家也能远程访问服务器&#xff0c;就不得不先开个学校VPN&#xff0c;再登陆。我们实验室还需要访问另一个大学的服务器&#xff0c;每次我都要去找另一个大学…