深度学习-CV方向基本原理

2023-05-16

算法

一、卷积

卷积的基本含义

  • 本质上就是相乘求和
  • 功能上拥有数据过滤和增强作用
  • 对于相乘求和,是通用的使用卷积核每个像素点与对应的像素点相乘得到的结果求和作为中心点Result
  • 对于分类:在深度学习上分一维二维三维卷积
  • 一维卷积:卷积核是1*k的一维张量,被卷积对象是在平面维度也是1*W的一维张量,在总维度上一般是 [B,C,W] 三个维度
  • 二维卷积:卷积核是k1*k2,被卷积对象是平面维度H*W,在总维度是 [B,C,H,W] 三个维度

Pytorch卷积的参数

  • 对于参数:需要设定的是输入通道,输出通道(卷积核个数),卷积核大小,Padding,Stride,dilation,bias
  • 输入通道和输出通道与卷积核个数关系:
    • 输入通道为n总维度(B,N,H,W),卷积核个数为m(大小为K*K,拥有N*K*K个W0权重(用于对不同通道的输入进行乘法)),则每一个卷积核会对所有n个通道都进行卷积得到feature map,这个feature map也是n个通道的;但是最终结果需要一个卷积核对应一个通道,那么就必须将这n个通道融合成一个通道,因此,先进行累加得到一个数组,如果有Bias则会对每一通道数据加上一个偏置Bias(一个卷积核只有一个,是一个数字),最后得到最终的输出通道数据(B,1,H,w),那么m个卷积核就可以得到(B,M,H,W)的输出
  • 卷积核大小:一维(1*k),二维(k1*k2),三维(k1*k2*k3);每一个位置都是C(输入通道数)个权重W0,计算时,将权重与对应像素点相乘得到的结果相加作为中心像素的输出
  • Padding:一维(1*p),二维(p1*p2),三维(p1*p2*p3);补全,在维度上进行补全,一般补0,可以自定义
  • Stride:一维(1*s),二维(s1*s2),三维(s1*s2*s3);步长,每次卷积核大小的乘法和计算完毕移动到下一个区域时,要根据步长移动相应的距离,默认1,可改
  • 输入输出尺寸变化(通用):
W_{out} = (W_{in}+2p-m)/s+1
  • dilation:空洞卷积

卷积的参数量计算量

  • 参数量与卷积核的数据相关,与被卷积对象无关,参数量为:
(C_{out}(卷积核个数) * K_1 * K_2 C_{in} + C_{out}(加上卷积核个数的偏置Bias)) 
  • 备注:
    • 首先Cout * K1 * K2 毫无疑问,含有这些个数的卷积容器
    • 每个容器包含Cin个权重,因为在卷积过程中,一个卷积核需要对不同输入通道进行处理,要给每个通道处理过程赋不同的权重,所以这里 * Cin
    • 最后,如果有Bias,则每个卷积核需要存储一个偏置用于计算后的修正
  • 对于每一个像素点的计算过程需要(Cin * K1 * K2)的乘法计算过程,再加上(Cin * K1 * K2 - 1)的累加计算过程,如果含Bias则需要在进行一次+Bias的过程,因此加法过程也是(Cin * K1 * K2)次,两者和是 (2 * Cin * K1 * K2)(不考虑Bias则少一次 (2 * Cin * K1 * K2 - 1)
  • 此时每个像素点计算完成,总共需要计算(Cout * H * W)个像素点
  • 因此最终Conv2D计算次数:
M = 2 * C_{out} * H * W * ( C_{in} * K_1 * K_2 ) 
  • 同理可得Conv3D计算量:
M = 2 * C_{out} * H * W * T * ( C_{in} * K_1 * K_2 * K_3 ) 
  • 同理可得Conv1D计算量:
M = 2 * C_{out} W * ( C_{in} * K ) 

二、激活函数

为什么有激活函数

  • 神经网络中如果不加非线性变换,那都是线性函数(没有曲率),网络学习不到复杂的维度,应该添加非线性变换,激活函数本身是一个非线性的,添加它能使网络能够学习到更高维度的事物,学习能力更强。
  • 大部分激活函数具有归一化作用,限定在一定的区间
  • 可以过滤掉一些不需要的数据

激活函数类别

Sigmoid

f(x)= \frac{1}{1+e^{-x}}
  • 曲线:小于0为0,大于0为1,等于0为0.5;将数据限制在[0,1]
  • 优点:
    • 处处连续,便于求导
    • 数值的范围压缩到[0,1]
  • 缺点:
    • 激活函数计算量大(指数运算)
    • 反向传播时,很容易就会出现梯度消失(求导会让仅仅在0左右存在梯度,其他处会梯度几乎为0)
    • 中心点不为0,导致收敛缓慢,因为数值与权重相乘时,有时需要的效果需要某两个值符号相反,但是Sigmoid无法进行这种操作,就会导致多次同符号相乘来逼近收敛值(Sigmoid提供两个正值,其他层激活函数提供两个负值,逐步逼近收敛值)

tanh

f(x)= \frac{2}{1+e^{-2x}}-1 = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
  • 曲线:类似于Sigmoid,但是中间点在原点;小于0为-1,大于0为1,等于0为0;将数据限制在[-1,1]
  • 优点:与Sigmoid相同,并且数据压缩到[-1,1]
  • 缺点:与Sigmoid相同,但优化了中心点不为0的问题

ReLU

f(x)=\begin{cases} 
    x &x>=0\\
    0 &x<0
\end{cases} 
  • 曲线:大于0的大于0,小于等于0的等于0,曲线是线性的,求导为0和1;
  • 优点:
    • 当输入为正时,不存在梯度饱和问题
    • 没有指数运算,计算量小
  • 缺点:
    • 神经元坏死(梯度为0,这一层权重永远不更新)

LeakyReLU

f(x)=\begin{cases} 
    x &x>=0\\
    \alpha x &x<0
\end{cases} 
  • 曲线:大于0的大于0,等于0的等于0,小于0的小于0,曲线是线性的,求导为,α和1;
  • 优点:与ReLU一样,解决了ReLU的坏死问题
  • 缺点:结果不一致,无法为正负输入值提供一致的关系预测(不同区间函数不同)

ELU

f(x)=\begin{cases} 
    x &x>=0\\
    \alpha(e^{x}-1) &x<0
\end{cases} 
  • 曲线:大于0的大于0,等于0的等于0,小于0的小于0,曲线是线性的,求导为,α和1;
  • 优点:
    • 与LeakyReLU类似,但是将小于0部分改成了指数函数
    • 正常梯度更接近于单位自然梯度,从而使均值向零加速学习
    • 较小的输入下会饱和至负值,从而减少前向传播的变异和信息
  • 缺点:有指数,计算量大;仍有LeakyReLU的缺点

归一化函数

为什么要归一化

ICS(internal covariate shift)问题:多层之间数据需求和供给差距太大

归一化优点

  • 一定程度提高模型精度(解决ICS问题)
  • 提升收敛速度(解决ICS问题)

Softmax

f(x)= \frac{e^{x_i}}{\sum_j^n e^{x_j}} 
  • 描述:一堆实数的值映射到0-1区间,并且使他们的和为1,每个数表示为他的权重与总体权重的比例

Batch Normalization

  • 描述:对[B,C,H,W]的矩阵的每个C作为一组(通道组),对组内归一化(求均值,求方差),总共C组(保留C的信息,将B,H,W的信息进行过滤)
  • 作用:
    • 防止过拟合,可以用来替代drop out层
    • 可以防止梯度弥散
    • 其能够让优化空间(optimization landscape)变的平滑
  • 训练时,得到γ和β,这是BN的可学习参数,测试通用;另外得到均值和方差
  • 测试时会固定训练得到的全局均值和标准差
  • 对比:
    • 在总的层面上,比Dropout更好,适用性更高
    • BN在CV方向处理用的多(保留C信息),LN在NLP用的多,保留B信息
Dropout
  • 解决问题:过拟合(也就是在测试集上的精度很低)
  • 描述:在正向传播过程每个神经元有一定几率停止工作
    • 训练过程:
      • 随机临时地删除一部分神经元(即每个神经元以一定的概率使得其激活函数的输出为0),这些被删除的神经元的权重要备份起来。
      • 用保留的神经元进行前向传播得到误差,采用反向传播对这些保留的神经元进行参数更新,临时删除的不更新。
      • 恢复被删除的神经元
    • 测试过程:采用全部神经元,但每一个神经单元的权重参数要乘以概率p

Layer Normalization

  • 描述:对[B,C,H,W]的矩阵的每个B作为一组(通道组),对组内归一化(求均值,求方差),总共B组

Instance Normalization

  • 描述:对[B,C,H,W]的矩阵的每个C作为一组(通道组),对组内归一化(求均值,求方差),总共C*B组

Group Normalization

  • 描述:对[B,C,H,W]的矩阵的每个C/h作为一组(通道组),对组内归一化(求均值,求方差),总共h*B组

训练测试相关

反向传播

  • 本质上就是求导,结果传给下一层,卷积就是对w权重求导,对b偏置求导,激活函数对激活函数本身求导
  • 每一层的梯度越大,那么权重更新的越大,学习速度越快

梯度消失和梯度爆炸

  • 深层网络容易出现,ResNet解决了梯度消失问题(直接add就不存在梯度会消失了)
  • 梯度消失:就是梯度无限接近于0,相乘导致结果趋于0
  • 梯度爆炸:连续的梯度大于1,相乘导致结果趋于无穷
  • 梯度饱和:在某个区间,梯度变化会非常小且接近于0,如Sigmoid,tanh

过拟合和欠拟合

  • 欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;
    • 原因
      • 模型复杂度过低
      • 特征量过少
    • 解决
      • 模型复杂化
      • 增加更多的特征,使输入数据具有更强的表达能力
      • 调整参数和超参数
      • 降低正则化约束
  • 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。
    • 原因
      • 建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则
      • 样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则
      • 假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
      • 参数太多,模型复杂度过高
      • 对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(noevent),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
      • 对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征
    • 解决
      • 增加训练数据数
      • 使用正则化约束
      • 减少特征数
      • 调整参数和超参数
      • 降低模型的复杂度
      • 使用Dropout
      • 提前结束训练

优化器

  • 优化器是根据loss进行反向传播,更新网络中的权重,使得网络逼近以至得到最优解的算法
  • PyTorch.optimizer.zero_grad():每个batch结束给梯度归零
  • PyTorch.optimizer.step():更新网络参数
W,\theta_t = 权重\\
\frac{\partial loss}{\partial W},g_t = 梯度\\
\eta = 学习率lr\\
diag = 对角矩阵化\\
G_{t,i} = 每处梯度的平方和的矩阵化表示

SGD随机梯度下降(BGD,MBGD)

\theta_t =\theta _{t-1}-\eta g_t
  • 每次更新度随机采用一个样本计算损失来更新参数,计算比较快,占用内存小,可以随时新增样本。这种方式对于样本中的异常数据敏感,损失函数容易震荡。容易收敛到局部极小值,但由于震荡严重,会跳出局部极小,从而寻找到接近全局最优的解。
  • 代码中lr为SGD中的随机步长,但在实际应用中,lr一般在局部是固定的;grads是梯度,params是参数权重
  • 梯度的方向并没有指向最小值的方向,呈之字形缓慢趋向最小值
for key in params.keys():
    params[key] -= self.lr * grads[key]
  • SGD,BGD,MBGD区别
    • BGD(批量梯度下降):更新每一参数都用所有样本更新,m=all,更新100次遍历多有数据100次
    • SGD(随机梯度下降):更新每一参数都随机选择一个样本更新,m=1
    • MBGD(小批量梯度下降):更新每一参数都选m个样本平均梯度更新,1<m<all
    • 总结:SGD训练速度快,大样本选择;BGD能得到全局最优解,小样本选择;MBGD综合二者选择。

Momentum(SGDM,SGD with momentum)

Momentum

v_t =\beta v_{t-1} - \eta g_t \\
\theta_t =\theta _{t-1}+v

SGDM

v_t = \beta v_{t-1} - (1-\beta)\eta g_t\\
\theta_t =\theta _{t-1}+v
  • α表示动量因子,一般取值0.9,也可以理解为衰减因子,类似于在地面上滚动小球时,摩擦力和空气阻力所带来的的影响。v表示速度,表示物体在梯度作用力下的速度
  • 每次梯度更新都会带有前几次梯度方向的惯性,使梯度的变化更加平滑;Momentum梯度下降算法能够在一定程度上减小权重优化过程中的震荡问题。
  • 优点:使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡
  • 缺点:无法预知,从而预先减速;不能根据参数的重要性而对不同的参数进行不同程度的更新(一个网络所有的参数都一视同仁,使用同样的一个整体处理方式)。
for key in params.keys():
    self.v[key] = self.alpha* self.v[key] - self.lr * grads[key]
    params[key] += self.v[key]

NAG(Nesterov Accelerated Gradient 牛顿动量梯度下降)

v_t = \beta v_{t-1} - (1-\beta)\frac{\partial loss}{\partial(W-\eta\alpha v)}\\
\theta_t =\theta _{t-1}+v
  • NGA算法首先得到当前点的动量项,之后得到提前点的梯度方向,用两者结合得到当前点的梯度更新方向。
  • 优点:解决了SGDM的无预知性
  • 缺点:不能根据参数的重要性而对不同的参数进行不同程度的更新。

AdaGrad

v_t = G_{t,i} = diag(\sum_{i-1}^{t}Grads_{i,1}^2,\sum_{i-1}^{t}Grads_{i,2}^2,...,\sum_{i-1}^{t}Grads_{i,d}^2)\\
\theta_t =\theta _{t-1} - \frac{\eta}{\sqrt{v_t+\epsilon}}\frac{\partial loss}{\partial W}
  • 防止分母为0,加了一个随机扰动ε
  • 优点:无需手动调整梯度
  • 缺点:因为h一直在增大,所以到了后期,W的变化将会逐渐变小;初期分母小,梯度变化大,后期分母大,梯度变化小,会很快学习结束,可能会出现还未收敛到最小值的情况

RMSProp、Adadelta

v_t = \beta v_{t-1} + (1-\beta)G_{t,i}\\
\theta_t =\theta _{t-1} - \frac{\eta}{\sqrt{v_t+\epsilon}}\frac{\partial loss}{\partial W}
  • 解决Adagrad分母会不断积累,这样学习率就会收缩并最终会变得非常小的问题。RMSprop在Adagrad算法的基础上对η进行了一阶指数平滑处理,,学习率系数的分母部分不再是单纯的累加,变成了滑动加权平均值,不会导致学习率消失的问题。

Adam

m_t=\beta _1m_{t-1}+(1-\beta _1)g_t\\
v_t=\beta _2v_{t-1}+(1-\beta _2)g_t^2\\
\hat{m_t}=\frac{m_t}{1-\beta _1^t}\\
\hat{v_t}=\frac{v_t}{1-\beta _2^t}\\
\theta_t =\theta _{t-1}-\eta \frac{\hat{m}}{\sqrt{\hat{v}+\epsilon} }
  • 其中β1默认值为0.9,β2默认值为0.999,ε为10^-8,Adam集合动量和Adadelta两者的优点

Adamax

m_t=\beta _1m_{t-1}+(1-\beta _1)g_t\\
v_t=\beta^\infty_2 v_{t-1}+(1-\beta^\infty_2)|g_t|^\infty\\
\hat{m_t}=\frac{m_t}{1-\beta _1^t}\\
u_t=\sqrt[\infty]{v_t} = max(\beta_2*v_{t-1}, |g_t|)\\
\theta_t =\theta _{t-1}-\eta \frac{\hat{m}}{u_t}
  • 因为ut大于0,所以无需ε,只需要两个β就行

Nadam

m_t=\beta _1m_{t-1}+(1-\beta _1)g_t\\
\hat{m_t}=\frac{m_t}{1-\beta _1^t}\\
\theta_t =\theta _{t-1}-\eta \frac{1}{\sqrt{\hat{v}+\epsilon}}(\beta_1\hat{m}+\frac{(1-\beta_1)g_t}{1-\beta_1^t})
  • Nadam是adam和NAG结合;不再像NAG提前预测后面位置,而是直接在当前位置对当前梯度方向做两次更新,同样运用到Adam中需要对m做一个修正

AMSGrad

m_t=\beta _1m_{t-1}+(1-\beta _1)g_t\\
v_t=\beta _2v_{t-1}+(1-\beta _2)g_t^2\\
\hat{v_t} = max(v_t,v_{t-1})\\
\theta_t =\theta _{t-1}-\eta \frac{\hat{m}}{\sqrt{\hat{v}+\epsilon} }
  • 标识别、机器翻译领域,自适应学习速率的方法无法收敛到最佳情况,并且弱于基于动量的随机梯度下降

总结

image
image

Loss

  • 回归损失:平均绝对误差(MAE/L1损失),平均平方误差(MSE/L2损失),smooth L1 loss,Huber损失,log cosh loss,quantile loss;
  • 分类损失:0-1损失,logistic loss(对数损失),hinge loss(铰链损失),exponential loss(指数损失),KL散度;
  • 识别、检测和分割常用的损失:softmax cross-entropy loss,weighted cross-entropy loss,focal loss,OHEM,center loss,triplet loss,contrastive loss,L-softmax,LMCL,IOU loss,GIOU loss,DIOU loss,CIOU loss,dice loss。
  • 正则化(Regularization)是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。将目标函数变成 原始损失函数+额外项

MAE/L1

MAE = \frac{1}{n}\sum_{i=1}^n|f(x_i)-y_i|
  • 对估计值和真实值之差取绝对值的平均值
  • 曲线连续但是在f(x)=y时不可导,求解效率低
  • 梯度较为稳定,但是即使损失很小梯度仍然保持不变,不利于模型的收敛
  • 对异常值更鲁棒(相比于L2)。
  • 正则化:但是可以利用L1进行正则化;保持解的稀疏性,即为了使损失最小化,一些影响小的权重参数经过学习设置为0,可以用于特征选择

MSE/L2

MSE = \frac{1}{n}\sum_{i=1}^n{(f(x_i)-y_i)}^2

PSNR:

PSNR = 10log_{10}(\frac{{255}^2}{MSE})
  • 对估计值和真实值之差取平方和的平均值
  • MSE是平滑函数、处处可导,因此在求解优化问题时有利于误差梯度的计算
  • 随着误差的减小,梯度也在减小,因此使用固定的学习速率,也能较快的收敛到最小值
  • 通过平方计算放大了估计值和真实值的距离,因此对于异常值带来很大的惩罚,从而降低正常值的预测效果
  • 误差很大时梯度也很大,在训练初期不稳定,容易梯度爆炸
  • 正则化:L2进行正则化可以防止过拟合,在正则化后的梯度下降迭代公式中,会给权重参数乘以一个小于1的因子;权重值减小,从而得到的模型越平滑

Charbonnier Loss

CharbonnierLoss = \sqrt{{(y-f(x))}^2+\epsilon^2}
  • L1和L2会造成图像过于平滑的问题,缺乏感官上的照片真实感
  • 优点是曲线更平滑了,接近零点的值的梯度由于常数隆的存在,梯度也不会太小,避免梯度消失;远离零点的值的梯度由于开方,梯度也不会太大,避免梯度爆炸。

crossentropy 交叉熵

C = \frac{1}{n}\sum_{i=1}^{n}{[Yln(P)+(1-Y)ln(1-P)]}
  • 其中1的概率是P,0的概率是(1-P)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习-CV方向基本原理 的相关文章

随机推荐

  • Docker核心技术-联合文件系统

    联合文件系统 xff08 UnionFS xff09 是一种分层 轻量级并且高性能的文件系统 xff0c 它支持对文件系统的修改作为一次提交来一层层的叠加 xff0c 同时可以将不同目录挂载到同一个虚拟文件系统下 联合文件系统是 Docke
  • Spark SQL与Hive SQL解析执行流程

    转载专用 xff1a 读到了好文章 xff0c 用于分享收藏 xff0c 侵权删 转发自大佬 xff1a 数据人生coding xff0c https yuanmore blog csdn net type 61 blog 转发自大佬 xf
  • 银河麒麟V10服务器系统安装教程及注意事项

    系统安装 1 引导安装 从U盘引导安装时首先进入的是安装引导页面 xff0c 如下图 xff1a 使用向上方向键 lt gt 选择 Install Kylin Linux Advanced Server V10 xff0c 按进入安装过程
  • 1012 - iOS之View Controllers的理解

    需求现在只是把navigationController的导航栏字体给去掉 xff0c 不过既然都看了 xff0c 那就直接刚一下吧 阅读官网文档的顺序 xff1a Managing Content in Your App 39 s Wind
  • CentOS7 linux下yum安装redis以及使用 及 外网访问

    一 安装redis 1 检查是否有redis yum 源 1 yum install redis 2 下载fedora的epel仓库 1 yum install epel release 3 安装redis数据库 1 yum install
  • MySQL8.0忘记密码后重置密码(亲测有效)

    实测 xff0c 在mysql8系统下 xff0c 用mysqld console skip grant tables shared memory可以无密码启动服务 服务启动后 xff0c 以空密码登入系统 mysql exe u root
  • My uBlock static filters

    My uBlock static filters 2022 百度 2022 06 https pan baidu com pan baidu com bpapi analytics pan baidu com rest 2 0 pcs ad
  • conda安装包报错:The current user does not have write permissions to the target environment(当前用户没有写入权限)

    问题 xff1a 在Winodws 10下使用conda安装第三方包时报错 xff1a EnvironmentNotWritableError The current user does not have write permissions
  • CCF 201809-3元素选择器

    分析 xff1a 这题超级坑 xff0c 当时考试时只得了50分 xff0c 现在重新做一直卡在80分 xff0c 各种复杂情况都考虑到了 xff0c 还是不能ac xff0c 于是尝试三种不同办法解决 xff0c 也均不能AC xff0c
  • 【开发经验】通过ffmpeg进行视频剪辑

    文章目录 前言一 视频剪辑1 1 生成标题2 文字和背景图叠加3 视频切割4 视频和背景图叠加结果演示java执行cmd指令更多ffmepg指令 前言 突然发现抖音有有一些人发布电视剧的精彩片段 xff0c 并且还获得了很多的点赞 突然发现
  • IE11离线安装总是提示“获取更新”的解决方法

    微软下载的IE11离线包在安装前 xff0c 必须要先安装必备更新 首先 xff0c 先检查操作系统 xff0c XP系统是无法安装IE11的 xff0c XP支持的最高版本为IE8 xff0c 如果是XP系统 xff0c 请先升级到WIN
  • debian系列linux 启动后黑屏,只有一个光标

    重复的按ctrl 43 alt 43 F1 一直到光标消失 如果跳出一个客户端登录的话就再重复按一下上面介绍的组合键 过一会儿就开机了
  • 抖音流行的字符视频如何实现

    前几天 xff0c 有个朋友给我分享了一个抖音短视频链接 xff0c 是以代古拉k跳舞视频为原型的字符视频 xff0c 朋友问我 xff1a 这个你知道怎么做吗 xff1f 我们都知道视频是由一帧一帧的静态图片组合而成的 xff0c 所以当
  • ANR系列(三)——ANR分析套路

    前言 在懂得了ANR的发生原理和监控原理之后 xff0c 是时候针对项目中的ANR进行分析了 xff0c 在分析前要知道ANR的分析套路一般是怎么分析的 分析ANR问题需要哪些日志 Trace日志 xff1a 当ANR产生的时候 xff0c
  • java socket学习笔记(一)——单线程实现socket通信

    服务器端 span class hljs keyword public span span class hljs keyword class span serverDemo span class hljs keyword public sp
  • Backtrace 分析

    xfeff xfeff 1 Java Backtrace 从Java Backtrace 我们可以知道当时Process 的虚拟机执行状态 Java Backtrace 依靠SignalCatcher 来抓取 Google default
  • docker搭建grafana+loki+promtail日志收集系统

    文章目录 docker搭建grafana 43 loki 43 promtail日志收集系统1 拉取镜像2 loki搭建1 xff09 新建配置文件2 xff09 启动容器 3 promtail搭建1 xff09 新建配置文件2 xff09
  • 微信 Mac 内测版(2.3.0)

    微信 Mac 内测版 2 3 0 WeChat for Mac 微信 Mac 版 极致简洁 迅捷沟通 微信内测版本 2 3 0 For macOS Sierra 10 12 or later 适用于 OS X 10 11 El Capita
  • 第1步 数据预处理

    文章目录 前言一 安装依赖环境二 导入依赖包三 导入数据集保姆级操作演示 xff1a 四 处理丢失数据保姆级操作演示 五 解析分类数据保姆级操作演示 六 拆分数据集为训练集合和测试集合七 特征缩放总结 前言 一 安装依赖环境 开始之前 xf
  • 深度学习-CV方向基本原理

    算法 一 卷积 卷积的基本含义 本质上就是相乘求和功能上拥有数据过滤和增强作用对于相乘求和 xff0c 是通用的使用卷积核每个像素点与对应的像素点相乘得到的结果求和作为中心点Result对于分类 xff1a 在深度学习上分一维二维三维卷积一