硕士三年,本为CV研究方向专业调参侠,上取发表SCI之荣誉,下得一等奖助学金,本光明前途逐渐显现,却因我大天腐♂之国AI行业变态内卷加之自身无心读博,研三临时转向GIS开发妄图求取工作得以苟活,现重拾CV之心再起,写得如下笔记,回报当年之初心,开拓未来之事业,如有错误,敬请指正。(工作繁忙,更新不定时,敬请理解)
1. 极为常用的概念(大白话解释)
- 线性回归:距离地铁站的远近一般会影响房子的租金,距离远近和租金之间的关系就是一个线性相关的关系,这两个数据的之间的换算公式就是线性回归方程,最简单的线性方程就是一元一次方程 y = ax + b
- 逻辑回归:用来判断是否的公式,比如根据薪资水平、工作环境、离家远近、晋升通道等因素来判断是不是一个好工作就是一个逻辑回归的问题。
- 损失函数:判断一个公式拟合程度的公式,最后一般会算出来一个数值叫损失值loss,越大表示拟合得越不好。线性回归方程一般用方差作为损失函数。
- 优化函数:计算机用来减少损失值loss的函数,一般是梯度下降算法,如adam、SGD、RMSprop等
- 学习速率lr与衰减值decay:学习率是梯度下降算法(啥是梯度下降算法见上面的优化函数)的变化速率,就是算法的权重值之一;一般学习速率会根据训练的深入而慢慢变慢,衰减值就是学习率变慢的下降率。
- 反向传播算法:用来传递loss数据的算法。深度学习有非常多的层数,反向传播可以将最终的loss损失值一层一层往回反馈,直到最开始的层,这就让所有的参数因子都可以获取loss程度,然后用优化函数改变其权重数值,从而减少loss。
- 激活函数:一个模型有多个层次(进行多次回归计算)的时候会有多余或者非常重要的自变量,但人事先是不知道的,激活函数就是在计算的过程中对这些自变量的权重进行非线性变化,以快速强化或者弱化某个因素,以优化模型的拟合(有点遗传算法里面突变的思想,但是两者的数学实现方法是不一样的),常用的有relu、tanh、sigmoid(经典但最近不用了)等。激活函数在每一步矩阵操作之后,非线性变换后再向前传递数值。
- 交叉熵函数:逻辑回归情况下常用的损失函数。逻辑回归是一种评级的制度,如满分10分最后得分为9分就判断待评价物是比较好的东西,但是方差作为损失函数时候最后的损失值会很大,并不适合逻辑回归做是/否判断,所以出现了交叉熵函数,它会把最后损失值局限到[0,1]之间,这样就方便作为评价指标。
- softmax多分类函数:交叉熵函数的加强版,交叉熵只能进行是或否两种类型的判断,如果是3种及以上结果的情况就不行了,所以出现了softmax多分类判断,如根据双方球员的数据判断一场足球赛是客方胜、主方胜、还是平局,softmax会对3种可能都计算出一个概率:客方胜率0.65、主方胜率0.3,平局概率0.05,所有情况概率值加起来肯定等于1
- 归一化:遥感方向主要都是输入图片为主,输入的时候都要记得除以255来归一化 (为什么要归一化是统计学的知识,简要来说就是数据标准化,此处不展开讲)
- 顺序标签与one-hot编码:假设有一个模型可以对鞋子、包包、衣服的图片进行识别,我们输入一张图片如果输出的结果是[2,0,1],则表明模型认为该图片为衣服概率最大,鞋子概率其次、包包概率最小,这种输出[2,0,1]的形式就表明标签是按照顺序表达;但是如果输出的结果是[0.1, 0.3 , 0.6]则表示模型认为是鞋子的概率是0.1 包包概率是0.3 衣服概率是0.5, 这种表达方式就表明事先对标签进行过one-hot编码,以让输出结果更符合人们常规的概率表达方式。( 注意顺序标签的使用sparse_categorical_crossentropy作为损失函数,one-hot标签使用categorical_crossentropy)
- 超参数:需要自己调参而非算法自动优化的参数,如学习率,神经元个数、层数等(做AI工作大部分就 是和超参数打交道,当一个调参侠)
- 过拟合:过拟合的典型特征为:训练数据集精度高,但测试数据集精度低,如果出现了这种现象就是过拟合。模型训练时候精度好、loss低但是拿现实中去测精度低很可能就是出现了过拟合。
- 过拟合的优化方法:
① dropout:训练时候随机跳过某些参数参与训练,来防止过拟合。(有点随机森林的意思,因为每次都是随机放弃了某些参数,所以就可以当作把多个相似的模型拿来训练,最后融合起来成了一个适中的模型);
② 正则化:给损失函数增加一个调节的参数,起到微调摆正的作用,俗称自动矫正。
③ 图像增强:增加训练数据,这是防止过拟合的最好!最好!最好的!办法。
- 全连接层:上一层的每一个数据都和本层的权重值进行了矩阵计算,即全部节点都有连起来相互计算。
2. Tensorflow2学习顺序
本顺序偏向CV方向的实际项目生产
【基础操作】
data数据输入
卷积神经网络
keras二次封装API
eager动态图
tensorboard可视化面板
迁移学习
多输出模型
模型的保存与恢复
【实操】
目标识别
自动图运算
语义分割
实例分割
全景分割
【项目部署】
本地设备部署深度学习功能
服务器部署深度学习功能
通过API访问服务器的深度学习功能
3. 实战之前的各种基础
3.1 tensorflow的最基础API操作
下面都是后面常用的一些功能代码,要熟记,就像英文里面的 this, that, is, the一样常用 ( 用 // 双斜杠来表示注释,忘了python使用 # 来注释的 ,也懒得改了。。。)
/** 矩阵乘数值 */
x = [[1.,1.],[1.,1.]] // 1后面打个点说明是浮点数float32,不打点后面算出来b的dtype就是int32
y = tf.multiply(x,2)
print(y) // 打印出来为:tf.Tensor([[2. 2.][2. 2.]], shape=(2, 2), dtype=float64)
/** 矩阵相乘 */
a = [[1.]]
b = tensorflow.matmul(a,a)
print(b) // 打印出来为: tf.Tens