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

人工智能学习框架—飞桨Paddle人工智能

1.人工智能框架

机器学习的三要素:模型、学习策略、优化算法。

当我们用机器学习来解决一些模式识别任务时,一般的流程包含以下几个步骤:

uTools_1691925173170

1.1.浅层学习和深度学习

浅层学习(Shallow Learning):不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取。

底层特征VS高层语义:人们对文本、图像的理解无法从字符串或者图像的底层特征直接获得

深度学习通过构建具有一定“深度”的模型,可以让模型来自动学习好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测或识别的准确性。

uTools_1691925398973

深度学习的数学描述

uTools_1691925529241

fl(x)为非线性函数,不一定连续。

深度学习的难点

y=f^5^(f^4^(f^3^(f^2^(f^1^(x)))))

贡献度分配问题:一个复杂系统中每个组件对最终评价的贡献。

uTools_1691925707504

如何解决贡献度分配问题:

其中我们一般采用的方法就是求偏导数,也就是使用误差反向传播算法,这是我们学习神经网络的时候接触到过的。

贡献度:

uTools_1691926340292

我们要知道一点,那就是神经网络天然不是深度学习,但深度学习天然是神经网络!

1.2.神经网络与深度学习的关系

人工智能的一个子领域

神经网络:一种以(人工)神经元为基本单元的模型

深度学习:一类机器学习问题,主要解决贡献度分配问题

uTools_1691926405209

我们都明白,机器(深度)学习非常有可能成为计算机学科的关键技术。

机器学习必然会发展到深度学习,不一定是神经网络,基于不可微架构的深度学习可能是未来方向。对于计算机学科是如此,而对于其他学科也是联系十分的紧密,深度学习也越来越多地成为传统学科的关键技术,涉及到数学、物理、化学、医药、天文、地理。

经过两周腾讯比赛,我对深度学习和强化学习有了自己的感悟:

  1. 理论支撑不足

  2. 调参一头雾水

  3. 模型无法解释

  4. 改进没有方向

当然,也有玩笑的成分在里面,也算是我和人工智能的第一次接触下来的感慨吧,领域多、知识点多,理论和实践紧密结合。

面对这些问题我们该怎么做嘞?

没错,就是肝各种前置知识,当然并行一起也可以。数学方面,就是线性代数、微积分、变分法、概率论、优化以及信息论。

我们需要在学习中逐步形成下面这张图的知识体系:

uTools_1691928991675

机器学习实践流程中的五要素:

uTools_1691929291525

1.3.Runner类

uTools_1691929456233

看到图上的箭头了吗,我们在模型准备中就是通过相应的损失函数、评价指标之后,也就是runner运行以后确定了模型合规,然后送到训练中,可能是强化训练进行探索,也可能是别的东西。像我们在腾讯开悟的比赛中,就是这样的形式,训练一定的时间就会出相应的模型,再提交到指定的平台进行模型评价和测试评估。

代码模板:

class Runner(object):def __init__(self, model, optimizer, loss_fn, metric):self.model = model #模型self.optimizer = optimizer #优化器self.1oss_fn = 1oss_fn #损失函数self.metric = metric #评价指标# 模型训练def train(self, train_dataset, dev_dataset=None, **kwargs):pass# 模型评价def evaluate(self, data_set, **kwargs):pass# 模型预测def predict(self, x, **kwargs):pass# 模型保存def save_model(self, save_path):pass# 模型加载def load_model(self, model_path):pass

1.4.张量与算子

数据的表现形式是张量

uTools_1691936884794

模型的基本单位:算子

class Op(object):def __init__(self):passdef __call__(self, inputs):return self.forward(inputs)# 前向函数# 输入:张量inputs# 输出:张量outputsdef forward(self, inputs):# return outputsraise NotImplementedError# 反向函数# 输入:最终输出对outputs的梯度outputs_grads# 输出:最终输出对inputs的梯度inputs_gradsdef backward(self,outputs_grads):# return inputs_gradsraise NotImplementedError

加法算子的前向和反向计算过程

uTools_1691937846915

一个复杂的机器学习模型(比如神经网络)可以看做一个复合函数

uTools_1691936991723

参数学习:梯度计算

uTools_1691937058504

为了继承飞桨的paddle.nn.layer

uTools_1691937923275

蒲公英一书中实现的Runner类:

RunnerV1

用于线性回归模型的训练,其中训练过程通过直接求解析解的方式得到模型参数,没有模型优化及计算损失函数过程,模型训练结束后保存模型参数

Runner V2

主要增加的功能为:①在训练过程中引入梯度下降法进行模型优化.

②在模型训练过程中计算训练集和验证集上的损失及评价指标并打印,在训练过程中保存最优模型

Runner V3

主要增加三个功能:使用随机梯度下降法进行参数优化.训练过程使用DataLoader加载批量数据.模型加载与保存中,模型参数使用state_dict方法获取,使用state_dist加载

Runner V3基本上可以应用于大多数机器学习任务。

算子库nndl

从模型构建角度出发,借鉴深度学习框架中算子的概念,从基础开始一步步实现自定义的基本算子库,进一步通过组合自定义算子来搭建机器学习模型,最终搭建自己的机器学习模型库nndl。

在实践过程中不仅知其然还知其所以然,更好地掌握深度学习的模型和算法,并理解深度学习框架的实现原理。

2.NNDL开源库

NNDL (Neural Network Distillation Library) 是一个用于深度学习研究的开源库,主要用于知识蒸馏(Knowledge Distillation)任务。

知识蒸馏是一种将大型预训练模型(教师模型)的知识转移到小型模型(学生模型)的方法。NNDL 提供了一个框架,支持使用图像分类任务进行知识蒸馏,包括模型定义、训练和测试等过程。

该库主要特点包括:

  1. 支持多种流行的深度学习框架,如 TensorFlow 和 PyTorch。

  2. 提供多个预训练的教师模型,以及学生模型的蒸馏训练。

  3. 针对图像分类任务,支持各种数据增强和网络结构。

  4. 可用于开发高效的神经网络模型,包括卷积神经网络、循环神经网络等。

请注意,NNDL 是一个相对较新的开源库,可能存在一些限制和缺陷。在使用过程中,请确保您理解其工作原理和适用范围,并根据需要进行适当的调整和优化。

NNDL案例与实践的特色在于

  1. 深入理论内部的实践,比如:从0实现反向传播、卷积、transformer等。

  2. 关键理论原理的实践,比如:SRN的记忆能力与梯度爆炸、LSTM的记忆能力等。

  3. 贴近产业场景的实践,比如:cnn实现图像分类、mn实现文本分类、transformer实现语义匹配等。

  4. 贴近产业工程的实践,比如:基于训练框架Runnert的实验、逐步完善的nnd工具包、模型精度速度的分析方法等。

  5. 兼顾理论与实践的作业设计,比如:基础知识回顾与实践,动手比赛和产业应用实践等。

uTools_1692010723000

3.模型训练

使用Runner,进行相关模型训练配置,即可启动模型训练

# 指定运行设备
use_gpu = True if paddle.get_device().startswith("gpu") else False
if use_gpu:paddle.set_device('gpu:0')
# 学习率大小
lr = 0.001
# 批次大小
batch_size = 64
# 加载数据
train_loader = io.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
dev_loader = io.DataLoader(dev_dataset, batch_size=batch_size)
test_loader = io.DataLoader(test_dataset, batch_size=batch_size)
# 定义网络
model = resnet19_model
# 定义优化器,这里使用Adam优化器以及l2正则化策略,相关内容在后续会有相应的教程
optimizer = opt.Adam(learning_rate=lr, parameters=model.parameters(), weight_decay=0.005)
# 定义损失函数
loss_fn = F.cross_entropy
# 定义评价指标
runner = RunnerV3(model, optimizer, loss_fn, metric)
# 启动训练
log_steps = 3000
eval_steps = 3000
runner.train(train_loader,dev_loader,num_epochs=30,log_steps=log_steps,eval_steps=eval_steps,save_path="best_model.pdparams")

4.残差网络

  1. 残差网络:在神经网络模型中给非线性层增加直连边的方式来缓解梯度消失问题,从而使训练深度神经网络变得更加容易

  2. 残差单元:一个典型的残差单元由多个级联的卷积层和一个跨层的直连边组成ResBlock f(x) = f(x; θ)+x

  3. Transformer:加与规范层,H=LN(H+X)

  4. Gradient BoostingGreedy Function Approximation:A Gradient Boosting MachineGBDT:Gradient Boosting Decision Tree

uTools_1692012181100

uTools_1692012202408

ResNet18整体结构与实现

uTools_1692012728749

# 定义完整网络
class Model_ResNet18(nn.Layer):def __init__(self, in_channels=3, num_classes=10, use_residual=Ture):super(Model_ResNet18, self).__init__()b1 = make_first_block(in_channels)b2, b3, b4, b5 = make_blocks(use_residual)# 封装模板1到模板6self.net = nn.Sequential(b1, b2, b3, b4, b5,# 模块6:汇聚层、全连接层nn.AdaptiveAvgPool2D(1),nn.Flatten(), nn.Linear(512, num_classes))

然后针对构建ResNet18中各模块,后序会有所介绍,这里就以b1为例,展示一下它相应的代码

def make_first_block(in_channels):# m模块1:7*7卷积、批归一化、汇聚b1 = nn.Sequential(nn.Conv2D(in_channels, 64, kernel_size=7, stride=2, padding=3),nn.BatchNorm2D(64), nn.ReLU(),nn.MaxPool2D(kernel_size=3, stride=2, padding=1))return b1

通常而言,特别是是在模型评价中,不带残差连接的ResNet18网络的准确率是远小于加了残差连接的神经网络的,模型效果差别是相当显著的。

5.卷积神经网络应用及原理

5.1.卷积神经网络

卷积一词我们并不陌生,我们在学习深度学习或者强化学习经常会遇到卷积这个概念。简而言之,卷积就是将我们的数据进行处理,处理得足够小,足以让我们的机器去识别。

在二维卷积算子中,我们的目的是在具体实现上,以互相运算来代替卷积,对于一个输入矩阵X∈RM*N,使用滤波器W∈RU*V进行运算。

uTools_1692013957228

上面的深色区域也就是我们所说的滑动窗口(嘿嘿,情不自禁想起了y总算法基础课里的滑动窗口一题,那个是一个典型的动态规划问题),为了实现局部信息到全局信息的融合,通过权值共享实现了参数量的不增加,降低了网络模型的复杂度,减少了权值的数目。参数的。在整个网络的训练过程中,包含权值的卷积核也会随之更新,直到训练完成。

输出特征图大小M' = M - U + 1 N' = N - V + 1

特性

  1. 局部连接:第i层中的每一个神经元都只和第i-1层中某个局部窗口内的神经元相连,构成一个局部连接网络。

  2. 权重共享:所有作为参数的卷积核W∈RU*V对于第i层的所有神经元都是相同的。

二维卷积算子

可以随机构造一个二维输入矩阵

paddle.seed(100)
inputs = paddle.to_tensor([[[1.,2.,3.],[4.,5.,6.],[7.,8.,9.]]])
​
conv2d = Conv2D(kernel_size=2)
outputs = conv2d(inputs)
print("input:{}\noutput:{}"format(inputs,outputs))

5.2.API说明

API(Application Programming Interface,应用程序编程接口)是一种定义软件组件之间如何通信的规范。它提供了一种标准化的接口,允许不同的软件系统之间进行交互和通信。

API通常是一组预先定义的函数、方法、类和对象,开发人员可以使用这些接口来调用软件组件的功能。API还规定了如何传递参数、返回值以及错误处理等细节。

API说明通常包括以下内容:

  1. 接口名称和功能描述:提供接口的名称和功能描述,让开发人员了解该接口的作用和用途。
  2. 输入参数说明:详细说明每个输入参数的名称、类型、意义和用法,以确保开发人员正确地使用这些参数。
  3. 返回值说明:解释每个返回值的含义和用法,以及在成功或失败时返回什么样的数据。
  4. 错误处理说明:描述可能会出现的错误和异常情况,并提供相应的处理方法。
  5. 其他注意事项:提供其他与接口相关的信息和注意事项,例如使用限制、安全要求等。

通过阅读API说明,开发人员可以更好地理解接口的用途和使用方法,从而更有效地使用API进行软件开发和集成。

paddle.create_parameter(shape,dtype,attr=None)

功能:创建一个可学习的Parameter变量

输入:Parameter变量的形状、数据类型、属性

输出:创建的Parameter变量

二维卷积算子的参数量

对于一个输入矩阵X∈RMxN,使用滤波器W∈RUxV进行运算,卷积核的参数量为:U×V

假设有一个32×32大小的图像,使用隐藏层神经元个数为1的全连接前馈网络进行处理:

uTools_1692017872092

32 * 32 + 1 =1025

使用3 * 3卷积核进行处理,参数量为:9

5.3.二维卷积算子的计算量

计算量:网络乘加运算总次数

FLOPs=M' * N' * U * V

假设有一个32×32大小的图像,使用3×3卷积核进行处理,计算量为:

M' = M - U + 1 = 30

N' = N - V + 1 = 30

FL0Ps = M' × N' × U × V = 30 × 30 × 3 × 3 = 8100

5.4.感受野

这个概念也不陌生,是指神经元或感受器能接受刺激的空间范围。在视觉系统中,它通常指的是视网膜上一个简单的、没有特定方向性的感受器(即非方向性光感受器)能接收到的空间范围。在中枢中,某一神经元的感受野是分布于其胞体和树突上,是在时间和空间上能被神经元响应的各种形式的光刺激模式(即特定的空间频率特性)的总和。

就如下面两个特征图:

uTools_1692018794565

感受野大小:3 x 3

输出特征图上的像素点所能感受到的输入数据的范围

uTools_1692018861836

5.5.带步长和零填充的二维卷积算子

步长(Stride)

在所有维度上每隔S个元素计算一次,S称为卷积的步长

对于一个输入矩阵X∈RMxW,使用滤波器W∈RUxV进行运算

uTools_1692020011940

零填充(Zero Padding)

如果不进行填充,当卷积核尺寸大于时,输出特征会缩减

对输入进行零填充可以对卷积核的宽度和输出的大小进行独立的控制

对于一个输入矩阵X∈RMxN,使用滤波器W∈RUxV进行运算,步长为S,并进行零填充后,输出矩阵大小为:

uTools_1692020088081

参数量:U x V

uTools_1692020121840

带步长和零填充的二维卷积算子代码

class Conv2D(nn.Layer):def __init__(self, kernel_size, stride=1, padding=0,weight_attr=paddle.ParamAttr(initializer=nn.initializer.Constant(value=1.0))):super(Conv2D, self).__init__()self.weight = paddle.create_parameter(shape=[kernel_size,kernel_size],dtype='float32',attr=weight_attr)# 步长self.stride = stride# 零填充self.padding = paddingdef forward(self, X):# 零填充new_X = paddle.zeros([X.shape[0], X.shape[1]+2*self.padding, X.shape[2]+2*self.padding])new_X[:, self.padding:X.shape[1]+self.padding, self.padding:X.shape[2]+self.padding] = Xu, v = self.weight.shapeoutput_w = (new_X.shap[1] - u) // self.stride + 1output_h = (new_X.shap[2] - u) // self.stride + 1output = paddle.zeros([X.shape[0], output_w, output_h])for i in range(0, output.shape[1]):for j in range(0, output.shape[2]):output[:, i, j] = paddle.sum(new_X[:, self.stride*i:self.stride*i+u, self.stride*j:self.stride*j+v]*self.weight,axis=[1,2])return outputinputs = paddle.randn(shape=[2, 8, 8])
conv2d_padding = Conv2D(kernel_size=3, padding=1)
outputs = conv2d_padding(inputs)
print("When kernel_size=3,padding=1 stride=1,input's shape:{}output's shape:()"format(inputs.shape,outputs.shape))
conv2d_stride Conv2D(kernel_size=3,stride=2,padding=1)
outputs conv2d_stride(inputs)

卷积神经网络

uTools_1692026218401

6.卷积层算子

输入通道:等于输入特征图的深度D

例如:输入是灰度图像,则输入通道数为1;输入是彩色图像,分别有R、G、B三个通道,则输入通道数为3;输入是深度D的特征图,则输入通道数为D

uTools_1692026260543

6.1.多通道卷积层算子

class Conv2D(nn.Layer):def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0,weight_attr=paddle.ParamAttr(initializer=nn.initializer.Constant(value=1.0)),bias_attr=paddle.ParamAttr(initializer.Constant(value=0.0))):super(Conv2D, self).__init__()#创建卷积核self.weight = paddle.create_parameter(shape=[out_channels, in_channels, kernel_size, kernel_size],dtype='float32',attr=weight_attr)#创建偏置self.bias = paddle.create_parameter(shape=[out_channels, 1],dtype='float32',attr=bias_attr)self.stride = strideself.padding = padding#输入通道数self.in_channels = in_channels#输出通道数self.out_channels = out_channels#基础卷积运算def single_forward(self, X, weight):#零填充new_X = paddle.zeros([X.shape[0],X.shape[1]+2*self.padding,X.shape[2]+2*self.padding])new_X[:,self.padding:X.shape[1]+self.padding,self.padding:X.shape[2]+self.padding]=xu,v weight.shapeoutput_w =(new_X.shape[1]u)//self.stride +1output_h (new_X.shape[2]-v)//self.stride 1output paddle.zeros([X.shape[e],output_w,output_h])for i in range(0,output.shape[1]):for j in range(0, output.shape[2]):output[:, i, j] = paddle.sum(new_X[:, self.stride*i:self.stride*i+u, self.stride*j:self.stride*j+v]*self.weight,axis=[1,2])return output

6.2.汇聚层算子

平均汇聚:将输入特征图划分多个为M'×N'大小的区域,对每个区域内的神经元活性值取平均值作为这个区域的表示

最大汇聚:使用输入特征图的每个子区域内所有神经元的最大活性值作为这个区域的表示

uTools_1692107743509

平移不变:当输入数据做出少量平移时,经过汇聚运算后的大多数输出还能保持不变。

参数量:0 计算量:最大汇聚为0 平均汇聚为M' x N' x P

6.3.双向LSTM和注意力机制的文本分类-注意力层

嵌入层:将输入句子中的词语转换成向量表示;

LSTM层:基于双向LSTM网络来构建句子中的上下文表示;

注意力层:使用注意力机制从LSTM的输出中筛选和聚合有效特征;

线性层:输出层,预测对应的类别得分。

6.4.注意力机制

从N个输入向量中选择出和某个特定任务相关的信息。

输入向量:X=[x1;...;Xn]小,其中Xn是向量,X∈RNxD其中n是序列长度,D表示每个元素的维度

查询向量:q,任务相关

uTools_1692111100737

打分函数

加强模型,双线性模型

点积模型,缩放点积模型

QKV自注意力的深度代码解读

uTools_1692111844835

相关文章:

人工智能学习框架—飞桨Paddle人工智能

1.人工智能框架 机器学习的三要素:模型、学习策略、优化算法。 当我们用机器学习来解决一些模式识别任务时,一般的流程包含以下几个步骤: 1.1.浅层学习和深度学习 浅层学习(Shallow Learning):不涉及特征学习,其特征…...

SElinux 导致 Keepalived 检测脚本无法执行

哈喽大家好,我是咸鱼 今天我们来看一个关于 Keepalived 检测脚本无法执行的问题 一位粉丝后台私信我,说他部署的 keepalived 集群 vrrp_script 模块中的脚本执行失败了,但是手动执行这个脚本却没有任何问题 这个问题也是咸鱼第一次遇到&…...

2022年电赛C题——小车跟随行驶系统——做题记录以及经验分享

前言 自己打算将做过的电赛真题,主要包含控制组的,近几年出现的小车控制题目,自己做过的真题以及在准备电赛期间刷真题出现的问题以及经验分享给大家 这次带来的是22年电赛C题——小车跟随行驶系统,这道题目指定使用的是TI的单片…...

vscode + python

序 参考链接: 【教程】VScode中配置Python运行环境_哔哩哔哩_bilibili Python部分 Python Releases for Windows | Python.org vscode部分 Visual Studio Code - Code Editing. Redefined 一路next,全部勾上: 就可以了: 安装插…...

badgerdb里面的事务

事务的ACID A 原子性(Atomicity) 多步骤操作,只能是两种状态,要么所有的步骤都成功执行,要么所有的步骤都不执行,举例说明就是小明向小红转账30元的场景,拆分成两个步骤,步骤1&#…...

C# this.Invoke(new Action(() => { /* some code */ }))用法说明

在 C# 中,this.Invoke(new Action(() > { /* some code */ })) 是一种用于在 UI 线程上执行代码的方法,通常用于在后台线程中更新 UI 控件的值或执行其他需要在 UI 线程上执行的操作。 在 Windows Forms 或 WPF 等图形界面应用程序中,UI …...

MongoDB:MySQL,Redis,ES,MongoDB的应用场景

简单明了说明MySQL,ES,MongoDB的各自特点,应用场景,以及MongoDB如何使用的第一章节. 一. SQL与NoSQL SQL被称为结构化查询语言.是传统意义上的数据库,数据之间存在很明确的关联关系,例如主外键关联,这种结构可以确保数据的完整性(数据没有缺失并且正确).但是正因为这种严密的结…...

leetcode每日一题_2682.找出转圈游戏输家

2682.找出转圈游戏输家 题目: n 个朋友在玩游戏。这些朋友坐成一个圈&#xff0c;按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而从第 n 个朋友的位置开始顺时针移…...

OpenCV之薄板样条插值(ThinPlateSpline)

官方文档&#xff1a;OpenCV: cv::ThinPlateSplineShapeTransformer Class Reference 使用方法&#xff1a; 头文件&#xff1a;#include <opencv2/shape/shape_transformer.hpp> &#xff08;1&#xff09;点匹配 一般根据有多少个样本&#xff08;或者点&#xff09;…...

034_小驰私房菜_[问题复盘] Qcom平台,某些三方相机拍照旋转90度

全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 【一、问题】 某些三方相机,预览正常,拍照旋转90度 【二、问题排查】 1 ) HAL这边Jpeg编码数据在哪个地方…...

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总 TI编译器分类 在CCS按照目录下 有个名为${CG_TOOL_ROOT}的目录 其下就是当前工程的编译器 存放目录为&#xff1a; C:\ti\ccs1240\ccs\tools\compiler按类型分为五种&#xff1a; ti-cgt-arm…...

深入探索Java中的File类与IO操作:从路径到文件的一切

文章目录 1. File类的作用与构造方法2. File类常用方法&#xff1a;获取、判断和创建2.1 获取功能方法2.2 判断功能方法2.3 创建和删除功能方法2.4 目录的遍历方法 3. 递归&#xff1a;探索更深的层次代码示例&#xff1a;递归遍历文件夹 结论 &#x1f389;欢迎来到Java学习路…...

Python 处理 Excel 表格的 14 个常用操作

目录 1. 安装依赖库 2. 导入库 3. 读取Excel文件 4. 写入Excel文件 5. 创建工作表 6. 访问工作表 7. 读取单元格数据 8. 写入单元格数据 9. 获取行数和列数 10. 过滤数据 11. 排序数据 12. 添加新行 13. 删除行或列 14. 计算汇总统计 总结 无论是数据分析师、财…...

PyQt有哪些主要组件?

这是一个非常强大的跨平台GUI库&#xff0c;可以让你用Python语言创建美观且功能强大的桌面应用程序。让我们先来了解一下它的主要组件。 首先&#xff0c;我们要介绍的是窗口。窗口是PyQt应用程序的基本元素&#xff0c;所有的GUI元素都放置在窗口中。你可以创建主窗口、模态…...

力推C语言必会题目终章(完结篇)

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 今天是分享C语言必会题目最终章&#xff0c;全部都是硬货&#xff0c;大家都坐好准备开始喽&#xff01;&#xff01;&#xff01; 编写一个函数&#xff0c;计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内…...

CS5263替代停产IT6561连接DP转HDMI音视频转换器ASL 集睿致远CS5263设计电路原理图

ASL集睿致远CS5263是一款DP1.4到HDMI2.0b转换器芯片&#xff0c;设计用于将DP1.4源连接到HDMI2.0b接收器。 CS5263功能特性&#xff1a; DP接口包括4条主通道、辅助通道和HPD信号。接收器支持每通道5.4Gbps&#xff08;HBR2&#xff09;数据速率。DP接收机结合了HDCP1.4和HDCP…...

数据分析 | 随机森林如何确定参数空间的搜索范围

1. 随机森林超参数 极其重要的三个超参数是必须要调整的&#xff0c;一般再加上两到三个其他超参数进行优化即可。 2. 学习曲线确定n_estimators搜索范围 首先导入必要的库&#xff0c;使用sklearn自带的房价预测数据集&#xff1a; import numpy as np import pandas as pd f…...

5G+AI数字化智能工厂建设解决方案PPT

导读&#xff1a;原文《5GAI数字化智能工厂建设解决方案》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。数字化智能工厂定义 智能基础架构协同框架 - 端、边、云、网…...

Windows配置编译ffmpeg +音视频地址

Windows配置MinGW及MinGW-make使用实例 https://blog.csdn.net/Henoiiy/article/details/122550618 ffmpeg安装遇错&#xff1a;nasm/yasm not found or too old. Use --disable-x86asm for a crippled build. https://blog.csdn.net/sayyy/article/details/124337834https://…...

C语言 常用工具型API --------system()

函数名&#xff1a; system&#xff08;&#xff09; 用 法&#xff1a; int system(char *command); 原理&#xff1a; 加载一个子进程去执行指定的程序&#xff0c;而想Linux命令基本都是一个单独的进程实现的&#xff0c;所以你所掌握的Linux命令越多&#xff0c;该函数功…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

Netty自定义协议解析

目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...

Unity VR/MR开发-开发环境准备

视频讲解链接&#xff1a; 【XR马斯维】UnityVR/MR开发环境准备【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

C++.OpenGL (9/64)摄像机(Camera)

颜色(Color) 颜色理论在OpenGL中的应用 #mermaid-svg-dKNDfS4EKDUmG4Ts {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-icon{fill:#552222;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-text…...