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

经典视觉神经网络1 CNN

一、概述

        输入的图像都很大,使用全连接网络的话,计算的代价较高,图像也很难保留原本特征。

        卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用于计算机视觉任务,但它的成功启发了在其他领域应用,如自然语言处理等。

        CNN网络主要有三部分构成:卷积层、池化层和全连接层构成;卷积层负责提取图像中的局部特征;池化层用来大幅降低运算量并特征增强;全连接层类似神经网络的部分,用来输出想要的结果。

1、全连接网络处理图像缺陷

        参数结束了巨大:假设使用 100*1000的输入,神经元存在1000*1000,那么其中需要使用权重参数达到 10的十二次方。

        表达能力:全连接无法利用好图片像素的空间特性,降低了学习效率

2、卷积思想

        分为两个部分:卷和积 ; 卷 表示从左上 开始到右上,最后到右下的循环过程;积 表示将每次卷的内容进行乘积求和。

2.1、局部连接

        没有全连接方式,空间距离越近的像素相互影响越大;局部特征完成目标的识别

2.2、权重共享

        从一块区域学习的信息应用到其他区域;减少参数量,降低学习难度和计算量

二、 卷积层  Convolutional

1、卷积核

        一个矩阵,用于提取图像的特征(根据数值内容处理为具体特征意义的数值)

        卷积核(过滤器)的个数决定了卷积层输出特征矩阵的通道数;卷积核的大小一般设置为奇数形式的n*n,少数出现n*m(n决定行的卷积,m决定列的卷积)

2、卷积计算

原图像:5*5 的矩阵,经过边缘填充变成7*7的矩阵;                 卷积核:3*3的矩阵;  特征图: 5*5的矩阵

        卷积计算过程就是将卷积核放在图片信息上移动计算,每次达到下一个位置时,重合区域点对点相乘后全部相加,这个值就是特征图的一个格子数据,图像遍历完成后,所有的结果拼接变为特征图。

        如下图,左上角的区域对于卷积核位置相乘相加:

API:

        nn.Conv2d

参数:in_channels=  int   图像信息的通道数

           out_channels=  int   输出特征图的通道数

           kernel_size= int 或 tuple  卷积核的大小

           stride= int 或 tuple  步长默认1,表示行或列的移动距离

           padding= int,默认0   填充,保障边缘信息被提取

           dilation= int 或 tuple  默认1,表示无间隔,若为1表示每次卷积核映射图像数据时,点位要行列都间隔1个格子。

           groups 分组

           bias=  默认True,需要偏置

           padding_mode= str  填充模式,默认zero填充

           device= 设备

           dtype= 数据类型

代码:

import torch
import torch.nn as nn 
from matplotlib import pyplot as plt def test001():img = plt.imread('./data/1.jpg')img = torch.tensor(img, dtype=torch.float32).permute(2,0,1).unsqueeze(0)# 创建卷积核conv = nn.Conv2d(in_channels=3,  # 与输入特征图的通道数相同out_channels=3,  # 决定输出特征图的通道数kernel_size = 3, # 卷积核的大小padding=1 # 填充周边)img_c  = conv(img)img_c = img_c.permute(0,2,3,1).squeeze(0)plt.imshow(img_c.detach().numpy())plt.show()def test002():input = torch.randn(10,2,5,6)# 创建卷积核conv = nn.Conv2d(in_channels=2,  # 与输入特征图的通道数相同out_channels=3,  # 决定输出特征图的通道数kernel_size = (3,5), # 卷积核的大小padding=0, # 填充周边stride=1,bias=True)output = conv(input) # n = (w-f+2p)/s+1 --> H: (5-3+2*0)/1+1=3  W: (6-5+2*0)/1+1=2# w 通道大小# f 卷积核大小# p 填充大小# s 步长大小print(output.shape)if __name__ == '__main__':test001()

3、卷积计算的底层表示

        

4、padding  边缘填充

        每次卷积都会对图像矩阵的行列数降低,若想要保持图像大小不变,则需要填充边缘,一般设置padding值为 (图像矩阵大小 - 卷积核大小)/2

       如卷积计算的动图,就是padding设置为1 也就是图像矩阵大小减去卷积核大小(5-3)/2 的值

5、stride 步长

        stride太小:重复计算较多,计算量大,训练效率降低;

        stride太大:会造成信息遗漏,无法有效提炼数据背后的特征;

        步长为1:

         步长为2:

6、多通道计算

        输入通道多时(图片一般为三通道或四通道),需要卷积核的 in_channels 等于输入通道数(卷积核的通道数与输入通道数一致 ;卷积核的个数与输出通道数一致);

        

7、多卷积核计算

        从不同到的视角、不同的角度对图像特征进行提取。

8、特征图大小

        计算方式:

        若行列并不相等(图像、卷积核等),那么就需要单独计算:

        H_{out} = \frac{H_{in}-K_H+2*P}{S}+1               W_{out} = \frac{W_{in}-K_W+2*P}{S}+1

9、参数共享

        若数据为 32*32*3 的图像,使用了10*5*5的卷积核进行卷积操作(只需要考虑图像的通道了,图像大小不重要,因为参数共享),那么其需要的权重参数为

  • 5*5*3 =75 表示每一个卷积核所需要的参数 
  • 10*75=750 表示全部卷积核所需要的参数
  • 若考虑偏置系数,则需要加上每个卷积核一个偏置系数,总共为760个参数

若是选择使用全连接,那么所有的连接都需要使用权重参数(图像大小):32*32  *  3* 10*5*5 +10*5*5  = 768,250

三、池化层 Pooling

1、意义

        降低数据维度,减小模型,提高计算速度;主要用于对卷积层处理后的特征图进行下采样操作。

2、计算方式

       分为了 最大池化 maxpolling 和  平均池化  avgpooling

2.1、最大池化

        选取映射内容中最大的数值

        

2.2、平均池化

        所有映射值的平均值

        

3、步长 stride

        步长为1和步长为2 的对比

4、边缘填充 padding

5、多通道计算

        对每个输入通道分别池化,而不是像卷积层那样将各个通道的输入相加。

        池化层的输出和输入的通道数保持相等。

6、API

        nn.MaxPool2d

参数:kernel_size = int 或 tuple  池化核,于卷积核一样

           stride= int 或 tuple ,步长

           padding= int 或 tuple ,填充

           dilation=  int 或 tuple ,膨胀

           return_indices=  默认false,不返回取值对于下标

           ceil_mode=  默认false,向上取整

import torch
import torch.nn as nndef test01():torch.manual_seed(1)# 输入数据input = torch.randint(0,255,(1,64,224,224))print("输入数据:\n",input[0][0][:6,:6])# 池化核pool = nn.MaxPool2d(kernel_size=2,# 池化核大小stride=2,return_indices=True)# 对数据池化out,return_indices  = pool(input)print("下标:\n",return_indices[0][0][:6,:6])print("输出结果:\n",out.shape)if __name__ == '__main__':test01()

四、卷积扩展

1、反卷积

        因为一般情况下,使用卷积会造成缩小,所以需要使用填充对图像大小调整,称为反卷积

2、空洞卷积(膨胀)

        使用参数 dilation 控制膨胀程度,1表示不膨胀,2表示膨胀一格距离。

        

import torch
import torch.nn as nndef test003():torch.manual_seed(1)# 输入数据x = torch.randn(1,1,7,7)# 创建一个卷积核conv = nn.Conv2d(in_channels=1,out_channels=1, kernel_size=3, stride=1,dilation=2,)out = conv(x)print(out.shape)print(out)if __name__ == '__main__':test003()

3、可分离卷积

3.1、空间可分离卷积

        将卷积核拆分为两个独立的核计算(3*3 --> 3*1  + 1*3 ),拆分后计算量比标准卷积更少。

如图:5*5 的数据矩阵需要使用3*3的卷积核计算,先使用3*1的卷积核计算得到3*5得数据,在使用1*3得卷积和得到3*3得数据结果。

import torch
import torch.nn as nn# def test004():
class nornalModel(nn.Module):def __init__(self):super(nornalModel, self).__init__()self.conv1 = nn.Conv2d(in_channels=8, out_channels=8, kernel_size=3,stride=1,padding=0,bias=False)def forward(self, x):self.conv1.weight.data.fill_(1)x = self.conv1(x)return xclass waveModel(nn.Module):def __init__(self):super(waveModel, self).__init__()self.conv1 = nn.Conv2d(in_channels=8, out_channels=8, kernel_size=(3,1),stride=1,padding=0,bias=False)self.conv2 = nn.Conv2d(in_channels=8, out_channels=8, kernel_size=(1,3),stride=1,padding=0,bias=False)def forward(self,x):self.conv1.weight.data.fill_(1)self.conv2.weight.data.fill_(1)x = self.conv1(x)x = self.conv2(x)return xif __name__ == '__main__':torch.manual_seed(1)input = torch.randn(1,8,5,5)model1 = nornalModel()for name, param in model1.named_parameters():print(name, param.shape)torch.manual_seed(1)input = torch.randn(1,8,5,5)model2 = waveModel()for name, param in model2.named_parameters():print(name, param.shape)# conv1.weight torch.Size([8, 8, 3, 3])
# conv1.weight torch.Size([8, 8, 3, 1])
# conv2.weight torch.Size([8, 8, 1, 3])

3.2、深度可分离卷积

        在空间分离基础上加入通道分离,使用参数 groups进行划分(要求输入通道和输出通道都能被groups设定整数值整除);也就是使用卷积核得不同通道处理输入输出得不同通道。

import torch
import torch.nn as nnclass Net1(nn.Module):def __init__(self):super(Net1, self).__init__()self.conv1 = nn.Conv2d(in_channels=8,out_channels=8,kernel_size=3,stride=1,bias=False)def forward(self, x):return self.conv1(x)class deepmovemodel(nn.Module):def __init__(self):super(deepmovemodel, self).__init__()self.conv1 = nn.Conv2d(in_channels=8,out_channels=8,kernel_size=3,stride=1,bias=False,groups=8  # 卷积核数量等于通道数)self.conv2 = nn.Conv2d(in_channels=8,out_channels=8,kernel_size=1,stride=1,bias=False)def forward(self, x):x = self.conv1(x)torch.ones_like(self.conv2.weight.data)x = self.conv2(x)return xif __name__ == '__main__':torch.manual_seed(1)input = torch.randn(1,8,5,5)model1 = Net1()for name, param in model1.named_parameters():print(name,param.size())model2 = deepmovemodel()for name, param in model2.named_parameters():print(name,param.size())# conv1.weight torch.Size([8, 8, 3, 3])
# conv1.weight torch.Size([8, 1, 3, 3])
# conv2.weight torch.Size([8, 8, 1, 1])

3.3、扁平卷积

        等同空间可分离卷积,如3*3得卷积核被拆分为3个1*1得卷积核,分别计算通道、宽度、高度三个方面内容。

3.4、分组卷积

        等同深度可分离卷积。

        AlexNet论文中最先提出来的概念,当时主要为了解决GPU显存不足问题。

        卷积核被分成不同的组,每组负责对相应的输入层进行卷积计算,最后再进行合并。

3.5、感受野

        理解为视野范围。

        卷积操作从左到右为5*5矩阵经过3*3的卷积核卷积后得到3*3的矩阵,在经过3*3的卷积核卷积后得到1*1的矩阵,效果等同于5*5矩阵直接经过5*5的卷积核卷积操作。

        感受野就是逆向的结果,两个3*3的卷积核且步长为1,感受野为5*5;同理,三个3*3的卷积核,感受野就为7*7,四个3*3为9*9(步长为1)

        感受野的作用:假设原本输入大小为  h × w × C,并且使用了C个卷积核,那么标准的一个7*7卷积核就需要 c* (h*w*c) = 49C^2 ,使用三个3*3的卷积核,那么其感受野也还是7*7,但是参数就变成了 3*C*(3*3*C) = 27C^2

五、卷积神经网络案例

1、模型结构

输入:(1,32,32)通道为1,宽高为32的数据

卷积层1:输入1 个通道(等于输入数据的通道数),输出6个通道(卷积核个数),卷积核大小为3*3;

特征图1:数据32*32,卷积核3*3,步长1,填充0:(32-3+2*0)/1  +1 =30,所以为6个30*30的特征图

池化层1:使用6个2*2的池化核进行处理

特征图2:30*30池化后(2*2,步长为2)结果为其一半 15*15

卷积层2:输入6个通道,输出16个通道,卷积核为3*3

特征图3:15*15卷积后得到13*13 的大小;  16个13*13

池化层2:使用16个2*2的池化核进行处理

特征图4:13*13池化后(2*2,步长为2)结果为其一半(向下取整,因为步长为2,所以取不到最右边和最下边的数据); 16个6*6

全连接1:输入需要16*6*6=576 维,输出为 120维

全连接2:输入120维,输出为 84维

全连接3:输入84维,输出为 10维

2、使用代码展现网络模型

import torch
import torch.nn as nnclass numberModee(nn.Module):def __init__(self):super(numberModee, self).__init__()self.C1 = nn.Sequential(nn.Conv2d(in_channels=1, # 输入通道out_channels=6, # 输出通道kernel_size=3, # 卷积核大小stride=1, # 步长padding=0 # 填充),nn.ReLU())self.S2 = nn.MaxPool2d(kernel_size=2,stride=2,padding=0)self.C3 = nn.Sequential(nn.Conv2d(in_channels=6, out_channels=16,kernel_size=3, stride=1, padding=0),nn.ReLU())self.S4 = nn.MaxPool2d(kernel_size=2,stride=2,padding=0)self.C5 = nn.Sequential(nn.Linear(16*6*6, 120),nn.ReLU())self.F6 = nn.Sequential(nn.Linear(120, 84),nn.ReLU())self.OUTPUT = nn.Sequential(nn.Linear(84, 10),nn.Softmax(dim=1))def forward(self, x):x = self.C1(x)x = self.S2(x)x = self.C3(x)x = self.S4(x)x = x.view(x.size(0),-1)x = self.C5(x)x = self.F6(x)x = self.OUTPUT(x)return xif __name__ == '__main__':input = torch.randn(1, 1, 32, 32)print(input)print(input.shape)net = numberModee()out = net(input) # 6 @ 30*30  # 6 @ 15*15# 16 @ 13*13# 16 @ 6*6# 120# 84# 10print(out)print(out.shape)

相关文章:

经典视觉神经网络1 CNN

一、概述 输入的图像都很大,使用全连接网络的话,计算的代价较高,图像也很难保留原本特征。 卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...

解决跨域问题方案

跨域问题在前后端分离架构下尤为常见,是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度,帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库,这个介绍就不多说了,网上说得很详细。 接下来直接记录下如何使用(当然也不限于自动化的使用) 1.安装requests requests也需要安装一下 pip install requests2.requests请求 1.常用的请求方法…...

文本三剑客——grep命令

介绍 作用 Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 常用选项 -i:忽略大小写进行匹配。-v:反向查找,只打印不匹配的行。-n:显示匹配行的行号。-r:递归查找子目录…...

ASP 实例:深入解析与实战应用

ASP 实例:深入解析与实战应用 引言 ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于动态网页设计和开发。它允许开发者创建和运行动态交互性网页,如访问数据库、发送电子邮件等。本文将深入探讨AS…...

文件的操作

什么是文件 如何是数据持久化——保存在硬盘上(文件,数据库)磁盘上的文件是文件在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件,比如源文件(.c文件)读a文件写到b文件里,此时a…...

【简单谈谈UCIE PHY LSM链路训练】

UCIE PHY LSM链路训练 1 UCIE PHY LSM1.1 RESET1.2 SBINT1.3 MBINT1.3.1 MBINT.PARAM1.3.2 MBINIT.CAL1.3.3 MBINIT.REPAIRCLK1.3.4 MBINIT.REPAIRVAL1.3.5 MBINIT.REVERSALMB1.3.6 MBINIT.REPAIRMB 1.4 MBTRAIN1.5 LINKINIT1.6 ACTIVE1.7 L1/L21.8 PHY.RETRAIN1.9 TRAIN.ERROR…...

数学二常用公式(高等数学+线性代数)

目录 高等数学第一章 函数、极限和连续第二章 一元函数微分学第三章 一元函数积分学第四章 多元函数微分学第五章 多元函数积分学第六章 常微分方程 线性代数线性代数篇章涉及的知识内容及常用公式第一章 行列式第二章 矩阵第三章 向量第四章 线性方程组第五章 矩阵的相似化简第…...

【Java计算机毕业设计】Springboot+vue动物保护协会管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…...

鸿蒙面试---1208

HarmonyOS 三大技术理念 分布式架构:HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如,它允许用户在不同的智能设备(如手机、平板、智能手表等)之间共享数据和功能。比如,用户可以在手机上开始编辑文档&…...

【论文阅读】一名系统研究者的攀登之路

作者:陈海波 陈海波是操作系统、系统结构、并行与分布式系统方向大牛,上海交通大学大牛团队 学习体会: 计算机系统论文准备周期较长,十有八九都是在解决新问题的路上~ 因此学习大佬的学习经验,少踩坑,把主…...

MySQL 索引(B+树)详解

MySQL 索引(B树)详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...

【不稳定的BUG】__scrt_is_managed_app()中断

【不稳定的BUG】__scrt_is_managed_app函数中断 参考问题详细的情况临时解决方案 参考 发现出现同样问题的文章: 代码运行完所有功能,仍然会中断 问题详细的情况 if (!__scrt_is_managed_app())exit(main_result);这里触发了一个断点很奇怪,这中断就发生了一次,代…...

护网蓝队日志分析

Windows日志分析 一、事件查看器 在「事件查看器」中,可以查看系统中记录的所有事件日志。操作步骤如下: 1、打开 Windows 事件查看器 1、使用Windows R快捷键打开「运行」对话框,输入eventvwr.msc,然后按回车键打开事件查看…...

滤波器设计(八)-McClellan-Parks design algorithm

步骤 Initialization: Choose an extremal set of frequences {ωi(0)}.Finite Set Approximation: Calculate the best Chebyshev approximation on the present extremal set, giving a value δ(m) for the min-max error on the present extremal set.Interpolation: Calc…...

ElasticSearch常见的索引_集群的备份与恢复方案

方案一:使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移,包括全量、增量备份和恢复。 方案二:通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移,或者跨集…...

C#对Excel表csv文件的读写操作

C#对Excel表csv文件的读写 一、变量定义二、加载主窗口三、创建表头四、向表中添加数据五、从表中读取数据六、单击按钮向表中添加数据七、测试验证 一、变量定义 #region 变量定义 private string CurAppExeDir System.AppDomain.CurrentDomain.BaseDirectory; private strin…...

【MySQL】mysql服务器架构

目录 1、背景2、mysql服务器架构解释3、总结 1、背景 简单理解一下mysql的服务器架构。 2、mysql服务器架构解释 mysql的架构图如下: 主要分为三部分:客户端、服务端、存储引擎。接下来我们来解释一下各个部分: 客户端 用来连接mysql服务…...

Vue Web开发(三)

1. 添加el-menu样式 将Home.vue文件重新命名为Main.vue文件,本节涉及新的home目录和User目录下的index.js文件,因为侧边导航栏Aside和顶部Header是在每一个页面都存在的,所以重新命名为Main,而home文件夹下的index.js则对应系统首…...

Java项目实战II基于微信小程序的小区租拼车管理信息系统 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,小区居民对于出行方…...

云安全:云计算安全

目录 云安全的定义和重要性 云安全的关键组成部分 云安全技术实现 云安全最佳实践 云安全的定义和重要性 云安全是指在云计算环境中保护数据、应用程序和相关服务不受威胁的一系列策略、技术和控制措施。随着云计算的快速发展,云安全已成为企业和个人用户最关心…...

git clone加速(亲测好用)

用公司网git clone特别卡,本以为宿舍网会好一点,回来下的时候也只有几十kb. 然后找到了一种方法,就是在原始下载命令前加一个gitclone 比如 git clone https://github.com/infiniflow/ragflow.git替换成 git clone https://gitclone.com/gi…...

Python 网络爬虫进阶:突破数据采集的边界

在成功踏入 Python 网络爬虫的入门之境后,我们犹如初窥宝藏的探险家,领略到了数据采集世界的奇妙与潜力。而此刻,进阶之路在脚下徐徐展开,它将引领我们深入这片领域的更深处,挖掘出更为强大和精妙的爬虫技艺&#xff0…...

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代,安全问题已成为技术领域不可忽视的…...

[论文解读]Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting

Street Gaussians是年初的一篇动态场景重建论文, 在当时是做到了SOTA,至今为止很多自动驾驶或者动态场景重建的文章都会将Street Gaussians作为实验的比较对象,这也表明了这篇文章的重要性,今天就一起来看看这篇文章; …...

在Github上上传大文件的办法(图文版)

在上一篇笔记中,笔者用图文的形式介绍了如何在GITHUB中上传文件夹。 可参考这篇笔记 在GITHUB上传本地文件指南(详细图文版)-CSDN博客 但接下来,笔者在继续上传别的文件的过程中,遇到了新的问题,gitbash…...

关于springBoot+vue项目中配置SSL证书问题

前端可以通过https进行访问 1.前端在访问后端接口时,使用https进行访问,在request.js配置文件中,这个文件是配置axios的基本请求的,在基础请求地址中改为https方式 2.需要在Linux中的nginx中配置ssl证书,具体请参考&…...

GitLab

Git服务器 一、概念 C/S 架构的 Git 服务端是存放代码的公用平台是多人并行协作的核心部分通常单独部署在一台独立的服务器上客户端可以通过网络访问服务器上的仓库 GitLab搭建 一、部署 1、安装依赖包 [rootGitLab ~]# yum -y install policycoreutils-python-utils.noarc…...

TCP客户端服务器端通信(线程池版)

1、什么是监听套接字,和UDP相比,TCP为什么文件描述符变多了? 在网络编程中,TCP和UDP是两种常见的传输协议,它们之间最大的不同之一在于连接的管理方式。为了更好地理解这个区别,我们可以用一个生动的比喻来…...

go语言的成神之路-标准库篇-fmt标准库

目录 一、三种类型的输出 print: println: printf: 总结: 代码展示: 二、格式化占位符 %s:用于格式化字符串。 %d:用于格式化整数。 %f:用于格式化浮点数。 %v&#xff1…...

高级java每日一道面试题-2024年12月08日-JVM篇-什么是类加载器?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是类加载器? 我回答: 在Java高级面试中,类加载器(ClassLoader)是一个重要的概念,它涉及到Java类的加载和初始化机制。以下是对类加载器的详细解释: 定义与作用 类加…...

数据库之连接池Druid

Druid是一个由阿里巴巴开源的高性能数据库连接池组件,它在许多项目中都是首选的连接池实现。Druid不仅提供了高效的连接管理,还具备丰富的监控和统计功能,以及强大的安全特性。 一、功能介绍 1、高效连接管理 Druid采用了高效的连接管理机…...

【如何审稿】Notes on Constructive and Positive Reviewing

学习体会: 用chatgpt翻译的2005年审稿人如何审稿的一篇文章, 学着用审稿人的角度评审自己写的稿件~ 全文摘录: 作为审稿人,您代表的是您的社区,您的审稿意见应当是专业和建设性的。会议的质量取决于审稿的质量。审稿人的任务是选出高质量、创…...

1.文本方块方法(Spacy Text Splitter 方法)Can‘t find model ‘zh_core_web_sm‘

一、概述 执行如下: def split_spacy(text):import spacynlp spacy.load( "zh_core_web_sm" ) doc nlp(text) for s in doc.sents: print(s) # d:\programdata\anaconda3\envs\python310\lib\site-packages if __name__"__main__":text &q…...

IT类项目实施流程

一、项目启动准备阶段 (一)甲方组建项目委员会 **甲方委员会确立:**指定负责人,全权负责整个项目人员、启动及时间调配、需求确定及需求变更、项目节点的验收、项目款项的支付工作。 (二) 乙方组建项目实施工作组 **乙方实施工作组确立:**工作组主要包括项目经理、需…...

数据分析平台业务落地痛点分析

在当今数字化时代,数据已成为企业决策和运营的核心驱动力。数据分析平台作为数据处理和洞察的重要工具,其业务落地过程中的痛点分析对于企业的数据战略至关重要。本文将通过概述、功能点、背景、业务点、底层原理等多个方面,深入剖析数据分析…...

java语言学习(5)

第九章 目录 类变量和类方法 理解main方法语法 代码块 单列设计模式 final关键字 抽象类 接口 类变量/静态变量 该变量最大的特点就是会被本类的所有对象实例共享,类变量可以通过类名来访问 分析代码,探讨内存的分配 class Child{private Str…...

基于SSM框架点餐管理系统(计算机毕业设计)论文,Java

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...

独家首发 | 基于 KAN、KAN卷积的轴承故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...

nginx-proxy-manager初次登录502 bad gateway

nginx-proxy-manager初次登录502 bad gateway 按照官方docker-compose安装后,页面如下: 默认账户密码: adminexample.com/changeme点击sign in,提示Bad Gateway 打开调试 重装后依然如此,最后查阅githup issue 找到答案 https://github.com/NginxProxyManager/nginx-proxy-…...

棋牌项目Go的日志打印问题

棋牌项目Go的日志打印问题 项目使用 go work 管理模块 github.com/spf13/viper 通过 application.yml 加载配置 $ tree . ├── README.md ├── common │ ├── application.yml │ ├── config │ │ └── config.go │ ├── go.mod │ ├── go.su…...

基于SpringBoot校园台球厅人员与设备管理系统设计与实现

1.1课题背景与意义 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管理的兴起…...

样品前处理工作站自动化操作

样品前处理工作站通过集成多种技术和自动化模块,实现了对样品的高效、精准处理。以下是实现自动化操作的关键步骤和原理: 1、集成多种技术:工作站通常集成了液体处理、固相萃取、离心、过滤等多种技术。这些技术的结合使得工作站能够完成从样…...

在 Vue 3 中实现点击按钮后禁止浏览器前进或后退

在 Vue 3 中实现点击按钮后禁止浏览器前进或后退&#xff0c;我们可以通过 ref 和 watch 来管理状态&#xff0c;同时使用 onBeforeUnmount 来清理事件监听。 使用 Vue 3 实现&#xff1a; <template><div><button click"disableNavigation">点击…...

【Redis集群】使用docker compose创建docker集群,并暴露外部接口

使用 Docker Compose 创建一个 Redis 集群并暴露外部接口需要配置 docker-compose.yml 文件。以下是一个基本的步骤&#xff0c;包括 Redis 集群的创建和外部接口的暴露。 1、创建 docker-compose.yml 首先&#xff0c;您需要创建一个 docker-compose.yml 文件&#xff0c;配…...

RabbitMq 基础

文章目录 一、初识 MQ1.1 同步调用&#xff1a;1.2 异步调用&#xff1a; 二、RabbitMQ三、SpringAMQP3.1 依赖和配置文件3.2 消息发送和接收&#xff1a;3.2.1 消息发送&#xff1a;3.2.2 消息接收&#xff1a; 3.3 WorkQueues 模型&#xff1a;3.4 交换机类型&#xff1a;3.4…...

类文件结构详解

一、引言 Java 类文件是 Java 虚拟机执行的基本单元。它包含了 Java 程序的字节码以及其他重要的元数据信息。了解类文件结构可以帮助我们更好地理解 Java 程序的编译过程、运行机制以及如何进行优化。 二、类文件结构概述 Java 类文件采用一种紧凑的二进制格式&#xff0c;主…...

01_Linux

一.Linux简介 1.1 Linux介绍 Linux是一套免费使用和自由传播的操作系统。说到操作系 统&#xff0c;大家比较熟知的应该就是Windows和MacOS操作系统&#xff0c; 我们今天所学习的Linux也是一款操作系统 1.2 Linux发展历史 时间&#xff1a;1991年 地点&#xff1a;芬兰赫尔…...

区块链与AI结合:驱动Web3的未来发展

Web3作为下一代互联网的核心理念&#xff0c;强调去中心化、用户主权和透明性。而区块链技术和人工智能&#xff08;AI&#xff09;则是推动Web3发展的两大关键力量。两者的结合不仅为Web3带来了新的可能性&#xff0c;还推动了智能化、透明化、自治化等特点的实现。本文将探讨…...

如何解决 docker 容器中 “-bash: ping: command not found” 错误 ?

在 Docker 的世界里&#xff0c;遇到错误是学习曲线的一部分&#xff0c;其中一个常见的错误是&#xff1a; -bash: ping: command not found。当您在 Docker 容器中尝试使用 ping 命令来测试与其他网络机器或服务的连接&#xff0c;但该命令在您的容器环境中不可用时&#xff…...