深度学习初识
通过案列:即咱们只传入一些基础的特征,让我们的模型自己去训练,不断的组合一些新的高级的特征,从而去判定最后的结果。这个结果需要我们定义好损失函数之后,不断的去更新里面的参数,使损失函数的值降到最低。当我们来一定新的特征的时候,很方便的去判断最后的结果。
-
深度学习介绍
深度学习是机器学习的一个子领域所有的深度学习算法都是深度神经网络
-
机器学习和深度学习的区别
2.1 区别1 :特征提取
深度学习,没有手工提取到有效特征的步骤2.2 区别2:数据量
深度学习需要大量的训练数据集,会有更高的效果 -
深度学习的应用场景
图像识别
自然语言处理技术没有办法手工提取到有效特征的场景,用深度学习一定是比机器学习效果好得多
-
常见的深度学习框架
TensorFlow 1. 2. keras
PyTorch -
神经网络的介绍
模仿生物神经网络的计算模型
基本单元:神经元
生物的神经元: 有输入,有计算,有输出
人工的神经元: 有输入,有计算,有输出
X W 向量乘法 输出一个数字(即咱们的神经元的输出往往是一个标量)
想要几个输出,搞几个神经元去给我输出
有几个神经元就有几个输出数据
5.1单一一个神经元计算模型的代表:感知机
sign(x1w1 + x2w2 + x3w3 + 1 * w0)
x1w1 + x2w2 + x3w3 + 1 * w0 > 0
x1w1 + x2w2 + x3w3 + 1 * w0 = 0
-
多层神经网络
输入层(Input layer)
输出层(Output layer)隐藏层(Hidden layer)
-
激活函数(多层神经网络有效性的保证)
Z = X * W
y = Z * W1
= X * W * W1
y = X * W
线性神经网络的局限性: 多层神经网络跟只有一层神经网络的效果没有区别
sigmoid(x) = 1 / (1 + e^(-x))
sign(x) = 1 (x > 0) -1 ( x<=0 )
f(x): 表示非线性变换
Z = f(X * W)
y = f(Z * W1)
= f(f(X * W) * W1 )
http://playground.tensorflow.org/
为什么要使用简单的激活函数(Relu):
-
Relu 方便求导
-
Sigmoid 在取值很大或者很小的时候,导数非常小,会导致参数的更新速度很慢
常见的激活函数有:
sigmoid 只会输出正数,以及靠近0的输出变化率最大
tanh和sigmoid不同的是,tanh输出可以是负数
relu在正的输出值的位置导数都是1,但是在负数输出值位置上导数都是0
激活函数的作用:
- 增加非线性分割能力
- 增加模型的稳健性(让模型能够拟合不同的数据)
- 缓解梯度消失
- 加速模型的收敛
满足函数为线性的条件:
- f(kx) = kf(x)
- f(x+v) = f(x) + f(v)
Pytorch
conda创建虚拟环境
conda create -n xxx python=3.6
conda activate xxx
which conda
张量Tensor(ndarray的另外一种叫法)
N阶张量:
重要属性: 形状 数据类型
- Pytorch中创建张量
从已有数据中创建张量
torch.tensor()
创建指定的张量
torch.ones([3,4])
torch.zeros([3,4])
torch.empty(3,4)
创建随机值的张量
torch.rand([3,4]) # [0, 1)
torch.randint(low=0,high=10,size=[3,4])
torch.randn([3,4]) # 标准正态分布
python
import torch
-
Pytorch中tensor的常用方法
tensor.shape
.size() # 查看第几个轴的长度可以把轴的位置丢进去取出tensor中唯一的元素,变成常数
tensor.item()
tensor.numpy() # 传换成ndarray
改变形状
tensor.view(new_shape) # ndarray.reshape()
转置
tensor.t() # 要求tensor必须是2维的
tensor.transpose(dim0, dim1)
获取阶数
tensor.dim() # ndarray.ndim
索引和切片
tensor和ndarray索引和切片都一样的
常见的统计指标
tensor.max()
查看tensor的数据类型
tensor.dtype
修改tensor的数据类型
tensor.type(new_dtype)
tensor.int() /.double()
-
CUDA中的tensor
device = tensor.device(‘cpu’/‘cuda:0’)torch.tensor([], device=‘cpu’/‘cuda:0’/device)
tensor.to(‘cpu’/‘cuda:0’/device)