? 阿里云社区专家博主,大厂算法开发工程师。 ? 从事视觉算法开发和模型压缩部署工作。 ? 欢迎关注我的公众号-嵌入式视觉。
梯度是微积分中的基本概念,也是机器学习解优化问题经常使用的数学工具(梯度下降算法)。因此,有必要从头理解梯度的来源和意义。本文从导数开始讲起,讲述了导数、偏导数、方向导数和梯度的定义、意义和数学公式,有助于初学者后续更深入理解随机梯度下降算法的公式。
大多数深度学习算法都会涉及某种形式的优化,所谓优化指的是改变 x 以最小化或最大化某个函数 f(x) 的任务,我们通常以最小化 f(x) 指代大多数最优化问题。损失函数大致可分为两种:回归损失(针对连续型变量)和分类损失(针对离散型变量)。常用的减少损失函数的优化算法是“梯度下降法”(Gradient Descent)。
本文分析了激活函数对于神经网络的必要性,同时讲解了几种常见的激活函数的原理,并给出相关公式、代码和示例图。从机器学习的角度来看,神经网络其实就是一个非线性模型,其基本组成单元为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得多层神经网络成为一种高度非线性的模型。神经元之间的连接权重就是需要学习的参数,其可以在机器学习的框架下通过梯度下降方法来进行学习。
在工业界,数据预处理步骤对模型精度的提高的发挥着重要作用。对于机器学习任务来说,广泛的数据预处理一般有四个阶段(视觉任务一般只需 Data Transformation): 数据清洗(Data Cleaning)、数据整合(Data Integration)、数据转换(Data Transformation)和数据缩减(Data Reduction)。
所谓超参数,即不是通过学习算法本身学习出来的,需要作者手动调整(可优化参数)的参数(理论上我们也可以设计一个嵌套的学习过程,一个学习算法为另一个学习算法学出最优超参数),卷积神经网络中常见的超参数有: 优化器学习率、训练 Epochs 数、批次大小 batch_size 、输入图像尺寸大小。
数据层面的处理方法总的来说分为数据扩充和数据采样法,数据扩充会直接改变数据样本的数量和丰富度,采样法的本质是使得输入到模型的训练集样本趋向于平衡,即各类样本的数目趋向于一致。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、能更高效地利用服务器。
先描述下一般处理器的概念,维基百科的定义是 “In computing, a processor is an electronic circuit which performs operations on some external data source, usually memory or some other data stream”。最为常见的处理器有 CPU(可以运行任何程序)、GPU(图形图像处理)和 DSP(处理数字信号),还有专门用来做 DNN 应用神经网络处理器。
在 Linux中,环境变量是一个很重要的概念。环境变量可以由系统、用户、Shell 以及其他程序来设定。变量就是一个可以被赋值的字符串,赋值范围包括数字、文本、文件名、设备以及其他类型的数据。
一个基本概念:任何装置在 Linux 下都是文件,数据沟通的接口也有专属的文件在负责,Linux 的文件种类繁多,常用的是一般文件(-)与目录文件(d)。 注意:Linux 文件类型和文件的文件名所代表的意义是两个不同的概念,在 linux 中文件类型与文件扩展名没有关系。它不像 Windows 那样是依靠文件后缀名来区分文件类型的,在 linux 中文件名只是为了方便操作而的取得名字。Linux 文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等。
计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信。编译器基于编程语言的规则、目标机器的指令集和操作系统遵循的惯例,经过一系列阶段生成机器代码。
在 IEEE 754 标准中浮点数由三部分组成:符号位(sign bit),有偏指数(biased exponent),小数(fraction)。浮点数分为两种,单精度浮点数(single precision)和双精度浮点数(double precision),它们两个所占的位数不同。 • 在单精度浮点格式(C 语言的 float)中,符号位,8 位指数,23 位有效数。 • 在双精度浮点格式(C 语言的 double)中,符号位,11 位指数,52 位有效数。
计算机系统是由硬件和系统软件组成,它们共同工作来运行应用程序。C 语言是系统级编程的首选,同时它也非常实用于应用级程序的编写。
在 C++11 之前,C++ 编程只能使用 C-style 日期时间库,其精度只有秒级别,这对于有高精度要求的程序来说,是不够的。但这个问题在C++11 中得到了解决,C++11 中不仅扩展了对于精度的要求,也为不同系统的时间要求提供了支持。另一方面,对于只能使用 C-style 日期时间库的程序来说,C++17 中也增加了 timespec 将精度提升到了纳秒级别。
归并排序和快速排序是两种稍微复杂的排序算法,它们用的都是分治的思想,代码都通过递归来实现,过程非常相似。理解归并排序的重点是理解递推公式和 merge() 合并函数。
递归是一种非常高效、简洁的编码技巧。只要是满足“三个条件”的问题就可以通过递归代码来解决。编写递归代码的关键就是不要把自己绕进去,正确姿势是写出递推公式,找出终止条件,然后再翻译成递归代码。
广度优先搜索,通俗的理解就是,地毯式层层推进,从起始顶点开始,依次往外遍历。广度优先搜索需要借助队列来实现,遍历得到的路径就是起始顶点到终止顶点的最短路径。深度优先搜索用的是回溯思想,非常适合用递归。
二分查找(Binary Search)算法是一种针对有序且不含重复数据集合的查找算法,时间复杂度为 O(logn)O(logn) ,二分查找虽然性能比较优秀,但应用场景也比较有限。
工业智慧视觉应用主要涉及四个场景:识别、测量、定位、检测。`HALCON` 是德国 MVtec 公司开发的一款综合性的机器视觉标准软件,拥有全球通用的集成开发环境(HDevelop)。
图和树一样都是非线性表数据结构,但是更复杂。树中的元素我们称为节点,图中的元素我们叫作顶点(vertex)。图中的一个顶点可以与任意其他顶点建立连接关系,这种连接关系叫作边(edge)。有方向的图叫做“有向图”。以此类推,我们把边没有方向的图就叫做“无向图”。
常见数据结构-红黑树(上)基础
常见数据结构-二叉树(下)二叉查找树
常见数据结构-二叉树(上)二叉树遍历
常见数据结构-哈希算法
常见数据结构-散列表(下)散列表和链表的组合
常见数据结构-散列表(中)实战
常见数据结构-散列表(上)理论
常见数据结构-跳表
常见数据结构-队列先进先出
常见数据结构-栈先进后出
常见数据结构-链表
常见数据结构-数组
Linux 基础-查看进程命令 ps 和 top
Linux 基础-查看 cpu、内存和环境等信息
Linux 基础-文本处理命令
Linux 基础-文件权限与属性
Linux 基础-新手必备命令
Linux 基础-学会使用命令帮助
C++ 编程基础总结
Python3 编程面试题总结
算法图解笔记
经典机器学习算法总结
西瓜书学习笔记
西瓜书学习笔记
机器学习基础
CNN 基本部件-常用激活函数
使用 CNN 进行图像分类总结
Backbone 网络-ResNet v2 详解
Backbone 网络-DenseNet 详解
Pytorch 基础-tensor 数据结构