深度学习算法面试常问问题(二)
X86和ARM架构在深度学习侧的区别?
X86和ARM架构分别应用于PC端和低功耗嵌入式设备,X86指令集很复杂,一条很长的指令就可以完成很多功能;而ARM指令集很精简,需要几条精简的短指令完成很多功能。
影响模型推理速度的因素?
- FLOPs(模型总的乘加运算)
- MAC(内存访问成本)
- 并行度(模型推理时操作的并行度越高,速度越快)
- 推理平台
减少模型内存占用有哪些方法?
- 模型剪枝
- 模型蒸馏
- 模型量化
- 模型结构调整
图像阈值法
- 全局阈值:对整个图像中的每一个像素都选用相同的阈值。
- 局部阈值:又称自适应阈值,局部阈值法假定图像在一定区域内受到的光照比较接近。它用一个滑窗扫描图像,并取滑窗中心点亮度与滑窗其他区域的亮度进行比较,如果中心点亮度高于邻域亮度,则将中心点设为白色,否则设为黑色。
图像膨胀腐蚀的相关概念
图像的膨胀和腐蚀是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。
- 膨胀:将图像的高亮区域或白色部分进行扩张,其运行结果比原图的高亮区域更大
- 腐蚀:反之亦然
边缘检测
图像边缘是图像最基本的特征,指图像局部特征的不连续性。图像边缘有方向和幅度两种属性。边缘通常可以通过一阶导数和二阶导数检测得到。、
一阶导数:以最大值作为对应的边缘位置,常用的算子:roberts算子,sobel算子和prewitt算子。
二阶导数:以过零点作为对应边缘的位置,常用的算子:laplacian算子,此类算子对噪声敏感。
区别:一阶微分算子获得的边界是比较粗略的边界,反映的边界信息较少(边界很粗),但是所反映的边界比较清晰;二阶微分算子获得的边界是比较细致的边界。反映的边界信息包括了许多的细节信息,但是所反映的边界不是太清晰。
其他边缘算子:前面均是通过微分算子来检测图像边缘,还有一种是canny算子,在满足一定约束条件下推导出来的边缘检测最优化算子。
图像高/低通滤波
高频:图像中灰度变化剧烈的点,一般是图像轮廓或者噪声,常用算子:canny,sobel算子,laplacian算子等边缘算子
低频:图像中平坦的,变化不大的点,也就是图像中大部分区域,常用算子:均值滤波,高斯滤波,中值滤波
均值滤波的缺陷:不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变模糊,不能很好去除噪音点
高斯滤波的原理和操作步骤:高斯滤波是整幅图像进行加权平均的过程,每一个像素点的值都由本身和领域其他像素点经过加权平均后得到。具体操作是用一个高斯核扫描图像中的每一个像素,用模板确定的邻域内像素的加权灰度值去替代模板中心像素点的值。
中值滤波的原理和使用中值滤波的场景:用像素点邻域灰度值的中值来代替该像素点的灰度值,中值滤波在去除脉冲噪声、椒盐噪声的同时又能保留图像的边缘细节。
常用的色彩空间格式
RGB、RGBA、HSV、HLS、Lab、YCbCr、YUV等
- RGBA是代表Red(红)、Green(绿)、Blue(蓝)和Alpha(透明度)的⾊彩空间
- HSV⾊彩空间(Hue-⾊调、Saturation-饱和度、Value-亮度)将亮度从⾊彩中分解出来,在图像增强算法中⽤途很⼴。
- HLS⾊彩空间,三个分量分别是⾊相(H)、亮度(L)、饱和度(S)。
- Lab⾊彩空间是由CIE(国际照明委员会)制定的⼀种⾊彩模式。⾃然界中任何⼀点⾊都可以在Lab空间中表达出来,它的⾊彩空间⽐RGB空间还要⼤。
- YCbCr进⾏了图像⼦采样,是视频图像和数字图像中常⽤的⾊彩空间。在通⽤的图像压缩算法中(如JPEG算法),⾸要的步骤就是将图像的颜⾊空间转换为YCbCr空间。
- YUV⾊彩空间与RGB编码⽅式(⾊域)不同。RGB使⽤红、绿、蓝三原⾊来表示颜⾊。⽽YUV使⽤亮度、⾊度来表示颜⾊。
Python的GIL
GIL是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍使先后顺序的,并不是同时进行的。GIL存在引起的最直接问题是:在一个解释器进程中通过多线程的方式无法利用多核处理器来实现真正的并行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程都有python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大。
- python的进程中的线程不能并行,因为GIL,每个线程实际上是交替执行,每次只有一个线程拿到GIL执行程序
- 如果想并行 需要并行进程,而不是并行线程
为什么会有GIL锁?
python是解释型语言,意味着解释一行,运行一行,它并不清楚代码全局;因此每个线程在调用cpython解释器运行之前,需要先抢到GIL锁,然后才能运行;编译型语言就不存在GIL锁,编译型语言会直接编译所有代码。
面对GIL的存在,我们可以有多个方法帮助提升性能
- 在I/O密集型任务下,我们可以使用多线程或者协程来完成
- 可以选择Jython等没有GIL的解释器,但并不推荐更换解释器,因为会错过众多C语言模块中的有用特性
- CPU密集可以使用多进程+进程池
10个linux常用命令
ls pwd cd touch rm mkdir tree cp mv cat more grep echo
python2和python3的区别?列举5个
- python3 print必须用括号,python2既可以括号, 又可以用空格
- python3 range返回生成器, python2 返回list
- python3 使用utf-8编码,python2 使用ascii编码
- python3中str表示字符串序列, python2中unicode表示字符串序列
- python3可直接显示中文,python2必须引入coding声明才能正常显示中文
- python3 input python2 是raw_input()
add和concat操作,有哪些区别与联系呢?
- concat操作而言,通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加的。例如UNet等分割网络
- add操作更像信息之间的叠加,这里有一个前提是add前后的语义信息是相似的。例如FPN的网络结构设计。
在backbone不变的情况下,若显存有限,如何增大训练时的batchsize?
1.使用trick, 节省显存
- 使用inplace操作,比如relu激活函数,我们可以设置inplace=True
- 每次循环结束时候,我们可以手动删除loss
- 使用fp16混合精度计算
- 训练过程中的显存占用包括前向与反向所保存的值,所以我们在不需要bp的forward时候,我们可以使用torch.no_grad()
- 使用GAP来替代FC等
- 优化器的使用上,理论上,显存占用sgd<momentum<adam
2.从反传角度考虑
在训练的时候,CNN主要开销来自于存储用于计算backward的activation,对于一个长度为N的CNN,需要O(N)的内存。在《Training Deep Nets with Sublinear Memory Cost》,每隔sqrt(N)个node存一个activation,需要的时候再算,这样显存就从O(N)降到O(sqrt(N)),pytorch中torch.utils.checkpoint就是实现这样的功能。
3.使用梯度积累
由于显存受限bs只能设置为4,想要通过梯度累积实现bs等于16,这需要4次迭代,每次迭代的loss除以4。
- 获取loss,在计算当前梯度,不过暂时不清空梯度,在已有梯度加上新梯度。当梯度累加到一定次数之后,使用optimizer.step将累计的梯度来更新一下参数
- 梯度积累的效果是不如真实的bs放大8倍的,因为增大8倍bs的图片,其running_mean和running_var更加准确。
语义分割中的IOU
常常将预测出来的结果分成四个部分:TP、FP、TN、FN。
大块白色斜线标记的是TN(预测中真实的背景部分),红色部分标记的是:TN(预测中被预测为背景,但实际上不是背景的部分),蓝色斜线部分是FP(预测分割为某标签的部分,但是其实并不该标签所属的部分),中间黄色块是TP(预测的某标签部分,符合真值)
IOU=target ⋀prediction target⋃predictionIOU = \frac{\text { target } \bigwedge \text { prediction }}{target \bigcup prediction} IOU=target⋃prediction target ⋀ prediction
def compute_ious(pred, label, classes):'''computes iou for one ground truth mask and predicted mask'''ious = [] # 记录每一类的ioufor c in classes:label_c = (label == c) # label_c为true/false矩阵pred_c = (pred == c)intersection = np.logical_and(pred_c, label_c).sum()union = np.logical_or(pred_c, label_c).sum()if union == 0:ious.append(float('nan')) elseious.append(intersection / union)return np.nanmean(ious) #返回当前图片里所有类的mean iou
标签平滑 label smoothing
思路:在训练时假设标签可能存在错误,避免过分相信训练样本标签。在训练样本上,我们并不能保证所有样本标签都标注正确,如果某个样本的标注是错误的,那么在训练时,该样本就有可能对训练结果产生负面影响。很自然的想法是我们可以告诉模型,标签不一定正确,那么训练出的模型对于少量样本错误就会有“免疫力”,从而拥有更好地泛化性能。
sigmoid 和 softmax函数
sigmoid得到的结果是“分到正确类别的概率和未分到正确类别的概率”,softmax得到的是“分到正确类别的概率和分到错误类别的概率”
sigmoid:对于非互斥的多标签分类任务,且我们需要输出多个类别。如一张图我们需要输出是否是男人,是否戴了眼镜,我们可以采用sigmoid来输出最后的结果。例如:[0.01, 0.02, 0.41, 0.62, 0.3, 0.18, 0.5, 0.42, 0.06, 0.81],我们通过设置一个概率阈值,比如0.3,如果概率值大于0.3,则判定类别符合,那么该输入样本则会被判定为类别3、4、5、7和8,即一个样本具有多个标签。
softmax为什么要引入指数形式?
如果使用max函数,虽然能完美的进行分类但函数不可微从而无法进行训练,引入以e为底的指数并加权归一化,一方面指数函数使得结果将分类概率拉开了距离,另一方面函数可微。
softmax:当我们的任务是一个互斥的多类别分类任务,网络只能输出一个正确答案,我们可以用softmax函数处理各个原始的输出值
yi=Softmax(xi)=exi∑j=1nexjy_{i}=\operatorname{Softmax}(x_{i})=\frac{e^{x_{i}}}{\sum_{j=1}^{n} e^{x_{j}}} yi=Softmax(xi)=∑j=1nexjexi
import numpy as np
def softmax( f ):# 为了防止数值溢出,我们将数值进行下处理# f: 输入值f -= np.max(f) # f becomes [-666, -333, 0]return np.exp(f) / np.sum(np.exp(f))
机器学习分类指标
- accuracy:指的是正确预测的样本数占总预测样本数的比值,它不考虑预测的样本是正例还是负列,考虑的是全部样本
- precision:指的是正确预测的正样本数占所有预测为正样本的数量比值,precision只关注预测为正样本的部分
- recall:指的是正确预测的正样本数占真实样本总数的比值,也就是我能从这些样本中能够正确找出多少个正样本
- F-score:相当于precision和recall的调和平均。公式中可以看出,recall和precision任何一个数值减少,F-score都会减少。
- P-R曲线:纵轴设置为precision,横轴设置成recall,改变阈值就能获得一系列的pair并绘制曲线,一般来说如果一个曲线完全包围另外一个曲线,我们可以认为该模型的分类效果要好于对比模型。(AP)
- ROC:在实际的数据集中经常出现类别不平衡现象,即负样本比正样本多很多(或相反),而且在测试数据中的正负样本的分布也可能随着时间而变化。而在这种情况下,roc曲线能够保持不变。同时,我们可以断言,roc曲线越接近左上角,该分类器的性能越好,意味着分类器在假阳性很低的同时获得了很高的真阳率。
图像分割指标
-
pixel accuracy(标记正确 / 总像素数目),优点:简单。缺点是:图像中大面积是背景,而目标较少,即使整个图片预测为背景也会有很高的PA得分。
-
MPA(mean pixel accuracy):计算每类各自分类的准确率,再取均值。
-
MIou:计算两个集合的交集与并集之比,在语义分割中,这两个集合为真实值和预测值。
- FWIoU:MIou的一种提升,这种方法可以根据每个类出现的频率为其设置权重。
目标检测指标
- mAP:即各类别AP的平均值
- AP:PR曲线下的面积
- PR曲线:Precision-Recall曲线
- Precision: TP/(TP + FP)
- Recall: TP/(TP+FN)
- TP: IoU > 0.5的检测框数量
- FP:IoU <= 0.5的检测框,或者是检测到同一个GT的多余检测框(NMS)
- FN:没有检测到GT的数量
激活函数
- mish激活函数:
Mish =x∗tanh(ln(1+ex))\text { Mish }=x * \tanh \left(\ln \left(1+e^{x}\right)\right) Mish =x∗tanh(ln(1+ex))
mish函数:理论上对负值的轻微允许更好的梯度流,而不是像ReLU中那样硬边界。其中最重要的是平滑型激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。pytorch版本的mish比较占显存。
- Leaky Relu与PRelu:前者是设置一个超参数,后者将超参数设置成一个可学习的参数,优点:(1)计算简单有效(2)比sigmoid与tanh收敛更快(3)解决了dead神经元的问题。
- RRelu是leaky relu的一个变体,在RRelu中,斜率是一个给定范围内随机抽取的值,这个值在测试环节就会固定下来。
- swish函数:
f(x)=x⋅sigmoid(βx)f(x)=x \cdot \operatorname{sigmoid}(\beta x) f(x)=x⋅sigmoid(βx)
- GELU(Gaussian Error Linear Unit):灵感来源于relu和dropout,在激活中引入随机正则的思想。gelu通过输入自身的概率分布情况,决定抛弃还是保留当前神经元。
有效感受野
understanding the effective receptive field in deep convolutional neural network 一文中提出了有效感受野的理论,论文发现并不是感受野内所有像素对输出向量的贡献相同,在很多情况下感受野区域内像素的影响分布是高斯分布,有效感受野仅占理论感受野的一部分,且高斯分布从中心到边缘快速衰减,下图第二个是训练后CNN的典型有效感受野。
我们看到绿色这个区域,黄色为图像,绿色框扫过时,对于第一例是只扫过一次,也就是参与一次运算,而后面靠近中心区域的列则均是参与了多次计算。因此,最终实际的感受野,是呈现一种高斯分布。
感受野的范围越大表示其接触到的原始图像范围越大,也就意味着它能学习更为全局,语义层次更高的特征,相反,范围越小则表示其所包含的特征越局部和细节
常用的网络模型训练技巧?
- 使用更大的batch size,可以加快训练进度,但是对于凸优化问题,收敛速度会随着batch size的增加而降低。所以在相同的epoch下,batch size更大可能会导致验证集的acc更低,所以可以使用以下技巧来解决问题
- 使用更大学习率,例如lr等于0.1 batch size 为256,当将batch size增大至b,需要将初始lr 增加至0.1b
- lr warm up
- 使用更低的数值精度
- cosine learning rate decay
- label smoothing
- knowledge distillation
- mixup training, cutout, random erase等数据增强方法。
权重初始化
- 权重初始化为0
如果将权重初始化全部为0,等价于一个线性模型,将所有权重设为0,对于每个w而言,损失函数的导数都是相同的,因此在随后的迭代过程中所有权重都具有相同的值,这样会使隐藏单元变得对称,并继续运行设置的n次迭代中,会导致网络中同一个神经元的不同权重都是一样的。
- 随机初始化
如果X很大,w相对较大,会导致Z非常大,这样激活函数是sigmoid,就会导致sigmoid的输出值1或者0,到知道train不动,同时如果初始化均值为0,方差为1的高斯分布(训练过程参数分布会向两侧跑),当神经网络层数增多时,会发现越往后的层激活函数的输出值几乎为0,极易出现梯度消失。
- Xavier 初始化
上面两种方法初始化权重极易出现梯度消失的问题,而xavier初始化可以解决上面的问题,其思想就是尽可能地让输入和输出服从相同地分布,这样就能避免后面层地激活函数地输出值趋向于0, xavier权重初始化比较适用于tanh和sigmoid激活函数,而对relu这种非对称性地激活函数还是容易出现梯度消失。权值采样(0, 1/N)的高斯分布。
- kaiming初始化
主要解决relu层将负数映射到0,影响整体方差,kaiming初始化解决这个问题。权值采样为(0,2/N)的高斯分布。
- 使用预训练模型的初始化参数
优化算法设计原理
优化算法采用的原理是梯度下降法,即最小化目标函数,最优化的求解过程,首先求解目标函数的梯度,然后将参数向负梯度方向更新,学习率表面梯度更新的步伐大小,最优化的过程依赖的算法称为优化器,深度学习优化器的两个核心是梯度与学习率,前者决定参数更新的方向,后者决定参数的更新程度。
Inception系列
v1——GoogLeNet: inception结构的主要贡献有两个:一是使用1 x 1的卷积来升降维;二是在多个尺度上同时进行卷积再聚合。
**v2和v3——BN-Inception:**v2在v1的基础上加入BN层,v3提出了四种inception模块,并引入辅助分类器,加速深度网络收敛,此外在网络中使用RMSProp优化器和标签平滑,并在辅助分类器中使用BN,进一步加速网络收敛。
主要核心思想:
- 用两个3x3的卷积代替5x5
- 用nx1 和 1xn卷积代替n x n卷积
- 两个3x3中的一个分解成1x3 和 3x1并行,用来平衡网络的宽度和深度
- 引入辅助分类器,加速深度网络收敛
- 避免使用瓶颈层
**v4:**研究了Inception模块与残差连接的结合。ResNet结构大大加深了网络深度,还极大的提升了训练速度,同时性能也有提升。v4主要利用残差连接来改进v3结构。
**Xception:**谷歌在2017年在v3的基础上提出的,主要有以下亮点:1. 作者从v3的假设出发,解耦通道相关性和空间相关性,进行简化网络,推导出深度可分离。2. 提出了一个新的xception 网络。 xception提出的深度可分离卷积和 mobilenet中是有差异的。(这里先1x1 pw,然后 3x3 dw, 效果差不多)
MobileNet系列
v1: 主要亮点有两个,第一个 采用depthwise convolution和 pointwise convolution 来大大减少计算量和参数量 , 第二个增加超参数α和β来控制网络模型。
v2:针对V1中出现的DW部分卷积核容易失效,即卷积核参数大部分为零的问题,google团队在 2018年提出v2,相比于v1,准确率更高,模型更小。主要有以下两个亮点:使用inverted residual(倒残差结构 1x1升维 —> dw ---->pw, dw在高维空间效果可能更佳),使用了linear bottleneck(解决:卷积核参数大部分为0,主要是由于relu造成的。低维特征图做relu6运算,很容易造成信息的丢失,就将inverted 中最后一个relu6换成 线性激活函数)。
**v3:**在v2网络的基础上,主要有四个亮点
- 使用NAS确定网络结构
- 在v2的block基础上引入squeeze and excitation 结构(在inverted bottleneck结构中加入SE模块)
- 使用h-swish 激活函数来加快网络收敛速度,作为一个轻量化网络swish虽然能够带来精度提升,但是swish中sigmoid不容易求导的特性会使网络在移动端设备上的推理速度收到一定损失,因此作者对其进行改进,提出h-swish激活函数
swish(x)=x⋅sigmoid(βx)swish(x)=x·sigmoid(\beta x) swish(x)=x⋅sigmoid(βx)
h−swish(x)=x⋅ReLU6(x+3)6h-swish(x)=x·\frac{ReLU6(x+3)}{6} h−swish(x)=x⋅6ReLU6(x+3)
- 重新设计耗时层结构:开始的32个卷积核换成16个,实验结果证明精度几乎不变。
ShuffleNet系列
**v1:**旷视于2017年提出轻量级网络,主要有两个亮点:1. 提出pointwise group convolution 来降低PW卷积的计算复杂度, 2. 提出channel shuffle来改善跨特征通道的信息流动。
group convolution 的缺点:由于组和组之间没有交互,导致组与组之间信息流动阻塞,模型表达能力的弱化。这也是shuffleNet提出 channel shuffle的原因。 channel shuffle实现:假定输入层分为g组, 总通道数为g*n, 首先将通道那个维度拆分为(g,n)两个维度,然后将这个两个维度转置变成(n,g),重新reshape成一个维度g x n,仅需要简单的维度操作和转置就可以实现均匀的shuffle。
第一步进行reshape:
第二步对得到的矩阵进行矩阵转置操作:
最后一步再进行reshape操作:
def shuffle_channels(x, groups):"""shuffle channels of a 4-D Tensor"""batch_size, channels, height, width = x.size()assert channels % groups == 0channels_per_group = channels // groups# split into groupsx = x.view(batch_size, groups, channels_per_group,height, width)# transpose 1, 2 axisx = x.transpose(1, 2).contiguous()# reshape into orignalx = x.view(batch_size, channels, height, width)return x
**v2:**同等复杂度下,比v1和mobilenet v2 更准确,主要有以下两个亮点:1. 提出四个高效网络设计指南 2. 针对v1的两种unit 做了升级。
- G1:卷积的输入输出具有相同channel的时候,内存消耗最小的。
- G2:过多的分组卷积操作会增大MAC,从而使模型速度变慢
- G3:模型内部分支操作会降低并行度(减少碎片化操作)
- G4:element-wise 不能被忽略。
相关文章:
深度学习算法面试常问问题(二)
X86和ARM架构在深度学习侧的区别? X86和ARM架构分别应用于PC端和低功耗嵌入式设备,X86指令集很复杂,一条很长的指令就可以完成很多功能;而ARM指令集很精简,需要几条精简的短指令完成很多功能。 影响模型推理速度的因…...
美国CPC认证是什么?儿童玩具亚马逊CPC认证审核有哪些问题?
很多卖家都有遭遇listing下架,被要求提供CPC认证报告。这是因为亚马逊有时会加强对儿童产品的审查。本文带大家对CPC认证进行一个全面了解。什么是CPC认证?CPC认证,全称ChildrensProductCertification.是认可实验室,根据产品不同适…...
恭喜! SelectDB 五位开发者成为 Apache Doris 新晋 PMC 成员和 Committer!
近期,通过 Apache Doris 项目管理委员会的推荐与投票,Apache Doris 社区正式迎来了 2 位新晋 PMC 成员 和 8 位新晋 Committer 的加入。值得关注的是,2 位新晋 PMC 成员均来自 SelectDB,分别是衣国垒(yiguolei…...
数据库面试题
第一范式(1NF) 第一范式是指数据库的每一列都是不可分割的基本数据项,而下面这样的就存在可分割的情况: 学生(姓名,电话号码) 电话号码实际上包括了家用座机电话和移动电话,因此它…...
[USACO2022-DEC-Bronze] T2 Feeding the Cows 题解
一、题目描述Farmer John has N (1≤N≤10^5) cows, the breed of each being either a Guernsey or a Holstein. They have lined up horizontally with the cows occupying positions labeled from 1…N.Farmer John 有 N(1≤N≤105)头奶牛,…...
Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)
Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)写在前面1、为什么用法线贴图?2、用什么存法线?3、法线向量为什么存在切线空间?法线贴图存得是什么?4、法线贴图为什么会偏蓝…...
【JavaWeb】传输层协议——UDP + TCP
目录 UDP协议 UDP协议结构 UDP的特点 TCP协议 TCP协议结构 TCP的特点 TCP的十个核心机制 确认应答 超时重传 连接管理 滑动窗口 流量控制 阻塞控制 延迟应答 捎带应答 粘包问题 异常处理 UDP协议 UDP协议结构 源端口:存储的是发送方的端口号。 目的…...
C++ 中是用来修饰:内置类型变量、自定义对象、成员函数、返回值、函数参数
const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。 一. const修饰 普通类型的变量 const int a 7; int b a; // 正确 …...
av 146 002
61. 一个新的敏捷项目经理正试图确定团队该如何执行一个发布计划的进度。哪种工具可以更深入地了解团队的进展? A. 发布计划系统 B. 产品路线图。 C. 看板。 D. 燃尽图 62. 你的项目发起人找到你,让你知道他正在考虑给你项目中的一位高级工程师颁发1000美元的现…...
小红书用户画像 | 小红书数据平台
小红书的用户画像是小红书品牌营销的必备技能,也是小红书推广种草的一个重要前提。通过对小红书用户画像进行分析,对品牌进行精准营销,实现更高的流量转化。 2022小红书粉丝人群画像 千瓜数据在2022年发布的千瓜活跃用户画像趋势报告中分析了…...
【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑
【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案) blog.csdn.net/weixin_534033…...
Linux内存分区(swap)
目录 1、使用物理分区创建内存交换分区 2、使用文件创建内存交换文件 当硬件的设备资源充足的话,那么swap是不会被我们的系统所使用到的,所以swap会被利用到的时刻通常就是物理内存不足的情况 我们知道CPU所读取的数据都来自于内存,那么当…...
第六章——抽样分布
文章目录1、统计量的定义2、常用的统计量3、经验分布函数4、正态总体常用统计量的分布4.1、卡方分布4.1.1、卡方分布的定义4.1.2、卡方分布的性质4.2、t分布4.2.1、t分布的定义4.2.2、t分布的性质4.3、F分布4.3.1、F分布的定义4.3.2、F分布的性质5、正态总体的样本均值与样本方…...
蓝桥云课-声网编程赛(声网编程竞赛7月专场)题解
比赛题目快速链接:https://www.lanqiao.cn/contests/lqENT02/challenges/ 让时钟转起来(考点:css:transform) // index.js function main() {// 题解前理解一个东西:// 时针每过一小时,转30 原…...
Java高手速成 | Java web 实训之投票系统
01、投票系统的案例需求 在本篇中,我们将制作一个投票系统,让学生给自己喜爱的老师投票。该系统由1个界面组成,系统运行,出现投票界面,如图所示: ▍显示效果 在这个界面中,标题为:“欢迎给教师投票”;在界面上有一个表格,显示了各位教师的编号、姓名、得票数;其中…...
排序的基本概念
按数据存储介质:内部排序和外部排序按比较器个数:串行排序和并行排序按主要操作:比较排序和基数排序插入排序:基本思想:每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象…...
面试笔试资料--Java
这里写自定义目录标题1.同步和异步有何异同?在什么情况下分别使用他们?举例说明1.同步和异步有何异同?在什么情况下分别使用他们?举例说明 1.1概念 Java中交互方式分为同步和异步两种: 同步交互:指发送…...
基于TC377的MACL-ADC General配置解读
目录标题一、MACL-ADC General1.Config Variant与AdcConfigSet2. AdcGeneral3.AdcPublishedInformation二、最终对应达芬奇生成内容一、MACL-ADC General 1.Config Variant与AdcConfigSet Config Variant :变体配置,默认选择VariantPostBuild就好了&…...
error: src refspec master does not match any.处理方案
问题描述 在使用git bash指令将项目上传到github时,总是遇到一些错误无法解决。 下面是我遇到的一个问题 error: src refspec master does not match any. error: failed to push some refs to XXXX.git 原因分析: 错误:SRC ReFSPEC主控器不…...
防火墙有关iptables的知识点
基本概念 什么是防火墙 在计算中,防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机…...
路肩石水渠机在施工公路项目中工艺特点的匹配
新建公路路肩项目在目前公路项目中的技术手段和实现方式,大多数依靠机械设备来机械来进行,还有一部分通过人工传统的预制作业和安装模式来进行,两种工艺特点的对比来说对于补充完善建设手段和效果实现有很重要的意义. 其中采用了机械设备进行一次成型制作的过程,按照设计需求匹…...
JS 动态爱心(HTML+CSS+JS)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
钉钉配置事件订阅(Python)
钉钉配置事件订阅 0.需求分析 需要实现钉钉企业通讯录同步至企业微信通讯录,这就需要用到钉钉的事件与回调 1.配置应用 登陆开放平台 https://open-dev.dingtalk.com/去企业内部开发里面,先创建个应用,后面都借用这个应用来调接口 创建完…...
Linux-Udev机制
一:Udev概述 udev 是一个用户空间的设备管理器,用于为事件设置处理程序。作为守护进程, udev 接收的事件主要由 linux 内核生成,这些事件是外部设备产生的物理事件。总之, udev 探测外设和热插拔,将设备控制权传递给内核,例如加载内核模块或设备固件。udev 是一个用户空…...
ERP是什么?中小商户有必要用吗?秦丝、金蝶、管家婆哪家强?
ERP系统刚开始传入中国的时候,基本上只有超大型或大型企业有条件实施,不过最近几年随着小微企业、中小商户的信息化需求不断增长,ERP软件已慢慢被普遍使用。但是仍然有不少中小商户,还没搞清楚ERP到底是什么,看到大家都…...
pytorch离线安装
windows下离线安装pytorch,很多内网机,无法连接外网,只能下载whl文件进行离线安装下载pytorch,地址https://download.pytorch.org/whl/torch_stable.html我是windows,Python37,没有gpu,所以选择…...
数据结构-算法的时间复杂度(1.1)
目录 1. 算法效率 2. 时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 举例说明: 写在最后: 1. 算法效率 我们该如何判断一个算法的好坏? 衡量一个算法的好坏,是从时间和空间两个维度比较的, 而今天…...
Cygwin安装与Mingw
共同点:window下编译环境 区别:cygwin(gnu windows)模拟Linux编译环境, mingw模拟window编译环境,生成.exe可执行文件 目录 Cygwin安装 一、官网下载 二、双击安装 三、选择安装路径后,到连接方式如图 四、添加连…...
教育舆情监测方案有哪些,TOOM讲解教育舆情的应对与处理?
教育舆情方案是针对教育领域的舆情事件或问题而制定的应对方案。其主要目的是通过有效的信息收集、分析、处理和传播,帮助教育机构或相关组织及时掌握和应对公众舆论的发展趋势,维护良好的舆情形象和声誉,教育舆情监测方案有哪些,…...
c语言操作文件
1、文件缓冲区 文件缓冲区的目的:提高访问效率 提高磁盘使用寿命 刷新就是将当前缓冲区数据全部提交。 不刷新时,程序在崩溃时缓冲区内容无法输出(有些情形会带来错误) 文件缓冲区的四种刷新方式 行刷新(遇到换行符…...
制造企业网站的建设目标/营销策略包括哪些方面
Linux上Nginx中开启SSL模块,配置Https访问方式一、Nginx简介二、主题业务背景三、Nginx实现Https方式前期准备SSL证书申请Nginx需要开启SSL模块四、Nginx中配置Https配置前介绍nginx.conf配置详情一、Nginx简介 1.Nginx是一款轻量级、高性能的web服务器/反向代理服…...
做教育培训网站/军事最新消息
1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 P.S. 这里真是体会到了一个好的命名的力量&…...
网页设计师培训排行榜/seo站长工具查询
作者 彭东林pengdonglin137163.com平台 Linux-4.10.17Qemu2.8 vexpress-a9概述 在系统开机probe驱动的时候,有些设备驱动加载可能需要比较长的时间,尤其是像i2c这样的设备,总线速率较低,如果在probe时读写大量的寄存器的话&#…...
永久免费自助建网站/百度快照网站
状态模式: 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。 模式分析: 在很多情况下,一个对象的行为取决于一…...
网站程序有哪些/百度站长工具seo综合查询
神经网络(一)神经网络模型理解1.1 模型1.2 神经网络模型(前馈)1.3 建立神经网络模型1.4 多元分类1.5 循环神经网络与对称连接网络(二)神经网络模型实现2.1 代价函数2.2 反向传播2.2.1 数学推导(…...
山东网站app制作/北京朝阳区优化
clickHouse的简单介绍,详细介绍请查看官网或者百度1)clickhouse非hadoop体系2)使用sql语句,对于熟悉关系数据的人员入门相对简单3)clickhouse最好用来读,不要用来变更,写用批量的方式4)各种日志数据我们可以用flume同步到clickhou…...