- 示例代码
- https://www.cnblogs.com/fclbky/p/9646780.html
- 训练好的模型如何处理
- https://blog.csdn.net/loveliuzz/article/details/81661875
- 安装tensorflow 1.14 版本
- miniconda
https://repo.anaconda.com/miniconda/
4.7.12 版本 python3.7 - https://www.jianshu.com/p/2366bc389a59
- CUDA 10.0 版本 + cudnn 7.4.2
- https://developer.nvidia.com/rdp/cudnn-archive
- miniconda
- 检查 GPU 是否可用
- https://blog.csdn.net/u013538542/article/details/83830249
- 使用 google 免费训练
- https://colab.research.google.com/
- tensorflow 简单入门
- http://c.biancheng.net/view/1882.html
- 获取验证码
- https://app.huawei.com/escpportal/servlet/identifying
- 常用训练数据来源网站
- http://yann.lecun.com/exdb/mnist/
什么是机器学习(神经网络)
- 机器学习我的理解是有几个步骤组成
- 选择合适的模型
- 选择合适的优化算法,即每次进行调整的依据
- 选择合适的数据,这一项在机器学习中很重要
- 以上三项整合在一起,进行训练
- 保存模型中的参数(权重和偏差值)
- 输入一个未知的数据到训练好的模型中,得到结果
- 模型和算法理解和学习需要很多基础,学习的关键在于理解和想象
- 数据需要有大数据存储,像是 hadoop 和 spark
2. 优化算法
- 用于比较好坏的 loss 函数
- 用于调整参数的优化函数
- 用于计算准确率的 accuracy 函数
卷积
- 卷积就是过滤 图片中的杂质
- 用矩阵相乘的方式过滤图片
池化
- 使用图片压缩的方式,缩小图片像素同时又能保留特征,也就是池化 (Pooling)
数学基础
- 微积分
- 导数
- 牛顿-莱布尼茨公式
- 梯度
- 梯度下降
- 牛顿法
- 最小二乘法
- 线性代数(描述几何的工具)
- 线性映射
- 线性变换
- 向量
- 矩阵
- 张量 n 维矩阵
- 概率论
- 正态分布
梯度及梯度下降
- 梯度下降用于Loss 函数
- 梯度是一个向量(1,2,3)
- 设 f ( x , y ) = 2 x + 2 y f(x,y)=2x+2y f(x,y)=2x+2y
- 分别求 f ( x , y ) 对 于 x 和 y 的 偏 导 数 f(x,y) 对于 x 和 y 的偏导数 f(x,y)对于x和y的偏导数
- g r a d f ( x , y ) = ( ∂ f ∂ x , ∂ f ∂ y ) = ( 2 , 2 ) gradf(x,y) = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}) = (2,2) gradf(x,y)=(∂x∂f,∂y∂f)=(2,2)
- 梯度表示该函数 f ( x , y ) f(x,y) f(x,y) 在 (2,2) 的方向上增长最多(变化率最大)
- 梯度下降就是梯度的反方向,也就是(-2,-2)最快地减少
- 从这个结论出发, g r a d f ( x 0 , x 1 , x 2 , x 3 , x 4 , x 5 , . . . x n ) = ( ∂ f ∂ x 0 , ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . ∂ f ∂ x n ) gradf(x0,x1,x2,x3,x4,x5,...xn) = (\frac{\partial f}{\partial x0}, \frac{\partial f}{\partial x1},\frac{\partial f}{\partial x2},...\frac{\partial f}{\partial xn}) gradf(x0,x1,x2,x3,x4,x5,...xn)=(∂x0∂f,∂x1∂f,∂x2∂f,...∂xn∂f)
随机梯度下降
- 一般的梯度下降使用全部样本作为数据集,计算梯度,但往往数据集过大,每次训练时间过长,影响效率,而且有可能导致数据过拟合化
- 一个合理的解决方案是每次从总的数据集中随机抽取出小部分数据来代表整体,基于这部分数据计算梯度和损失来更新参数,这种方法被称作随机梯度下降法(Stochastic Gradient Descent,SGD)
一个完整的神经网络是如何工作的(监督学习)
使用预测房价(回归问题)作为例子,大致介绍工作是如何进行的
- 首先要对该问题有一个大致的描述和确立目标
- 房价的影响因素,有面积,装修,地理位置,房屋朝向等等
- 目标是对一个房子找到一个近似的房价
- 以上两步是为了确立 输入和输出
- 即给出描述房子的各个条件,该程序预测出该房子的房价
- 收集房价的历史数据
- 建立模型,这里可以理解为影响因子,即哪种条件的因素比较重要,比如房子的地理位置确定每平方米的单价最为重要,那么房价更加容易受到地理位置的影响
房 价 = x ⋅ 地 理 位 置 + y ⋅ 房 屋 朝 向 + z ⋅ 装 修 房价 = x \cdot 地理位置 + y \cdot 房屋朝向 + z \cdot 装修 房价=x⋅地理位置+y⋅房屋朝向+z⋅装修 - 这里的 x, y, z就相当于神经网络中的权重,通过调整这些权重,让神经网络预测的房价与历史成交的房价接近,这里的比较神经网络预测的房价与历史成交的房价,就是 Loss 函数,也就是体现神经网络的可靠度的一个方法
- 通过Loss函数能够得到神经网络的好坏,再通过一些方法,去调整这个x,y,z(权重),这里的方法就是优化函数,让 Loss 函数不断减小,也就是让神经网络预测的房价与历史成交的房价越来越接近
- 通过不断地进行判断(Loss函数),调整(优化函数),最后得到的x,y,z 就是神经网络的模型
多层感知机 (MLP),激励(激活)函数
- 一个复杂函数可以由其他的简单函数拟合而成,在高等数学中的,幂级数展开式(如,泰勒展开式,马克劳林级数,傅里叶级数等)
- 多层感知机的原理就是,使用多个简单(输入条件)的函数拟合(逼近)一个复杂的函数(现实中的问题)
- 通过调整每个简单函数的权重,表达对现实世界问题的解决方案
- 多层感知机是初始版本的神经网络,加上激活函数后,就变成了神经网络,通过对函数的转换,能够使得函数变得更加复杂,多变