吴恩达深度学习——神经网络编程的基础知识
文章内容来自BV11H4y1F7uH,仅为个人学习所用。
文章目录
- 二分分类
- 一些符号说明
- 逻辑斯蒂回归
- 传统的线性回归函数 y ^ = w T x + b \hat{y}=w^T\boldsymbol{x}+b y^=wTx+b
- Sigmoid激活函数
- 逻辑斯蒂回归损失函数
- 损失函数
- 成本函数
- 与损失函数的关系
- 梯度下降法
- 计算图
- 逻辑斯蒂回归中的梯度下降法
- 单个样本下的梯度下降
- 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+e−x1

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)是用于衡量模型预测值与真实值之间差异的函数。
- 损失函数的值越小,表示模型的预测结果与真实结果越接近。在模型训练过程中,通过不断地调整模型的参数(如神经网络中的权重和偏置),使损失函数的值逐渐减小,从而使模型不断优化,提高预测的准确性。
- 损失函数还可以用于评估不同模型或同一模型在不同参数设置下的性能。通常,在验证集或测试集上计算损失函数的值,值越小的模型性能越好。
一些常见的损失函数如下:
- 均方误差(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=n1∑i=1n(yi−y^i)2,其中 n n n是样本数量, y i y_i yi是真实值, y ^ i \hat{y}_i y^i是预测值。
- 应用场景:常用于回归问题,例如预测房价、股票价格等连续值的预测任务。它对较大的误差给予更大的惩罚,因为误差是平方的,所以能使模型更关注较大的偏差。
- 特点:计算简单,导数也容易计算,方便使用梯度下降等优化算法进行优化。但对异常值比较敏感,因为异常值的平方会使损失值增大很多。
- 交叉熵损失(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=−n1∑i=1n[yilog(y^i)+(1−yi)log(1−y^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(1−y^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)=−m1∑i=1m[y(i)log(y^(i))+(1−y(i))log(1−y^(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+1−a1−y 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+e−x)2e−x=a(1−a) ′ ′ 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+1−a1−y)(a(1−a))=a−y 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 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MA…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
Gitlab + Jenkins 实现 CICD
CICD 是持续集成(Continuous Integration, CI)和持续交付/部署(Continuous Delivery/Deployment, CD)的缩写,是现代软件开发中的一种自动化流程实践。下面介绍 Web 项目如何在代码提交到 Gitlab 后,自动发布…...
