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

基于Pytorch的猫狗图片分类【深度学习CNN】

猫狗分类来源于Kaggle上的一个入门竞赛——Dogs vs Cats。为了加深对CNN的理解,基于Pytorch复现了LeNet,AlexNet,ResNet等经典CNN模型,源代码放在GitHub上,地址传送点击此处。项目大纲如下:
在这里插入图片描述


文章目录

  • 一、问题描述
  • 二、数据集处理
    • 1 损坏图片清洗
    • 2 抽取图片形成数据集
  • 三、图片预处理
    • (1)init 方法
    • (2)getitem方法
    • (3)len方法
    • (4)测试
  • 四、模型
    • 1 LeNet
    • 2 AlexNet模型
  • 五、训练
    • 1 开始训练
    • 2 tensorboard可视化
  • 六、不同模型训练结果分析
    • 1 LeNet模型
      • (1) 数据集数量=1000,无数据增强
      • (2) 数据集数量=4000,无数据增强
      • (3)数据集数量=4000,数据增强
      • (4)数据集=4000,数据增强
      • (5)使用dropout函数抑制过拟合
    • 2 AlexNet模型
    • 3 squeezeNet模型
    • 4 resNet模型
    • 总结
  • 七、预测


一、问题描述

基于训练集数据,训练一个模型,利用训练好的模型预测未知图片中的动物是狗或者猫的概率。

训练集有25,000张图片,测试集12,500 张图片。

数据集下载地址:https://www.kaggle.com/datasets/shaunthesheep/microsoft-catsvsdogs-dataset

截屏2024-02-19 15.56.01

二、数据集处理

1 损坏图片清洗

01_clean.py中,用多种方式来清洗损坏图片:

  1. 判断开头是否有JFIF
  2. 用imghdr库中的imghdr.what函数判断文件类型
  3. 用Image.open(filename).verify()验证图片是否损坏

结果如下:

截屏2022-04-20 下午1.54.15

2 抽取图片形成数据集

由于一万多张图片比较多,并且需要将Cat类和Dog类的图片合在一起并重新命名,方便获得每张图片的labels,所以可以从原图片文件夹复制任意给定数量图片到train的文件夹,并且重命名如下:

截屏2022-04-22 下午3.58.33

程序为:02_data_processing.py.

三、图片预处理

图片预处理部分需要完成:

  1. 对图片的裁剪:将大小不一的图片裁剪成神经网络所需的,我选择的是裁剪为**(224x224)**
  2. 转化为张量
  3. 归一化:三个方向归一化
  4. 图片数据增强
  5. 形成加载器:返回图片数据和对应的标签,利用Pytorch的Dataset包

dataset.py中定义Mydata的类,继承pytorch的Dataset,定义如下三个方法:

(1)init 方法

读取图片路径,并拆分为数据集和验证集(以下代码仅体现结构,具体见源码):

class Mydata(data.Dataset):"""定义自己的数据集"""def __init__(self, root, Transforms=None, train=True):"""进行数据集的划分"""if train:self.imgs = imgs[:int(0.8*imgs_num)]  #80%训练集else:self.imgs = imgs[int(0.8*imgs_num):]  #20%验证集"""定义图片处理方式"""if Transforms is None:normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])self.transforms = transforms.Compose([ transforms.CenterCrop(224), transforms.Resize([224,224]),transforms.ToTensor(), normalize])

(2)getitem方法

对图片处理,返回数据和标签:

 def __getitem__(self, index):return data, label

(3)len方法

返回数据集大小:

    def __len__(self):"""返回数据集中所有图片的个数"""  return len(self.imgs)

(4)测试

实例化数据加载器后,通过调用getitem方法,可以得到经过处理后的 3 × 244 × 244 3\times244\times244 3×244×244的图片数据

if __name__ == "__main__":root = "./data/train"train = Mydata(root, train=True)  #实例化加载器img,label=train.__getitem__(5)    #获取index为5的图片print(img.dtype)print(img.size(),label)   print(len(train))    #数据集大小
#输出
torch.float32
torch.Size([3, 224, 224]) 0
3200

裁剪处理后图片如下所示,大小为224X224

截屏2022-04-22 下午5.28.56

四、模型

模型都放在 models.py中,主要用了一些经典的CNN模型:

  1. LeNet
  2. ResNet
  3. ResNet
  4. SqueezeNet

下面给出重点关注的LeNet模型和AlexNet模型:

1 LeNet

LeNet模型是一个早期用来识别手写数字图像的卷积神经网络,这个名字来源于LeNet论文的第一作者Yann LeCun。LeNet展示了通过梯度下降训练卷积神经网络可以达到手写数字识别在当时最先进的结果,LeNet模型结构图示如下所示:

截屏2022-04-29 下午7.54.44

由上图知,LeNet分为卷积层块全连接层块两个部分,在本项目中我对LeNet模型做了相应的调整

  1. 采用三个卷积层
  2. 三个全连接层
  3. ReLu作为激活函数
  4. 在卷积后正则化
class LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()#三个卷积层self.conv1 = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=16,kernel_size=3,stride=2,),nn.BatchNorm2d(16),nn.ReLU(),nn.MaxPool2d(kernel_size=2),)self.conv2 = nn.Sequential(nn.Conv2d(in_channels=16,out_channels=32,kernel_size=3,stride=2,),nn.BatchNorm2d(32),nn.ReLU(),nn.MaxPool2d(kernel_size=2),)self.conv3 = nn.Sequential(nn.Conv2d(in_channels=32,out_channels=64,kernel_size=3,stride=2,),nn.BatchNorm2d(64),nn.ReLU(),nn.MaxPool2d(kernel_size=2),)#三个全连接层self.fc1 = nn.Linear(3 * 3 * 64, 64)self.fc2 = nn.Linear(64, 10)self.out = nn.Linear(10, 2)   #分类类别为2,def forward(self, x):x = self.conv1(x)x = self.conv2(x)x = self.conv3(x)x = x.view(x.shape[0], -1)x = self.relu(self.fc1(x))x = self.relu(self.fc2(x))x = self.out(x)return x

调用torchsummary库,可以观察模型的结构、参数:

截屏2022-04-30 上午12.35.15

2 AlexNet模型

2012年,AlexNet横空出世,这个模型的名字来源于论文第一作者的姓名Alex Krizhevsky。AlexNet使用了8层卷积神经网络,由5个卷积层和3个池化Pooling 层 ,其中还有3个全连接层构成。AlexNet 跟 LeNet 结构类似,但使⽤了更多的卷积层和更⼤的参数空间来拟合⼤规模数据集 ImageNet,它是浅层神经⽹络和深度神经⽹络的分界线。

特点:

  1. 在每个卷积后面添加了Relu激活函数,解决了Sigmoid的梯度消失问题,使收敛更快。
  2. 使用随机丢弃技术(dropout)选择性地忽略训练中的单个神经元,避免模型的过拟合(也使用数据增强防止过拟合)
  3. 添加了归一化LRN(Local Response Normalization,局部响应归一化)层,使准确率更高。
  4. 重叠最大池化(overlapping max pooling),即池化范围 z 与步长 s 存在关系 z>s 避免平均池化(average pooling)的平均效应

五、训练

训练在 main.py中,主要是对获取数据、训练、评估、模型的保存等功能的整合,能够实现以下功能:

  1. 指定训练模型、epoches等基本参数
  2. 是否选用预训练模型
  3. 接着从上次的中断的地方继续训练
  4. 保存最好的模型和最后一次训练的模型
  5. 对模型的评估:Loss和Accuracy
  6. 利用TensorBoard可视化

1 开始训练

main.py程序中,设置参数和模型(models.py中可以查看有哪些模型):

截屏2022-04-29 下午11.22.34

在vscode中点击运行或在命令行中输入:

python3 main.py

即可开始训练,开始训练后效果如下:

截屏2022-04-30 上午8.24.14

若程序中断,设置resume参数为True,可以接着上次的模型继续训练,可以非常方便的任意训练多少次

2 tensorboard可视化

在vscode中打开tensorboard,或者在命令行中进入当前项目文件夹下输入

tensorboard --logdir runs

即可打开训练中的可视化界面,可以很方便的观察模型的效果:

截屏2022-04-30 上午8.28.37

如上图所示,可以非常方便的观察任意一个模型训练过程的效果!

六、不同模型训练结果分析

1 LeNet模型

在用LeNet模型训练的过程中,通过调整数据集数量、是否用数据增强等不同的方法,来训练模型,并观察模型的训练效果。

(1) 数据集数量=1000,无数据增强

通过Tensorboard可视化可以观察到:

  1. 验证集准确率(Accuracy)在上升,训练30epoch左右,达到最终**63%**左右的最好效果
  2. 但验证集误差(Loss)也在上升,训练集误差一直下降
  3. 训练集误差接近于0

说明模型在训练集上效果好,验证集上效果不好,泛化能力差,可以推测出模型过拟合了。而这个原因也是比较好推测的,数据集比较少。

截屏2022-04-29 下午8.23.09

(2) 数据集数量=4000,无数据增强

同样过拟合了,但是最后的准确率能达到**68%**左右,说明数据集增加有效果

截屏2022-04-29 下午8.32.01

(3)数据集数量=4000,数据增强

这次数据集数量同上一个一样为4000,但采用了如下的数据增强:

  1. 水平翻转,概率为p=0.5
  2. 上下翻转,概率为p=0.1

我们可以看到这次一开始验证集误差是下降的,说明一开始没有过拟合,但到15个epoch之后验证集误差开始上升了,说明已经开始过拟合了,但最后的准确率在**71%**左右,说明数据增强对扩大数据集有明显的效果。

截屏2022-04-29 下午8.38.00

(4)数据集=4000,数据增强

这次数据集数量为4000,但采用了如下的数据增强:

  1. 水平翻转,概率为p=0.5
  2. 上下翻转,概率为p=0.5
  3. 亮度变化截屏2022-04-29 下午8.48.10

可以看到:

  1. 35个epoch之前,验证集误差呈下降趋势,准确率也一直上升,最高能到75%
  2. 但在35个epoch之后,验证集误差开始上升,准确率也开始下降

说明使用了更强的数据增强之后,模型效果更好了。

截屏2022-04-29 下午8.50.01

(5)使用dropout函数抑制过拟合

本次数据集和数据增强方式同(4),但是在模型的第一个全连接层加入dropout函数。

dropout原理:

训练过程中随机丢弃掉一些参数。在前向传播的时候,让某个神经元的激活值以一定的概率p(伯努利分布)停止工作,这样可以使模型泛化性更强。截屏2022-04-29 下午8.59.39

不使用dropout示意图 使用dropout示意图

这样相当于每次训练的是一个比较"瘦"的模型,更不容易过拟合

加入dropout函数后,训练85个epochs,可以观察到效果十分显著

  1. 验证集的误差总体呈现下降趋势,且最后没有反弹
  2. 训练集误差下降比较慢了!
  3. 准确率一直上升,最后可以达到76%

说明模型最后没有过拟合,并且效果还不错。

截屏2022-04-29 下午9.03.21

2 AlexNet模型

将AlexNet模型参数打印出来:

截屏2022-04-30 上午12.58.58

可以看到AlexNet相比LeNet,参数数目有数量级的上升,而在数据量比较小的情况下,很容易梯度消失,经过反复的调试:

  1. 要在卷积层加入正则化
  2. 优化器选择SGD
  3. 学习率不能过大

才能避免验证集的准确率一直在50%

经过调试,较好的一次结果如下所示,最终准确率能达到78%

截屏2022-04-30 上午1.10.08

3 squeezeNet模型

在后面两个模型中,使用迁移学习的方法。

**迁移学习(Transfer Learning)**是机器学习中的一个名词,是指一种学习对另一种学习> 的影响,或习得的经验对完成其它活动的影响。迁移广泛存在于各种知识、技能与社会规范> 的学习中,将某个领域或任务上学习到的知识或模式应用到不同但相关的领域或问题中。``截屏2022-04-29 下午11.58.32```

使用squeezeNet预训练模型,在迭代16个epoch后,准确率可以达到93%

截屏2022-04-29 下午11.51.43

4 resNet模型

使用resnet50的预训练模型,训练25个epoch后,准确率可以达到98%!

截屏2022-04-30 上午12.12.36

总结

模型测试集预测准确率
LeNet(无数据增强)68%
LeNet(数据增强)75%
LeNet(采用Dropout)76%
Alexnet78%
squeezeNet(迁移学习)93%
resNet98%

七、预测

模型训练好后,可以打开 predict.py对新图片进行预测,给定用来预测的模型和预测的图片文件夹:

 model = LeNet1() # 模型结构modelpath = "./runs/LeNet1_1/LeNet1_best.pth" # 训练好的模型路径checkpoint = torch.load(modelpath)  model.load_state_dict(checkpoint)  # 加载模型参数root = "test_pics"

运行 predict.py 会将预测的图片储存在 output文件夹中,如下图所示:

pre_04_cat

会给出预测的类别和概率。

相关文章:

基于Pytorch的猫狗图片分类【深度学习CNN】

猫狗分类来源于Kaggle上的一个入门竞赛——Dogs vs Cats。为了加深对CNN的理解,基于Pytorch复现了LeNet,AlexNet,ResNet等经典CNN模型,源代码放在GitHub上,地址传送点击此处。项目大纲如下: 文章目录 一、问题描述二、数据集处理…...

flutter sliver 多种滚动组合开发指南

flutter sliver 多种滚动组合开发指南 视频 https://youtu.be/4mho1kZ_YQU https://www.bilibili.com/video/BV1WW4y1d7ZC/ 前言 有不少同学工作中遇到需要把几个不同滚动行为组件(顶部 appBar、内容固定块、tabBar 切换、tabBarView视图、自适应高度、横向滚动&a…...

kafka生产者2

1.数据可靠 • 0:生产者发送过来的数据,不需要等数据落盘应答。 风险:leader挂了之后,follower还没有收到消息。。。。 • 1:生产者发送过来的数据,Leader收到数据后应答。 风险:leader应答…...

【LNMP】云导航项目部署及环境搭建(复杂)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍1.1项目环境架构LNMP1.2项目代码说明 二、项目环境搭建2.1 Nginx安装2.2 php安装2.3 nginx配置和php配置2.3.1 修改nginx文件2.3.2 修改vim /etc/p…...

nginx之状态页 日志分割 自定义图表 证书

5.1 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态 server{…...

数字人的未来:数字人对话系统 Linly-Talker + 克隆语音 GPT-SoVITS

🚀数字人的未来:数字人对话系统 Linly-Talker 克隆语音 GPT-SoVITS https://github.com/Kedreamix/Linly-Talker 2023.12 更新 📆 用户可以上传任意图片进行对话 2024.01 更新 📆 令人兴奋的消息!我现在已经将强…...

SpringMVC 学习(五)之域对象

目录 1 域对象介绍 2 向 request 域对象共享数据 2.1 通过 ServletAPI (HttpServletRequest) 向 request 域对象共享数据 2.2 通过 ModelAndView 向 request 域对象共享数据 2.3 通过 Model 向 request 域对象共享数据 2.4 通过 map 向 request 域对象共享数据 2.5 通过…...

✅技术社区项目—JWT身份验证

通用的JWT鉴权方案 JWT鉴权流程 基本流程分三步: ● 用户登录成功之后,后端将生成的jwt返回给前端,然后前端将其保存在本地缓存; ● 之后前端与后端的交互时,都将iwt放在请求头中,比如可以将其放在Http的身份认证的请求头 Author…...

5.2 Ajax 数据爬取实战

目录 1. 实战内容 2、Ajax 分析 3、爬取内容 4、存入MySQL 数据库 4.1 创建相关表 4.2 数据插入表中 5、总代码与结果 1. 实战内容 爬取Scrape | Movie的所有电影详情页的电影名、类别、时长、上映地及时间、简介、评分,并将这些内容存入MySQL数据库中。 2、…...

276.【华为OD机试真题】矩阵匹配(二分法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-矩阵匹配二.解题思路三.题解代码Python题解代码…...

java——多线程基础

目录 线程的概述多线程的创建方式一:继承Thread类方式二:实现Runnable接口方式三:利用Callable接口、FutureTask类来实现。Thread常用的方法 线程安全问题线程安全问题概述线程安全问题案例取钱案例描述模拟代码如下:执行结果 线程…...

Python服务器监测测试策略与工具:确保应用的高可用性!

在构建高可用性的应用程序时,服务器监测测试是至关重要的一环。Python作为一种强大的编程语言,提供了丰富的工具和库来帮助我们进行服务器监测测试。本文将介绍一些关键的策略和工具,帮助你确保应用的高可用性。 1. 监测策略的制定&#xff…...

Spring Security源码学习

Spring Security本质是一个过滤器链 过滤器链本质是责任链设计模型 1. HttpSecurity 【第五篇】深入理解HttpSecurity的设计-腾讯云开发者社区-腾讯云 在以前spring security也是采用xml配置的方式&#xff0c;在<http>标签中配置http请求相关的配置&#xff0c;如用户…...

大数据面试总结三

1、hdfs作为分布式存储系统&#xff0c;底层的实现的方式&#xff08;可能不正确&#xff09; 1、底层是一个分布式存储的&#xff0c;底层会将数据进行切分多个block块&#xff08;128M&#xff09;&#xff0c;并存储在不同的节点上面&#xff0c;这种分布式方式有助于提高数…...

AI赚钱套路总结和教程

最近李一舟和Sora 很火&#xff0c;作为第一批使用Sora赚钱的男人&#xff0c;一个清华学美术的跟人讲AI&#xff0c;信的人太多了&#xff0c;钱太好赚了。3年时间&#xff0c;李一舟仅通过卖课就赚了1.75亿元&#xff0c;其中《每个人的人工智能课》收入2786万元&#xff0c;…...

Linux安装jdk、tomcat、MySQL离线安装与启动

一、JDK和Tomcat的安装 1.JDK安装 直接上传到Linux服务器的&#xff0c;上传jdk、tomcat安装包 解压JDK安装包 //解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 置环境变量(JAVA_HOME和PATH) vim /etc/profile 在文件末尾添加以下内容&#xff1a; //java environment expo…...

Python爬虫-使用代理伪装IP

爬虫系列&#xff1a;http://t.csdnimg.cn/WfCSx 前言 我们在做爬虫的过程中经常会遇到这样的情况&#xff0c;最初爬虫正常运行&#xff0c;正常抓取数据&#xff0c;一切看起来都是那么的美好&#xff0c;然而一杯茶的功夫可能就会出现错误&#xff0c;比如 403 Forbidden&…...

Typora结合PicGo + 使用Github搭建个人免费图床

文章目录 一、国内图床比较二、使用Github搭建图床三、PicGo整合Github图床1、下载并安装PicGo2、设置图床3、整合jsDelivr具体配置介绍 4、测试5、附录 四、Typora整合PicGo实现自动上传 每次写博客时&#xff0c;我都会习惯在Typora写好&#xff0c;然后再复制粘贴到对应的网…...

【Redis】redis简介与安装

Redis 简介 Redis 是完全开源的&#xff0c;遵守 BSD 协议&#xff08;Berkeley Software Distribution 意思是"伯克利软件发行版&#xff09;&#xff0c;是一个高性能的 key-value 数据库。具有以下几个比较明显的特点&#xff1a; 性能极高 – Redis能读的速度可以达…...

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器&#xff0c;centos8.2系统&#xff0c;docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …...

编程笔记 html5cssjs 086 JavaScript 内置对象

编程笔记 html5&css&js 086 JavaScript 内置对象 一、Object二、Array三、String四、Number五、Math六、Date七、RegExp八、Function九、示例小结 JavaScript 内置对象是 JavaScript 语言本身定义的一系列预定义的对象&#xff0c;这些对象在全局作用域中可以直接使用&…...

AttributeError: ‘DataFrame‘ object has no attribute ‘set_value‘怎么修改问题的解决

在jupyternotebook中运行&#xff1a; def remplacement_df_keywords(df, dico_remplacement, roots False):df_new df.copy(deep True)for index, row in df_new.iterrows():chaine row[plot_keywords]if pd.isnull(chaine): continuenouvelle_liste []for s in chaine.…...

Jmeter内置变量 vars 和props的使用详解

JMeter是一个功能强大的负载测试工具&#xff0c;它提供了许多有用的内置变量来支持测试过程。其中最常用的变量是 vars 和 props。 vars 变量 vars 变量是线程本地变量&#xff0c;它们只能在同一线程组内的所有线程中使用&#xff08;线程组内不同线程之间变量不共享&#…...

c#高级-正则表达式

正则表达式是由普通字符和元字符&#xff08;特殊符号&#xff09;组成的文字形式 应用场景 1.用于验证输入的邮箱是否合法。 2.用于验证输入的电话号码是否合法。 3.用于验证输入的身份证号码是否合法。等等 正则表达式常用的限定符总结&#xff1a; 几种常用的正则简写表达式…...

说说UE5中的几种字符串类

在Unreal Engine 5 (UE5) 的C中&#xff0c;与字符串相关的类主要包括&#xff1a; FString&#xff1a; Unreal Engine中用于处理字符串的主要类&#xff0c;提供了丰富的字符串操作方法和功能。 FText&#xff1a; 用于表示本地化文本的类&#xff0c;可以包含多种语言的文本…...

(done) 如何判断一个矩阵是否可逆?

参考视频&#xff1a;https://www.bilibili.com/video/BV15H4y1y737/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这个视频里还暗含了一些引理 1.若 AX XB 且 X 和 A,B 同阶可逆&#xff0c;那么 A 和 B 相似。原因&#xff1…...

洗眼镜用的超声波清洗机哪一家更好一点?好用超声波清洗机排名

在我们日常生活中&#xff0c;眼镜、首饰、手表等细小物件的清洁一直是一个让人头疼的问题。传统的清洁方法不仅耗时耗力&#xff0c;还可能因为不当的操作而损伤到这些精细的物品。那么&#xff0c;有没有一种既快捷又安全的清洁方式呢&#xff1f;答案就是使用超声波清洗机。…...

(二十二)Flask之上下文管理第三篇【收尾—讲一讲g】

目录: 每篇前言:g到底是什么?生命周期在请求周期内保持数据需要注意的是:拓展—面向对象的私有字段深入讲解一下那句:每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者🔥🔥本文已…...

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…...

istio实战:springboot项目在istio中服务调用

目录 一、前言二、准备工作三、问题排查四、总结参考资料 一、前言 在经过前面几天k8s和Istio的安装之后&#xff0c;开始进入最核心的阶段。微服务在抛弃传统的服务注册和服务发现之后&#xff0c;是怎么在istio怎么做服务间的调用的呢&#xff1f;本次实战花费了我2-3天的时…...

随机分布模型

目录 前言 一、离散型随机变量 1.1 0-1分布 1.2 二项分布 1.3 帕斯卡分布 1.4 几何分布 1.5 超几何分布 1.6 泊松分布 二、连续型随机变量 2.1 均匀分布 2.2 指数分布 2.3 高斯分布/正态分布 2.4 分布&#xff08;抽样分布&#xff09; 2.5 t分布&#xff08;抽样…...

Visual Studio:Entity设置表之间的关联关系

1、选择表并右键-》新增-》关联 2、设置关联的表及关联关系并“确定”即可...

每日五道java面试题之spring篇(二)

目录&#xff1a; 第一题 Spring事务传播机制第二题 Spring事务什么时候会失效?第三题 什么是bean的⾃动装配&#xff0c;有哪些⽅式&#xff1f;第四题 Spring中的Bean创建的⽣命周期有哪些步骤&#xff1f;第五题 Spring中Bean是线程安全的吗&#xff1f; 第一题 Spring事务…...

287.【华为OD机试真题】字符串序列判定(贪心算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串序列判定二.解题思路三.题解代码Python题…...

Sentinel微服务流量治理组件实战上

目录 分布式系统遇到的问题 解决方案 Sentinel 是什么&#xff1f; Sentinel 工作原理 Sentinel 功能和设计理念 流量控制 熔断降级 Sentinel工作主流程 Sentinel快速开始 Sentinel资源保护的方式 基于API实现 SentinelResource注解实现 Spring Cloud Alibaba整合…...

Three.js加载PLY文件

这是官方的例子 three.js webgl - PLY 我在Vue3中使用&#xff0c;测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…...

chrome闪退后打不开问题 打开立即闪退

今天刚遇到&#xff0c;大概率是某些网站引起的闪退&#xff0c;重启和清理也不能解决问题 网上到处都是答非所问&#xff0c;还有什么打开chrome再进行设置这种回答 在此解决下 注意该方法根据我测试&#xff0c;唯一会损失的是chrome扩展&#xff0c;可以提前去 C:\Users…...

Slave被误写入数据如何恢复到主库

背景 在GreatSQL主从复制环境中&#xff0c;有时候可能会出现一些误操作&#xff0c;将本应该写入到主库的数据写入到了从库&#xff0c;导致主从数据不一致&#xff0c;影响数据同步。是否可以将写入从库的数据同步写入主库呢&#xff1f; 测试环境 角色IP地址数据库开放端…...

kafka生产者

1.原理 2.普通异步发送 引入pom&#xff1a; <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency><dependency><g…...

前后端分离Vue+node.js在线学习考试系统gqw7o

与其它应用程序相比&#xff0c;在线学习平台的设计主要面向于学校&#xff0c;旨在为管理员和学生、教师、院系提供一个在线学习平台。学生、教师、院系可以通过系统及时查看公告信息等。 在线学习平台是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xf…...

关于el-select值的回显问题 : 框内显示label值还是value值

<el-form-item label"状态" prop""><el-selectv-model"roleForm.state"class"m-2"size"large"style"width: 240px"placeholder"请选择状态"value-key"value"//value-key 与下面的ke…...

MCU多核异构通信原理

摘要&#xff1a; 本文结合瑞萨RZ/G2L 多核处理器&#xff0c;给大家讲述一下多核异构设计及通信的原理。 随着电子技术的不断发展&#xff0c;以及市场需求的日益增长&#xff0c;嵌入式系统不仅要求执行复杂的控制任务&#xff0c;还需要实时地采集和处理数据。 为了满足这…...

在autodl搭建stable-diffusion-webui+sadTalker

本文介绍在autodl.com搭建gpu服务器&#xff0c;实现stable-diffusion-webuisadTalker功能&#xff0c;图片音频 可生成视频。 autodl租GPU 自己本地部署SD环境会遇到各种问题&#xff0c;网络问题&#xff08;比如huggingface是无法访问&#xff09;&#xff0c;所以最好的方…...

【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)

背景需求 上学期的周安排里&#xff0c;每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录&#xff0c;观察的项目可以写不一样的&#xff0c; 如一位老师写沙水游戏&#xff0c;另一位写表演游戏 本学期&#xff0c;中班的自主游戏全部是户外的&am…...

机器学习:SVM算法(Python)

一、核函数 kernel_func.py import numpy as npdef linear():"""线性核函数:return:"""def _linear(x_i, x_j):return np.dot(x_i, x_j)return _lineardef poly(degree3, coef01.0):"""多项式核函数:param degree: 阶次:param …...

基于yolov5的人脸口罩检测,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的人脸口罩检测系统&#xff0c;支持图像检测&#xff0c;视频检测和实时摄像检测功能&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的人脸口罩检测系统是在pytorch框架下实现的&#…...

2024如何恢复旧版的Chrome的主题样式

起因 chrome 更新版本之后的主题样式变成了浅紫色的页签卡样式&#xff0c;感觉很不习惯&#xff0c;也很不喜欢 如何换回旧版主题 通过主题商店&#xff0c;安装旧版本的主题 主题商店搜索下面&#xff0c;或着直接访问下面的地址 Chrome Original White Theme https://…...

【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术

文生视频 Diffusion Transformer&#xff1a;Sora 核心架构、Stable Diffusion 3 同源技术 提出背景输入输出生成流程变换器的引入Diffusion Transformer (DiT)架构Diffusion Transformer (DiT)总结 OpenAI Sora 设计思路阶段1: 数据准备和预处理阶段2: 架构设计阶段3: 输入数据…...

Redis 服务集群、哨兵、缓存及持久化的实现原理和应用场景

Redis 是一种高性能的键值存储系统&#xff0c;已经成为了许多企业和互联网公司的核心技术之一。本文将介绍 Redis 的服务集群、哨兵以及缓存实现原理和应用场景&#xff0c;以帮助读者更好地理解和使用 Redis。 引言&#xff1a; 随着互联网应用规模不断扩大&#xff0c;Redi…...

通过Redis增减库存避坑

问题&#xff1a; 先执行get获取值&#xff0c;判断符合条件再执行incr、decr操作。在临界缓存失效的情况下&#xff0c;会默认赋值当前key为永不过期的0&#xff0c;再执行加减法&#xff0c;导致程序异常。 推荐解决方案&#xff1a; 1、限制接口频率&#xff1a;先incr&…...