吴恩达深度学习——神经网络编程的基础知识
文章内容来自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…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
