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

吴恩达深度学习——神经网络编程的基础知识

文章内容来自BV11H4y1F7uH,仅为个人学习所用。

文章目录

  • 二分分类
    • 一些符号说明
  • 逻辑斯蒂回归
  • 梯度下降法
  • 计算图
  • 逻辑斯蒂回归中的梯度下降法
    • 单个样本下的梯度下降
    • m个样本的梯度下降
  • 向量化
    • 向量化技术
    • 向量化技术计算m个训练数据的梯度
  • numpy的向量

二分分类

假设有一张图片作为输入,判断该图片是不是猫,如果是猫,输出1,否则输出0。用 x x x表示输入, y y y表示输出。
在这里插入图片描述
图片在计算机中用三个二维矩阵分别表示RGB。假设该图片像素大小为64*64,那么矩阵行*列为64*64。这里为了简单起见,画出3个5*4的矩阵。
在这里插入图片描述
将这些值放入一个特征向量 x \boldsymbol{x} x,有 x = [ 255 . . . 202 255 . . . 94 255 . . . 142 ] \boldsymbol{x}=\begin{bmatrix}255\\...\\202\\255\\...\\94\\255\\...\\142\end{bmatrix} x= 255...202255...94255...142

对于64*64的三张图片,总维度大小为64*64*3=12288,有 n = n x = 12288 n=n_x=12288 n=nx=12288

使用 n x n_x nx表示输入的特征向量的维度,简单起见,用 n n n代替。

一些符号说明

  • ( x , y ) (\boldsymbol{x}, y) (x,y)表示一个单独的样本。其中 x \boldsymbol{x} x n n n维的特征向量, y y y是标签,值为 { 0 , 1 } \{{0,1\}} {0,1}
  • m m m表示训练集由 m m m个样本构成, ( x ( 1 ) , y ( 1 ) ) (\boldsymbol{x}^{(1)},y^{(1)}) (x(1),y(1))表示样本一的输入输出; ( x ( 2 ) , y ( 2 ) ) (\boldsymbol{x}^{(2)},y^{(2)}) (x(2),y(2))表示样本二的输入输出; ( x ( 1 ) , y ( 1 ) ) (\boldsymbol{x}^{(1)},y^{(1)}) (x(1),y(1)) ( x ( m ) , y ( m ) ) (\boldsymbol{x}^{(m)},y^{(m)}) (x(m),y(m))表示整个训练集。
    • m t r a i n m_{train} mtrain可以表示为训练集的样本个数。
    • m t e s t m_{test} mtest可以表示为测试集的样本个数。
  • 使用更为方便的符号 X = [ ∣ ∣ ∣ x ( 1 ) x ( 2 ) x ( 3 ) ∣ ∣ ∣ ] \boldsymbol{X}=\begin{bmatrix}|&|&|\\x^{(1)}&x^{(2)}&x^{(3)}\\|&|&|\end{bmatrix} X= x(1)x(2)x(3) 表示训练集,该矩阵有 m m m列,有 n n n行。
  • 使用符号 Y = [ y ( 1 ) y ( 2 ) . . . y ( m ) ] \boldsymbol{Y}=\begin{bmatrix} y^{(1)}& y^{(2)}& ...&y^{(m)} \end{bmatrix} Y=[y(1)y(2)...y(m)]表示输出标签。

py中,X.shape()函数用于输出矩阵的维度。对于 X \boldsymbol{X} X,输出结果为 ( n x , m ) (n_x,m) (nx,m),对于 Y \boldsymbol{Y} Y,输出结果为 ( 1 , m ) (1,m) (1,m)

逻辑斯蒂回归

传统的线性回归函数 y ^ = w T x + b \hat{y}=w^T\boldsymbol{x}+b y^=wTx+b

Logistics回归是一个学习算法,用于在监督学习问题中,输出标签是0或1时。这是一个二元分类问题。

已知输入特征向量 x \boldsymbol{x} x可能是一张图片,希望识别出是不是猫的图片。根据某个算法得出预测值 y ^ \hat{y} y^,当输入特征值满足条件的时候, y ^ \hat{y} y^是1。这里的 x \boldsymbol{x} x是一个 n x n_x nx维的向量。

Logistics回归的参数中, w \boldsymbol{w} w也是一个 n x n_x nx维的向量, b b b是一个实数。使用传统的线性回归函数 y ^ = w T x + b \hat{y}=w^T\boldsymbol{x}+b y^=wTx+b并不是一个很好的二元分类算法。 y ^ \hat{y} y^应该落入0~1之间,但是这个函数并不在此区间。

Sigmoid激活函数

Sigmoid激活函数表达式为 S ( x ) = 1 1 + e − x S(x)=\frac{1}{1+e^{-x}} S(x)=1+ex1
在这里插入图片描述
Sigmoid 函数将输入的任意实数映射到区间(0,1)内,这一特性使得它在很多情况下可用于将输入转换为表示概率的输出,因此在二分类问题中应用广泛。

逻辑斯蒂函数表达式为 P ( x ) = 1 1 + e − ( a + b x ) P(x)=\frac{1}{1+e^{-(a+bx)}} P(x)=1+e(a+bx)1当a=0,b=1时,就是标准的Sigmoid激活函数,Sigmoid激活函数是逻辑斯蒂函数的一个特例,通常使用 σ ( x ) \sigma(x) σ(x)表示。

使用Sigmoid激活函数作用到该表达式中,有预测值 y ^ = σ ( w T x + b ) \hat{y}=\sigma(w^T\boldsymbol{x}+b) y^=σ(wTx+b)

逻辑斯蒂回归损失函数

对于函数 y ^ = σ ( w T x + b ) \hat{y}=\sigma(w^T\boldsymbol{x}+b) y^=σ(wTx+b)给定训练集 ( x ( 1 ) , y ( 1 ) ) (\boldsymbol{x}^{(1)},y^{(1)}) (x(1),y(1)) ( x ( m ) , y ( m ) ) (\boldsymbol{x}^{(m)},y^{(m)}) (x(m),y(m)),想要得到 y ( i ) ^ ≐ y ( i ) \hat{y^{(i)}}\doteq y^{(i)} y(i)^y(i)

损失函数

损失函数(Loss Function)是用于衡量模型预测值与真实值之间差异的函数。

  • 损失函数的值越小,表示模型的预测结果与真实结果越接近。在模型训练过程中,通过不断地调整模型的参数(如神经网络中的权重和偏置),使损失函数的值逐渐减小,从而使模型不断优化,提高预测的准确性。
  • 损失函数还可以用于评估不同模型或同一模型在不同参数设置下的性能。通常,在验证集或测试集上计算损失函数的值,值越小的模型性能越好。

一些常见的损失函数如下:

  1. 均方误差(Mean Squared Error,MSE)
    • 公式 M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2,其中 n n n是样本数量, y i y_i yi是真实值, y ^ i \hat{y}_i y^i是预测值。
    • 应用场景:常用于回归问题,例如预测房价、股票价格等连续值的预测任务。它对较大的误差给予更大的惩罚,因为误差是平方的,所以能使模型更关注较大的偏差。
    • 特点:计算简单,导数也容易计算,方便使用梯度下降等优化算法进行优化。但对异常值比较敏感,因为异常值的平方会使损失值增大很多。
  2. 交叉熵损失(Cross-Entropy Loss)
    • 二分类情况

      • 公式 C E = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] CE = -\frac{1}{n}\sum_{i=1}^{n}[y_i\log(\hat{y}_i) + (1 - y_i)\log(1 - \hat{y}_i)] CE=n1i=1n[yilog(y^i)+(1yi)log(1y^i)],其中 y i y_i yi取值为0或1, y ^ i \hat{y}_i y^i是模型预测样本 i i i为正类的概率。

      注意这里的 l o g log log是国外的写法,实际上是 l n ln ln

      • 应用场景:广泛应用于二分类问题,如垃圾邮件分类、疾病诊断等。当真实标签 y i = 1 y_i = 1 yi=1时,损失函数只与 log ⁡ ( y ^ i ) \log(\hat{y}_i) log(y^i)有关,模型会尽量使 y ^ i \hat{y}_i y^i接近1;当 y i = 0 y_i = 0 yi=0时,损失函数只与 log ⁡ ( 1 − y ^ i ) \log(1 - \hat{y}_i) log(1y^i)有关,模型会尽量 y ^ i \hat{y}_i y^i接近0。
      • 特点:能够很好地反映模型预测的概率分布与真实分布之间的差异,并且在梯度计算上比较方便,有利于模型的快速收敛。

成本函数

成本函数是一个用于衡量机器学习模型性能的函数,它通常是关于模型参数的函数,其值表示模型在训练数据上的性能表现。成本函数的值越低,通常表示模型在训练数据上的表现越好。

与损失函数的关系
  • 成本函数和损失函数密切相关,在许多情况下,它们可能会被混淆使用。损失函数通常是针对单个训练样本计算的误差,而成本函数是对整个训练数据集上的损失函数值进行求和或平均。
  • 损失函数侧重于衡量单个样本预测的误差,而成本函数是对整个训练集的总体误差度量,它是优化算法在训练过程中需要最小化的目标。

常见的成本函数,对于二分类问题: J ( w , b ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( y ^ ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − y ^ ( i ) ] J(\boldsymbol{w}, b)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log(\hat{y}^{(i)} )+(1 - y^{(i)})\log(1 - \hat{y}^{(i)}] J(w,b)=m1i=1m[y(i)log(y^(i))+(1y(i))log(1y^(i)]

综上,Logistics函数可以看作一个非常小的神经网络。

梯度下降法

对于函数
在这里插入图片描述
现在需要做的就是找到合适的 w \boldsymbol{w} w与b使得成本函数 J J J的值最小。
在这里插入图片描述
w \boldsymbol{w} w是一个向量,为了简单起见这里认为是实数,b也是实数。可以看到成本函数 J J J是一个凸函数(注意是这里是西方的说法,开口向上的曲线,称为上凹,或称为下凸。视频中讲上凸或下凸)。

梯度下降在图像上直观理解图片中红色部分,从任意一点沿着某条路径到达最小值。
在这里插入图片描述
对于一维的成本函数
在这里插入图片描述
使用梯度下降 w : = w − α d J ( w ) d x w:=w-\alpha\frac{\mathrm{d}J(w)}{\mathrm{d}x} w:=wαdxdJ(w)反复计算来更新 w w w的值(:=表示更新 w w w的值)。
在这里插入图片描述
在这里插入图片描述

计算图

举例 J ( a , b , c ) = 3 ( a + b c ) J(a,b,c)=3(a+bc) J(a,b,c)=3(a+bc)计算过程如下
u = b c u=bc u=bc v = a + u v=a+u v=a+u J = 3 v J=3v J=3v
画出流程图,从左到右是正向传播,可以计算出 J J J的值。在这里插入图片描述
从右到左是反向传播,可以求导(链式法则)。
d J d v = ( 3 v ) ′ = 3 \frac{\mathrm{d} J}{\mathrm{d} v}=(3v)'=3 dvdJ=(3v)=3 d J d a = d J d v d v d a = ( 3 v ) ′ ( a + u ) ′ = 3 \frac{\mathrm{d} J}{\mathrm{d} a}=\frac{\mathrm{d} J}{\mathrm{d} v}\frac{\mathrm{d} v}{\mathrm{d} a}=(3v)'(a+u)'=3 dadJ=dvdJdadv=(3v)(a+u)=3 d J d u = d J d v d v d u = ( 3 v ) ′ ( a + u ) ′ = 3 \frac{\mathrm{d} J}{\mathrm{d} u}=\frac{\mathrm{d} J}{\mathrm{d} v}\frac{\mathrm{d} v}{\mathrm{d} u}=(3v)'(a+u)'=3 dudJ=dvdJdudv=(3v)(a+u)=3 d J d b = d J d v d v d u d u d b = ( 3 v ) ′ ( a + u ) ′ ( b c ) ′ = 3 c \frac{\mathrm{d} J}{\mathrm{d} b}=\frac{\mathrm{d} J}{\mathrm{d} v}\frac{\mathrm{d} v}{\mathrm{d} u}\frac{\mathrm{d} u}{\mathrm{d} b}=(3v)'(a+u)'(bc)'=3c dbdJ=dvdJdudvdbdu=(3v)(a+u)(bc)=3c d J d c = d J d v d v d u d u d c = ( 3 v ) ′ ( a + u ) ′ ( b c ) ′ = 3 b \frac{\mathrm{d} J}{\mathrm{d} c}=\frac{\mathrm{d} J}{\mathrm{d} v}\frac{\mathrm{d} v}{\mathrm{d} u}\frac{\mathrm{d} u}{\mathrm{d} c}=(3v)'(a+u)'(bc)'=3b dcdJ=dvdJdudvdcdu=(3v)(a+u)(bc)=3b
为了编程的方便,定义 d v = d J d v \mathrm{d}v=\frac{\mathrm{d} J}{\mathrm{d} v} dv=dvdJ d a = d J d a \mathrm{d}a=\frac{\mathrm{d} J}{\mathrm{d} a} da=dadJ

逻辑斯蒂回归中的梯度下降法

单个样本下的梯度下降

对于Logistic回归的公式
在这里插入图片描述
假设样本只有两个特征 x 1 x1 x1 x 2 x2 x2。为了计算 z z z,需要输入 w 1 w1 w1 w 2 w2 w2 b b b
反向传播进行计算,有 ′ ′ d a ′ ′ = d L d a = − y a + 1 − y 1 − a ''\mathrm{d}a''=\frac{\mathrm{d}L}{\mathrm{d}a}=-\frac{y}{a}+\frac{1-y}{1-a} ′′da′′=dadL=ay+1a1y d a d z = e − x ( 1 + e − x ) 2 = a ( 1 − a ) \frac{\mathrm{d}a}{\mathrm{d}z}=\frac{e^{-x}}{(1+e^{-x})^2}=a(1-a) dzda=(1+ex)2ex=a(1a) ′ ′ d z ′ ′ = d L d z = d L d a d a d z = ( − y a + 1 − y 1 − a ) ( a ( 1 − a ) ) = a − y ''\mathrm{d}z''=\frac{\mathrm{d}L}{\mathrm{d}z}=\frac{\mathrm{d}L}{\mathrm{d}a}\frac{\mathrm{d}a}{\mathrm{d}z}=(-\frac{y}{a}+\frac{1-y}{1-a})(a(1-a))=a-y ′′dz′′=dzdL=dadLdzda=(ay+1a1y)(a(1a))=ay d L d w 1 = d L d a d a d z d z d w 1 = d L d z x 1 = x 1 d z \frac{\mathrm{d}L}{\mathrm{d}w_1}=\frac{\mathrm{d}L}{\mathrm{d}a}\frac{\mathrm{d}a}{\mathrm{d}z}\frac{\mathrm{d}z}{\mathrm{d}w_1} =\frac{\mathrm{d}L}{\mathrm{d}z}x_1=x_1\mathrm{d}z dw1dL=dadLdzdadw1dz=dzdLx1=x1dz d L d w 2 = d L d a d a d z d z d w 2 = d L d z x 2 = x 2 d z \frac{\mathrm{d}L}{\mathrm{d}w_2}=\frac{\mathrm{d}L}{\mathrm{d}a}\frac{\mathrm{d}a}{\mathrm{d}z}\frac{\mathrm{d}z}{\mathrm{d}w_2} =\frac{\mathrm{d}L}{\mathrm{d}z}x_2=x_2\mathrm{d}z dw2dL=dadLdzdadw2dz=dzdLx2=x2dz d L d b = d L d a d a d z d z d b = d L d z = d z \frac{\mathrm{d}L}{\mathrm{d}b}=\frac{\mathrm{d}L}{\mathrm{d}a}\frac{\mathrm{d}a}{\mathrm{d}z}\frac{\mathrm{d}z}{\mathrm{d}b} =\frac{\mathrm{d}L}{\mathrm{d}z}=\mathrm{d}z dbdL=dadLdzdadbdz=dzdL=dz
梯度下降计算,有 w 1 : = w 1 − α d w 1 w_1:=w_1-\alpha\mathrm{d}w_1 w1:=w1αdw1 w 2 : = w 2 − α d w 2 w_2:=w_2-\alpha\mathrm{d}w_2 w2:=w2αdw2 b : = b − α d b b:=b-\alpha\mathrm{d}b b:=bαdb

m个样本的梯度下降

对于 m m m个样本,在编程时,令 J = 0 J=0 J=0 d w 1 = 0 \mathrm{d}w_1=0 dw1=0 d w 2 = 0 \mathrm{d}w_2=0 dw2=0 d w . . . = 0 \mathrm{d}w...=0 dw...=0 d b = 0 \mathrm{d}b=0 db=0
伪代码如下:
在这里插入图片描述
在这里插入图片描述
该伪代码有两层for,时间复杂度较大。因此,需要使用向量化技术来摆脱显式的for循环。

向量化

对于 z = w T x + b z=\boldsymbol{w}^T\boldsymbol{x}+b z=wTx+b,其中, w \boldsymbol{w} w x \boldsymbol{x} x都是列向量。在py中使用np.dot()方法,就可以实现向量化技术。通过代码来感受向量化与非向量化之间的差距。

import numpy as np
import time# 生成一个包含 1000000 个元素的一维数组,数组中的元素是在范围 [0, 1) 内均匀分布的随机浮点数。
a = np.random.rand(1000000)
b = np.random.rand(1000000)# 向量化
tic = time.time()
c = np.dot(a, b)
toc = time.time()print(c)
print(toc - tic)# 非向量化
c = 0
ticc = time.time()
for i in range(1000000):c += a[i]*b[i]
tocc = time.time()print(c)
print(tocc - ticc)

因此,能使用numpy库的向量化技术的就不要使用for之类的循环。

关于向量化技术部分光听理论比较抽象,最好通过吴恩达配套的作业进行编码加深理解。

向量化技术

在这里插入图片描述
训练集 X = [ ∣ ∣ ∣ x ( 1 ) x ( 2 ) x ( 3 ) ∣ ∣ ∣ ] \boldsymbol{X}=\begin{bmatrix}|&|&|\\x^{(1)}&x^{(2)}&x^{(3)}\\|&|&|\end{bmatrix} X= x(1)x(2)x(3) ,代入公式分别计算Z和a,有 Z = [ z ( 1 ) z ( 2 ) z ( 3 ) . . . ] = w T X + b = [ w T x ( 1 ) w T x ( 2 ) w T x ( 3 ) . . . ] + [ b b b . . . ] \boldsymbol{Z}=\begin{bmatrix}z^{(1)}& z^{(2)}& z^{(3)}&...\end{bmatrix}=\boldsymbol{w}^T\boldsymbol{X}+b =\begin{bmatrix}w^Tx^{(1)}& w^Tx^{(2)}& w^Tx^{(3)}&...\end{bmatrix}+\begin{bmatrix}b& b& b&...\end{bmatrix} Z=[z(1)z(2)z(3)...]=wTX+b=[wTx(1)wTx(2)wTx(3)...]+[bbb...]使用向量化技术,有 Z = n p . d o t ( w T , x ) + b \boldsymbol{Z}=np.dot(w^T, x) + b Z=np.dot(wT,x)+b在这里的+b使用到了py中的广播,是py的语法。

计算出的 Z \boldsymbol{Z} Z代入a,有 A = [ a ( 1 ) a ( 2 ) a ( 3 ) . . . ] \boldsymbol{A}=\begin{bmatrix}a^{(1)}& a^{(2)}& a^{(3)}&...\end{bmatrix} A=[a(1)a(2)a(3)...]

向量化技术计算m个训练数据的梯度

在这里插入图片描述
之前对 d w \mathrm{d}w dw做了向量化,现在要进一步消去for:在这里插入图片描述

numpy的向量

import numpy as np# 生成5个随机高斯变量,存在数组a中
# 秩为1的数组,一维数组,有5个数据
# 既不是行向量也不是列向量
a = np.random.randn(5)
print(a.shape)
print(a)
print(np.dot(a, a.T))# 5*1的列向量
b = np.random.randn(5, 1)
print(b.shape)
print(b)
print(b.T)
print(np.dot(b, b.T))

不要使用第一种方式创建数据,它是一个数组而不是向量,应该使用第二种方式创建数据。

相关文章:

吴恩达深度学习——神经网络编程的基础知识

文章内容来自BV11H4y1F7uH,仅为个人学习所用。 文章目录 二分分类一些符号说明 逻辑斯蒂回归传统的线性回归函数 y ^ w T x b \hat{y}w^T\boldsymbol{x}b y^​wTxbSigmoid激活函数逻辑斯蒂回归损失函数损失函数成本函数与损失函数的关系 梯度下降法计算图逻辑斯蒂…...

第14个项目:E-Learning在线学习平台Python源码

源码下载地址:https://download.csdn.net/download/mosquito_lover1/90292074 系统截图: 功能介绍: 响应式设计,完全支持移动端 现代化的UI界面 用户认证系统 课程展示功能 模块化的结构 要进一步完善这个应用,您可以: 添加用户认证系统(登录/注册) 实现课程详情页面…...

Qt之文件系统操作和读写

Qt creator 6.80 MinGw 64bit 文本文件是指以纯文本格式存储的文件,如cpp和hpp文件。XML文件和JSON文件也是文本文件,只是使用了特定的标记符号定义文本的含义,读取这种文本文件需要先对内容解析再显示。 qt提供了两种读写文本文件的方法。…...

【物联网】keil仿真环境设置 keilV5可以适用ARM7

文章目录 一、ARM指令模拟器环境搭建1. keil软件2. Legacy Support 二、Keil仿真环境设置1. 创建一个项目2. 编译器介绍(1)arm-none-eabi-gcc(2)arm-none-linux-gnueabi-gcc(3)arm-eabi-gcc(4)grmcc(5)aarch64-linux-gnu-gcc 3. 安装编译器(1)设置调试 一、ARM指令模拟器环境搭…...

VIVADO ILA IP进阶使用之任意设置ILA的采样频率

VIVADO ILA IP进阶使用之任意设置ILA的采样频率 VIVADO ILA IP和VIO IP结合使用任意设置ILA的采样频率 目录 前言 一、VIO IP的配置 二、ILA IP的配置 三、测试代码 四、测试结果 总结 前言 VIVADO中编写完程序上板测试时经常会用到viavdo自带的ILA逻辑分析仪IP核&#x…...

网络编程-网络原理HTTP初识

文章目录 TCP/IP五层协议栈关于自定义协议常见自定义协议引入行文本格式XML格式JSONprotobuf HTTP原理非自定义的应用层协议HTTP的发展HTTP的传输模式HTTP协议中的代理模式和抓包工具 TCP/IP五层协议栈 具体的内容, 我们之前的网络初始里面有, 其实就是先前的计算机的发明者把…...

基于若依框架的动态分页逻辑的实现分析

如果让我们自己写分页查询的逻辑,应该怎么写呢? 在前端要完成分页的逻辑实际要做的工作还是挺多的。 分页查询应该支持查询参数的输入,对于一个有众多属性的列表,可能有很多查询参数,对于不同的参数类型,…...

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务,涉及训练模型将图像分类为预定义类别。本文中,我们将探讨如何使用 PyTorch 构建一个简单的自定…...

【数据结构篇】顺序表 超详细

目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口: 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…...

kubernetes 集群搭建(二进制方式)

Kubernetes 作为当今最流行的容器编排平台,提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外,直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权,并且适用于那…...

linux平台RTMP|RTSP播放器如何回调SEI数据?

我们在对接Linux平台RTMP|RTSP播放的时候,有遇到这样的技术需求,合作企业在做无人机视觉分析场景的时候,除了需要低延迟的拿到解码后的RGB|YUV数据,然后投递给他们自己的视觉算法处理模块外,还需要播放器支持SEI的回调…...

Vue uni-app免手动import

unplugin-auto-import 是一个流行的 JavaScript/TypeScript 插件,可以自动导入常用的库、API 或自定义函数,减少手动书写 import 语句的繁琐操作。它常用于 Vue、React 等框架,帮助开发者提高效率和减少样板代码。 核心功能: 自…...

7. 计算机视觉

计算机视觉(Computer Vision,简称 CV)是人工智能(AI)领域中的一个重要分支,旨在使计算机能够像人类一样“看”并理解数字图像或视频。它结合了计算机科学、数学、图像处理、模式识别、机器学习等多个学科&a…...

在服务器进行docker部署频繁提示permission denied

当你频繁遇到permission denied,证明当前用户的权限不够 可以参考如下操作: 1.创建用户组docker sudo groupadd docker把当前用户添加到docker用户组中 sudo usermod -aG docker $USER优点: 可以在不使用sudo的情况下运行docker命令...

c/c++ static

定义 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。修饰普通函数,表明函数的作…...

C#中System.Text.Json:从入门到精通的实用指南

一、引言 在当今数字化时代,数据的高效交换与处理成为软件开发的核心环节。JSON(JavaScript Object Notation)凭借其简洁、轻量且易于读写的特性,已然成为数据交换领域的中流砥柱。无论是前后端数据交互,还是配置文件…...

内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)

内存故障原因与诊断 您是否曾遇到过电脑无法启动、黑屏、死机,或者系统卡顿的情况?这些问题看起来很复杂,实际上大多数都是内存故障引起的。内存是电脑的核心组成部分之一,任何小东西问题都可能导致系统死机,严重时甚…...

[操作系统] 进程状态详解

在操作系统中,进程是程序执行的基本单位,操作系统负责管理进程的生命周期。为了高效地管理进程,操作系统通过定义不同的进程状态来表示进程在不同时间点的行为。本文将详细介绍常见的进程状态及其相互之间的转换过程。 进程状态概述 在kerne…...

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png) 前言 .NET 多平台应用 UI (.NET MA…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)&#xff…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...