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

高端 网站设计公司/成都网站优化seo

高端 网站设计公司,成都网站优化seo,免费制作简历app,网站建设有什么方法连接数据库CNN 视觉处理三大任务:分类、目标检测、图像分割上游:提取特征,CNN下游:分类、目标、分割等,具体的任务 概述 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域, 往往我们输入的图像都很大&am…

CNN

  • 视觉处理三大任务:分类、目标检测、图像分割
  • 上游:提取特征,CNN
  • 下游:分类、目标、分割等,具体的任务

概述

  • 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域, 往往我们输入的图像都很大,使用全连接网络的话,计算的代价较高。另外图像也很难保留原有的特征,导致图像处理的准确率不高
  • 卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。最初,CNN主要应用于计算机视觉任务,但它的成功启发了在其他领域应用,如自然语言处理等。
  • 卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络. 卷积层的作用就是用来自动学习、提取图像的特征。

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

全连接的局限性

  • 全连接神经网络并不太适合处理图像数据

参数量巨大

  • 全连接结构计算量非常大,假设我们有1000×1000的输入,如果隐藏层也是1000×1000大小的神经元,由于神经元和图像每一个像素连接,则参数量会达到惊人的1000×1000×1000×1000,仅仅一层网络就已经有$10^{12}$个参数。

表达能力太有限

  • 全连接神经网络的角色只是一个分类器,如果将整个图片直接输入网络,不仅参数量大,也没有利用好图片中像素的空间特性,增加了学习难度,降低了学习效果。

卷积思想

  • 卷:从左往右,从上往下
  • 积:乘积,求和

概念

局部连接
  • 局部连接可以更好地利用图像中的结构信息,空间距离越相近的像素其相互影响越大。
  • 根据局部特征完成目标的可辨识性
权重共享
  • 图像从一个局部区域学习到的信息应用到其他区域。
  • 减少参数,降低学习难度。

卷积层

卷积核

1.卷积核是卷积运算过程中必不可少的一个“工具”,在卷积神经网络中,卷积核是非常重要的,它们被用来提取图像中的特征。

2.卷积核其实是一个小矩阵,在定义时需要考虑以下几方面的内容:

  • 卷积核的个数:卷积核(过滤器)的个数决定了其输出特征矩阵的通道数
  • 卷积核的值:卷积核的值是自定义的,根据想要提取的特征来进行设置,后续进行更新。
  • 卷积核的大小:常见的卷积核有1×1、3×3、5×5等,一般都是奇数 × 奇数。

3.下图就是一个3×3的卷积核:

卷积计算

卷积计算过程

1.卷积的过程是将卷积核在图像上进行滑动计算,每次滑动到一个新的位置时,卷积核和图像进行点对点的计算,并将其求和得到一个新的值,然后将这个新的值加入到特征图中,最终得到一个新的特征图。

  • input 表示输入的图像
  • filter 表示卷积核, 也叫做滤波器
  • input 经过 filter 的得到输出为最右侧的图像,该图叫做特征图
  • 左上角的点计算方法:

  • 按照上面的计算方法可以得到最终的特征图为:

2.卷积的重要性在于它可以将图像中的特征与卷积核进行卷积操作,从而提取出图像中的特征

3.可以通过不断调整卷积核的大小、卷积核的值和卷积操作的步长,可以提取出不同尺度和位置的特征。

# 面相对象的模块化编程
from matplotlib import pyplot as plt
import os
import torch.nn as nn
import torchdef test001():# __file__当前文件current_path = os.path.dirname(__file__)print(current_path)img_path = os.path.join(current_path, '..\data','1.png')print("img_path:",img_path)# 转换为相对路径img_path = os.path.realpath(img_path)print("img_realpath:",img_path)# 使用plt读取图片img = plt.imread(img_path)print(img.shape)# 转换为张量:HWC-->CHW-->NCHW 链式调用# 深拷贝原图在进行链式操作,返回一个新值img = torch.Tensor(img).permute(2,0,1).unsqueeze(0)# 创建卷积核conv = nn.Conv2d(in_channels=4,# 输入通道数out_channels=1,# 输出通道数# 如果要产出32个特征图,那么就需要32个卷积核,每个卷积核的通道数为这个卷积核的通道数为4# out_channels=32,# 输出通道数kernel_size=3,# 卷积核大小# kernel_size=(5,3),# 卷积核大小stride=1,# 步长padding=0 # 填充# bias=True
)# 使用卷积核,对图像进行卷积操作out = conv(img)# 把图片显示出来print(out.shape)# out[0][0]: 806, 574# out[0][0]:其中含有梯度等元素# detach叶子结点,数据的引用,只指向源数据,不包含梯度等其他元素plt.imshow(out[0][0].detach().numpy(), cmap='gray')# 取第32个卷积核的输出显示# plt.imshow(out[0][31].detach().numpy(), cmap='gray')plt.show()# 作为主机模块执行
if __name__ == '__main__':test001()
# 面相对象的模块化编程
from matplotlib import pyplot as plt
import os
import torch.nn as nn
import torchdef test001():# __file__当前文件current_path = os.path.dirname(__file__)print(current_path)img_path = os.path.join(current_path, '..\data','1.png')print("img_path:",img_path)# 转换为相对路径img_path = os.path.realpath(img_path)print("img_realpath:",img_path)# 使用plt读取图片img = plt.imread(img_path)print(img.shape)# 转换为张量:HWC-->CHW-->NCHW 链式调用# 深拷贝原图在进行链式操作,返回一个新值img = torch.Tensor(img).permute(2,0,1).unsqueeze(0)# 创建卷积核conv = nn.Conv2d(in_channels=4,# 输入通道数# 如果要产出32个特征图,那么就需要32个卷积核,每个卷积核的通道数为这个卷积核的通道数为4out_channels=32,# 输出通道数kernel_size=(5,3),# 卷积核大小stride=1,# 步长padding=0,# 填充bias=True
)# 使用卷积核,对图像进行卷积操作out = conv(img)# 输出128个特征图conv2 = nn.Conv2d(in_channels=32,# 输入通道数out_channels=128,# 输出通道数# 如果要产出32个特征图,那么就需要32个卷积核,每个卷积核的通道数为这个卷积核的通道数为4kernel_size=(5,3),# 卷积核大小stride=1,# 步长padding=0,bias=True)out = conv2(out)# 把图片显示出来print(out.shape)# out[0][0]: 806, 574# out[0][0]:其中含有梯度等元素# detach叶子结点,数据的引用,只指向源数据,不包含梯度等其他元素# 取第32个卷积核的输出显示plt.imshow(out[0][31].detach().numpy(), cmap='gray')plt.show()# 作为主机模块执行
if __name__ == '__main__':test001()
卷积计算底层实现
  • 并不是水平和垂直方向的循环。
  • 下图是卷积的基本运算方式:

  • 卷积真正的计算过程如下图:

边缘填充

Padding
  • 通过上面的卷积计算,我们发现最终的特征图比原始图像要小,如果想要保持图像大小不变, 可在原图周围添加padding来实现,更重要的,边缘填充还更好的保护了图像边缘数据的特征。

步长Stride

  • 按照步长为1来移动卷积核

  • 如果我们把 Stride 增大为2

  • stride太小:重复计算较多,计算量大,训练效率降低; stride太大:会造成信息遗漏,无法有效提炼数据背后的特征;

多通道卷积计算

数字图像的标识
  • 图像在计算机眼中是一个矩阵,通道越多,可以表达的特征就越丰富

具体计算实现

1.计算方法

  • 当输入有多个通道(Channel), 例如RGB三通道, 此时要求卷积核需要有相同的通道数。
  • 卷积核通道与对应的输入图像通道进行卷积。
  • 将每个通道的卷积结果按位相加得到最终的特征图。

多卷积核卷积计算

  • 实际对图像进行特征提取时, 我们需要使用多个卷积核进行特征提取。这个多个卷积核可以理解为从不同到的视角、不同的角度对图像特征进行提取。所有卷积核输出值决定了卷积和有几个

特征图大小

1.输出特征图的大小与以下参数息息相关:

  • size: 卷积核/过滤器大小,一般会选择为奇数,比如有 1×1, 3×3, 5×5
  • Padding: 零填充的方式
  • Stride: 步长

2.例:

  • 输入图像大小: W x W
  • 卷积核大小: F x F
  • Stride: S
  • Padding: P
  • 输出图像大小: N x N

3.例:

  • 图像大小: 5 x 5
  • 卷积核大小: 3 x 3
  • Stride: 1
  • Padding: 1
  • (5 - 3 + 2) / 1 + 1 = 5, 即得到的特征图大小为: 5 x 5

连续卷积

卷积参数共享

数据是32×32×3的图像,用 10 个 5×5×3 的filter来进行卷积操作,所需的权重参数有多少个呢?

  • 5×5×3 = 75,表示每个卷积核只需要75个参数。
  • 10个不同的卷积核,就需要10*75 = 750个卷积核参数。
  • 如果还考虑偏置参数b,最终需要 750+10=760 个参数。

局部特征提取

  • 通过卷积操作,CNN具有局部感知性,能够捕捉输入数据的局部特征,这在处理图像等具有空间结构的数据时非常有用。

PyTorch卷积层神经网络

import torch
import torch.nn.functional as Fclass MyNet(torch.nn.Module):def __init__(self):super(MyNet, self).__init__()# 第一层卷积:30 (W - K + 2P) /S + 1:输出的宽高,因为此时是矩阵就计算一个表就行self.conv1 = torch.nn.Conv2d(in_channels=1, # 输入通道out_channels=32, # 输出的通道kernel_size=3, # 卷积核大小padding= 0, # 填充stride=1, # 步长)# 第二层,输出128个通道:28 (W - K + 2P) /S + 1self.conv2 = torch.nn.Conv2d(in_channels=32, # 输入通道out_channels=128, # 输出的通道kernel_size=3, # 卷积核大小padding= 0, # 填充stride=1, # 步长)# 第三个通道,输出512个通道:26 (W - K + 2P) /S + 1self.conv3 = torch.nn.Conv2d(in_channels=128, # 输入通道out_channels=512, # 输出的通道kernel_size=3, # 卷积核大小padding= 0, # 填充stride=1, # 步长)# 线性层做分类判断,10分类self.fc = torch.nn.Linear(512*26*26, 10)def forward(self, x):# 卷积层x = F.relu(self.conv1(x))print(x.shape)x = F.relu(self.conv2(x))x = F.relu(self.conv3(x))# 输出NCHW,然后做全连接# x.size(0):输出的有几个Nx = x.view(x.size(0), -1)print(x.shape)# 输入的数据有四条,每条数据10个输出值x = self.fc(x)# 每条数据进行激活,每条数据有10分类x = torch.nn.Softmax(dim=1)(x)return xif __name__ == '__main__':# N = 4 C=1 H=32 W=32input = torch.randn(4,1,32,32)model = MyNet()out = model(input)print(out)

池化层

概述

1.池化层 (Pooling) 降低维度, 缩减模型大小,提高计算速度. 即: 主要对卷积层学习到的特征图进行下采样(SubSampling)处理。

2.池化层主要有两种:

(1)最大池化 max pooling

  • 最大池化是从每个局部区域中选择最大值作为池化后的值,这样可以保留局部区域中最显著的特征。最大池化在提取图像中的纹理、形状等方面具有很好的效果。

(2)平均池化 avgPooling

  • 平均池化是将局部区域中的值取平均作为池化后的值,这样可以得到整体特征的平均值。平均池化在提取图像中的整体特征、减少噪声等方面具有较好的效果。

池化层计算

整体结构

计算

步长Stride

  • 计算方法和卷积核步长计算方法一致

边缘填充Padding

多通道池化计算

  • 在处理多通道输入数据时,池化层对每个输入通道分别池化,而不是像卷积层那样将各个通道的输入相加。这意味着池化层的输出和输入的通道数是相等。

池化层的作用

1.池化操作的优势有:

  • 通过降低特征图的尺寸,池化层能够减少计算量,从而提升模型的运行效率。
  • 池化操作可以带来特征的平移、旋转等不变性,这有助于提高模型对输入数据的鲁棒性
  • 池化层通常是非线性操作,例如最大值池化,这样可以增强网络的表达能力,进一步提升模型的性能。

2.池化也有缺点:

  • 池化操作会丢失一些信息,这是它最大的缺点;

池化API

API请参考具体官方文档:torch.nn — PyTorch 2.5 documentationicon-default.png?t=O83Ahttps://pytorch.org/docs/stable/nn.html#padding-layers

import torch
import torch.nn as nndef test01():torch.manual_seed(1)# 输入的特征图数据input = torch.randint(0, 255, (1, 64, 224, 224), dtype=torch.float)print(input[0][0][0:4,:5])# 池化核pool = nn.MaxPool2d(kernel_size=2, # 池化核大小stride=2, # 步长return_indices=True# 返回索引)# 对数据进行池化操作out, indices = pool(input)print(indices)print(out.shape)if __name__ == '__main__':test01()

整体结构

  • 卷积池化全连接神经网络框架
import torch
import torch.nn as nnclass numberModel(nn.Module):def __init__(self):super(numberModel, self).__init__()# 卷积层self.C1 = nn.Sequential(nn.Conv2d(in_channels=1, # 输入通道out_channels=6, # 输出通道kernel_size=5, # 卷积核大小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=5, # 卷积核大小stride=1, # 步长padding=0 # 填充), nn.ReLU())# 全连接层self.FC1 = nn.Sequential(nn.Linear(16*5*5,120, bias=True), nn.ReLU())self.FC2 = nn.Sequential(nn.Linear(120,84, bias=True), nn.ReLU())self.out = nn.Sequential(nn.Linear(84,10, bias=True), nn.Softmax(dim=1))def forward(self, x):x = self.C1(x)x = self.S2(x)x = self.C3(x)x = self.S2(x)x = x.view(x.size()[0],-1) # 自动计算的数量批次Batchx = self.FC1(x)x = self.FC2(x)x = self.out(x)return x
if __name__ == '__main__':torch.manual_seed(1)# 网络model = numberModel()# 输入数据 NCHWinput = torch.randn(1, 1, 32, 32)# 输出结果output = model(input)print(output)
"""
tensor([[0.1055, 0.0958, 0.1093, 0.0939, 0.0942, 0.0990, 0.1092, 0.0956, 0.0874,0.1102]], grad_fn=<SoftmaxBackward0>)
"""

特征图变化

卷积知识扩展

卷积结果

二维卷积

  • 分单通道版本和多通道版本。
单通道版本
  • 之前所讲卷积相关内容其实真正意义上叫做二维卷积(单通道卷积版本),即只有一个通道的卷积。

多通道版本
  • 彩色图像拥有R、G、B这三层通道,因此我们在卷积时需要分别针对这三层进行卷积

  • 最后将三个通道的卷积结果进行合并(元素相加),得到卷积结果

三维卷积(3D)

  • 二维卷积是在单通道的一帧图像上进行滑窗操作,输入是高度H宽度W的二维矩阵。
  • 而如果涉及到视频上的连续帧或者立体图像中的不同切片,就需要引入深度通道,此时输入就变为高度H宽度W*深度C的三维矩阵。
  • 不同于二维卷积核只在两个方向上运动,三维卷积的卷积核会在三个方向上运动,因此需要有三个自由度
  • 这种特性使得三维卷积能够有效地描述3D空间中的对象关系,它在一些应用中具有显著的优势,例如3D对象的分割以及医学图像的重构等。

反卷积

  • 卷积是对输入图像及进行特征提取,这样会导致尺寸会越变越小,而反卷积是进行相反操作。并不会完全还原到跟输入图一样,只是保证了与输入图像尺寸一致,主要用于向上采样。从数学上看,反卷积相当于是将卷积核转换为稀疏矩阵后进行转置计算。也被称为转置卷积
反卷积计算过程
  • 在2x2的输入图像上使用【步长1、边界全0填充】的3x3卷积核,进行转置卷积(反卷积)计算,向上采样后输出的图像大小为4x4。语义分割里面就需要反卷积还原到原始图像大小。

反卷积底层计算

空洞卷积(膨胀卷积)

扩大感受野,在卷积核矩阵的元素之间插入空格“膨胀”内核,形成“空洞卷积”(或称膨胀卷积),并用膨胀率参dilationL表示要扩大内核的范围,即在内核元素之间插入dilation-1个空格。当dilation=1时,则内核元素之间没有插入空格,变为标准卷积。图中是dilation=2的空洞卷积。

  • 代码实现过程
import torch
import torch.nn as nndef test01():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, # 步长padding=0, # 填充dilation=2 # 卷积核的步长)out = conv(x)print(out.shape)if __name__ == '__main__':test01()"""
torch.Size([1, 1, 3, 3])
"""

可分离卷积

空间可分离卷积
  • 空间可分离卷积是将卷积核分解为两项独立的核分别进行操作。在数学中我们可以将矩阵分解:

$ \left[\begin{matrix}-1 & 0 & 1 \\-2 & 0 & 2 \\-1 & 0 & 1\end{matrix}\right]=\left[\begin{matrix}1 \\2 \\1\end{matrix}\right]\times\left[\begin{matrix}-1 & 0 & 1 \end{matrix}\right] $

  • 所以对3x3的卷积核,我们同样可以拆分成 3x1 和 1x3 的两个卷积核,对其进行卷积,且采用可分离卷积的计算量比标准卷积要少。

  • 代码实现过程 
import torch
import torch.nn as nnclass nomalModel(nn.Module):def __init__(self):super(nomalModel, self).__init__()self.conv1 = nn.Conv2d(in_channels=1, # 输入通道out_channels=1, # 输出通道kernel_size=3, # 卷积核大小stride=1, # 步长padding=0,# 填充bias=False # 是否使用偏置)def forward(self, x):out = self.conv1(x)return outclass waveModel(nn.Module):def __init__(self):super(waveModel, self).__init__()self.conv1 = nn.Conv2d(in_channels=1, # 输入通道out_channels=1, # 输出通道kernel_size=(3,1), # 卷积核大小stride=1, # 步长padding=0,# 填充bias=False, # 是否使用偏置groups=1 # 分组卷积)self.conv2 = nn.Conv2d(in_channels=1, # 输入通道out_channels=1, # 输出通道kernel_size=(1,3), # 卷积核大小stride=1, # 步长padding=0,# 填充bias=False, # 是否使用偏置groups=1 # 分组卷积)def forward(self, x):out = self.conv1(x)out = self.conv2(out)return outif __name__ == '__main__':model1 = nomalModel()# 打印参数for name, param in model1.named_parameters():print(name, param.shape)print("======================")model2 = waveModel()for name, param in model2.named_parameters():print(name, param.shape)"""
conv1.weight torch.Size([1, 1, 3, 3]) 3*3
======================
conv1.weight torch.Size([1, 1, 3, 1])3
conv2.weight torch.Size([1, 1, 1, 3])3  ==>3+3
"""
深度可分离卷积

1.深度可分离卷积由两部组成:深度卷积核1x1卷积

  • 输入图的每一个通道,我们都使用了对应的卷积核进行卷积。 通道数量 = 卷积核个数
  • 完成卷积后,对输出内容进行1x1的卷积

  • 代码实现
import torch
import torch.nn as nnclass normalModel(nn.Module):def __init__(self):super(normalModel, 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):out = self.conv1(x)return outclass deepModel(nn.Module):def __init__(self) -> None:super(deepModel, self).__init__()self.conv1 = nn.Conv2d(in_channels=8, # 输入通道out_channels=8,# 输出通道kernel_size=3, # 卷积核大小stride=1, # 步长padding=0, # 填充bias=False, # 是否使用偏置groups=8 # 分组卷积 卷积核数量等于输入通道的数量8/8 = 1)self.conv2 = nn.Conv2d(in_channels=8, # 输入通道out_channels=8,# 输出通道kernel_size=1, # 卷积核大小stride=1, # 步长padding=0, # 填充bias=False # 是否使用偏置)def forward(self, x):x = self.conv1(x)out = self.conv2(out)return out
if __name__ == '__main__':conv1 = normalModel()for name, param in conv1.named_parameters():print(name, param.shape) # 576print("======================")conv2 = deepModel()for name, param in conv2.named_parameters():print(name, param.shape) # 136"""
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个1x1的卷积核,然后再分别对输入层进行卷积计算。

  • 标准卷积参数量XYC,计算量为MNCXY
  • 拆分卷积参数量(X+Y+C),计算量为MN(C+X+Y)

分组卷积

  • 2012年,AlexNet论文中最先提出来的概念,当时主要为了解决GPU显存不足问题,将卷积分组放到两个GPU中并行执行。
  • 在分组卷积中,卷积核被分成不同的组,每组负责对相应的输入层进行卷积计算,最后再进行合并。

混洗分组卷积

  • 分组卷积中最终结果会按照原先的顺序进行合并组合,阻碍了模型在训练时特征信息在通道间流动,削弱了特征表示。混洗分组卷积,主要是将分组卷积后的计算结果混合交叉在一起输出。

多通道卷积与偏执

卷积核卷完之后,偏置矩阵就会与输出特征矩阵相加,得到本次卷积的最终结果。

有两个结论:

  • 输入特征的通道数决定了卷积核的通道数(卷积核通道个数=输入特征通道个数)。
  • 卷积核的个数决定了输出特征矩阵的通道数与偏置矩阵的通道数(卷积核个数=输出特征通道数=偏置矩阵通道数)。

感受野

理解感受野

  • 字面意思是感受的视野范围,如果堆叠3个3 x 3的卷积层,并且保持滑动窗口步长为1,其感受野就是7×7的了, 这跟一个使用7x7卷积核的结果是一样的

感受野的作用

  • 假设输入大小都是h × w × C,并且都使用C个卷积核(得到C个特征图),可以来计算 一下其各自所需参数

相关文章:

深度学习之视觉处理

CNN 视觉处理三大任务&#xff1a;分类、目标检测、图像分割上游&#xff1a;提取特征&#xff0c;CNN下游&#xff1a;分类、目标、分割等&#xff0c;具体的任务 概述 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域, 往往我们输入的图像都很大&am…...

遇到问题:hive中的数据库和sparksql 操作的数据库不是同一个。

遇到的问题&#xff1a; 1、hive中的数据库和sparksql 操作的数据库不同步。 观察上面的数据库看是否同步 &#xff01;&#xff01;&#xff01; 2、查询服务器中MySQL中hive的数据库&#xff0c;发现创建的位置没有在hdfs上&#xff0c;而是在本地。 这个错误产生的原因是&…...

Spring Boot与Spring Security集成:前后分离认证流程的优化实践

在当前的Web开发领域&#xff0c;前后分离架构已经成为一种流行趋势。这种架构将前端和后端进行解耦&#xff0c;前端负责用户界面和交互逻辑&#xff0c;后端则负责数据处理和业务逻辑。在前后分离的项目中&#xff0c;如何安全、高效地实现用户认证是一个关键问题。本文将深入…...

设计模式——Chain(责任链)设计模式

摘要 责任链设计模式是一种行为设计模式&#xff0c;通过链式调用将请求逐一传递给一系列处理器&#xff0c;直到某个处理器处理了请求或所有处理器都未能处理。它解耦了请求的发送者和接收者&#xff0c;允许动态地将请求处理职责分配给多个对象&#xff0c;支持请求的灵活传…...

HarmonyOS(63) ArkUI 自定义占位组件NodeContainer

NodeContainer 1、前言2、NodeContainer和NodeController3、示例代码3.1、创建@Builder3.2、 创建NodeController3.3、 使用NodeCtroller4、NodeContainer的作用5、FrameNode简介6、BuilderNode简介7、参考资料1、前言 在HarmonyOS(62) ArkUI @Reusable组件复用原理讲了组件复…...

Python深度强化学习对冲策略:衍生品投资组合套期保值Black-Scholes、Heston模型分析...

全文链接&#xff1a;https://tecdat.cn/?p38463 本文提出了一个在存在交易成本、市场冲击、流动性约束或风险限制等市场摩擦的情况下&#xff0c;使用现代深度强化学习方法对衍生品投资组合进行套期保值的框架。我们讨论了标准强化学习方法如何应用于非线性奖励结构&#xff…...

【opencv入门教程】2. Point()类用法

文章选自&#xff1a; void Samples::PointFunc() {//输入二维点Point2f point2f(6, 2);cout << "【2维点】p " << point2f << ";\n" << endl;// 输入三维点Point3f point3f(8, 2, 0);cout << "【3维点】p3f "…...

前端导出excel实战(xlsx库和exceljs库)

一. 概览 前端导出excel是比较常见的需求&#xff0c;比如下载excel模板和批量导出excel。目前比较常用的库有xlsx和excel&#xff0c;接下来就着两种方式进行梳理。 二. 下载模板 xlsx库实现&#xff1a; 示例核心代码如下&#xff1a; const excelColumn {details: {ma…...

【附源码】基于环信鸿蒙IM SDK实现一个聊天Demo

项目背景 本项目基于环信IM 鸿蒙SDK 打造的鸿蒙IM Demo&#xff0c;完全适配HarmonyOS NEXT系统&#xff0c;实现了发送消息&#xff0c;添加好友等基础功能。代码开源&#xff0c;功能简洁&#xff0c;如果您有类似开发需求可以参考。 源码地址&#xff1a;https://github.c…...

Python库常用函数-数据分析

Python库常用函数 1.pandas库 &#xff08;1&#xff09;数据读取与写入 读取 CSV 文件&#xff1a; data pd.read_csv(file.csv)读取 Excel 文件&#xff1a; data pd.read_excel(file.xlsx, sheet_nameSheet1)写入 CSV 文件&#xff1a; data.to_csv(new_file.csv, ind…...

汽车EEA架构:架构的简介

1.架构的定义 汽车领域谈论的架构一词&#xff0c;来源于英文单词Architecture。在《系统架构:复杂系统的产品设计与开发》一书中对架构的定义如下:系统架构是一种概念的具象化&#xff0c;是物理或信息功能到形式元素的分配&#xff0c;是系统之内的元素之间的关系与周边环境…...

渗透测试--数据库攻击

这篇文章瘾小生其实想了很久&#xff0c;到底是放在何处&#xff0c;最终还是想着单拎出来总结&#xff0c;因为数据库攻击对我们而言非常重要&#xff0c;而且内容众多。本篇文章将讲述在各位获取数据库权限的情况下&#xff0c;各个数据库会被如何滥用&#xff0c;以及能够滥…...

反向路径转发(RPF)

本文介绍了反向路径转发&#xff08;RPF&#xff09;是如何在FortiGate上实现的。 它还解释了特定于VDOM的CLI设置“config system settings -> set strict-src-check”如何修改RPF行为。 测试场景中使用了以下设置 反向路径过滤器&#xff08;又名RPF&#xff09;是一种安…...

Python 正则表达式常用特殊字符及其含义

以下是 Python 正则表达式常用特殊字符及其含义 的全面整理&#xff0c;涵盖了常见和重要的正则符号&#xff0c;以及它们的示例&#xff0c;适合用来写博客或学习使用&#xff1a; Python 正则表达式常用特殊字符及其含义 1. . (点号) 含义&#xff1a;匹配除换行符 \n 以外…...

Uniapp Android SpringBoot3 对接支付宝支付(最新教程附源码)

Uniapp Android SpringBoot3 对接支付宝支付&#xff08;最新教程附源码&#xff09; 1、效果展示2、后端实现2.1 引入支付宝SDK依赖 pom.xml2.2 配置 application.yml2.3 支付宝相关代码2.3.1 AlipayConfig.java2.3.2 ZfbPayConfig.java2.3.3 支付接口2.3.4 支付回调处理接口&…...

SQL DML 语句

CREATE TABLE classes (ClassID varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 班级ID,ClassName varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 班级名称,TeacherID varchar(20) CHARACTER SET utf8mb4…...

饲料颗粒机全套设备有哪些机器组成

颗粒饲料机主要用于将各种饲料原料&#xff08;如玉米、豆粕、麦麸、鱼粉等&#xff09;进行混合、压制&#xff0c;制成颗粒状的饲料。这种饲料不仅方便储存和运输&#xff0c;还能提高动物的采食效率和饲料利用率。同时&#xff0c;颗粒饲料在加工过程中能灭部分微生物和寄生…...

MySQL事务与锁

定义一个事务向d_eams数据库的student表中插入3条记录&#xff0c;并检验若插入相同的学号&#xff0c;则回滚事务&#xff0c;既插入无效&#xff0c;否则成功提交 delimiter $$ create procedure tr_proc() begindeclare continue handler for sqlstate 23000beginrollback;…...

汽车免拆案例 | 2007款宝马650i车发动机偶尔无法起动

故障现象 一辆2007款宝马650i车&#xff0c;搭载N62B48B发动机&#xff0c;累计行驶里程约为26万km。车主反映&#xff0c;发动机偶尔无法起动&#xff0c;故障频率较低&#xff0c;十几天出现1 次&#xff0c;且故障出现时起动机不工作。 故障诊断  接车后试车&#xff0c;…...

PostgreSQL和Oracle的sql差异

PostgreSQL和Oracle的sql差异 1.rownum &#xff08;1&#xff09;Oracle分页查询使用rownum&#xff0c;PostgreSQL使用limit offset ORACLEPOSTGRESQLselect * from (select rownum r,e.* from emp e where rownum <5) t where r>0;select * from emp limit 5 offset…...

SpringMvc完整知识点二(完结)

SpringMVC获取请求参数 环境准备工作等均省略&#xff0c;可详见快速入门&#xff0c;此处只写非共有部分代码 该部分示例项目SpringMvcThree已上传至Gitee&#xff0c;可自行下载 客户端请求参数的格式为&#xff1a;namevalue&passwordvalue... ... 服务端想要获取请求…...

29 - Java Serializable 序列化

Java的Serializable接口是Java序列化机制的核心&#xff0c;它允许一个对象的状态被转换为字节流&#xff0c;从而可以方便地进行存储或传输。 序列化后的对象可以被写到数据库、存储到文件系统&#xff0c;或者通过网络传输。 要在 Java 中使一个类可序列化&#xff0c;你需要…...

59 基于STM32的烟雾、红外、温湿度检测

所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于SMT32F103C8T6单片机,采用DHT11检测温湿度,采用光敏电阻检测光照,采用滑动变阻器分别模拟红外、烟雾,通过OLED显示屏显示,如果湿度过低…...

使用Excel 对S型曲线加减速算法进行仿真

项目场景&#xff1a; 项目场景&#xff1a;代码中写了S型加减速算法&#xff0c;相查看生成的加减速数组&#xff0c;直观的展示出来&#xff0c;USB通信一次64字节&#xff0c;对于我几个个32位的频率值不太方便&#xff0c;于是采用Excel进行仿真。 代码中如何生成S加减速曲…...

flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示

flink-connector-mysql-cdc&#xff1a; 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本&#xff1a;3.2.0 flink版本&…...

java计算机毕设课设—进销存管理系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式再最下方 java计算机毕设课设—进销存管理系统(附源码、文章、相关截图、部署视频) 一、项目简介 项目名称&#xff1a; 基于Java的进销存管理系统 开发背景&#xff1a; 在现代企业管理中&#xff0c;库存管理是核心环节之一&#…...

鸿蒙UI开发——渐变色效果

1、概 述 ArkTs可以通过颜色渐变接口&#xff0c;设置组件的背景颜色渐变效果&#xff0c;实现在两个或多个指定的颜色之间进行平稳的过渡。 目前提供三种渐变类型&#xff1a;线性渐变、角度渐变、径向渐变。 我们在鸿蒙UI布局实战 —— 个人中心页面开发中&#xff0c;默认…...

嵌入式硬件设计 — 智能设备背后的隐形架构大师

目录 引言 一、嵌入式硬件设计概述 &#xff08;一&#xff09;需求分析 &#xff08;二&#xff09;硬件选型 &#xff08;三&#xff09;电路设计 &#xff08;四&#xff09;PCB 制作与焊接 &#xff08;五&#xff09;硬件调试与测试 &#xff08;六&#xff09;软…...

QNX的系统资源访问机制

资料参考: QNX官网文档 在QNX中,一些系统的资源默认是无法访问的,或者可访问的范围过大,导致产生不可控的危险,此时便需要对系统资源进行访问限制 接口如下 #include <sys/rsrcdbmgr.h> #include <sys/rsrcdbmsg.h>int rsrcdbmgr_create(...

高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园

教育数字化是建设教育强国的重要基础&#xff0c;利用技术和数据助推高校管理转型&#xff0c;从而更好地支撑教学业务开展。 近年来&#xff0c;国家多次发布政策&#xff0c;驱动教育行业的数字化转型。《“十四五”国家信息化规划》&#xff0c;推进信息技术、智能技术与教育…...