本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
NLP自然语言处理
一、相关概念
1.深度学习的概念
a.机器学习的分支,以神经网络为基础,对数据的特征进行学习。
2.与机器学习的区别
a.深度学习不需要手动的进行特征工程
b.深度学习需要的数量多,需要的计算性能强
3.神经网络
模仿生物的神经系统实现的模型,能够对数据的特征进行学习
4.神经元
a.神经网络中的最小的单元。不同的神经元组合能够得到神经网络
b.结构: t = f(Wx+b)
c.内积:点积,向量的乘法(对应位置相乘相加),得到一个标量。
单层的神经网络:不常见
两层的神经网络: 常见 —感知机
a. 感知机 :两层神经网络。输入层有多个神经元,输出层一个神经元。
b.感知机的 作用 :进行一个二分类
多层神经网络:
a.每一层的神经元之间没有连接
b.全连接层:当N层的每一个神经元和前一层的每一个神经元都有链接的时候,第N层就是全连接层。就是在进行矩阵乘法,进行特征的变换,就在进行y=wX+b
5.激活函数
把原来的数据进行变换
a.为什幺要使用非线性的激活函数
i.线性的激活函数或者是不是用激活函数,多层神经网络和两层神经网络没有
区别
ii.是用非线性的激活函数能够增加模型的非线性分割能力
b.为什幺要使用简单的激活函数(RELU)
i. RELU方便求导
ii. sigmoid在取值很大或很小、很慢
c. 激活函数的作用 :
i.增加非线性分割能力
ii.增加模型的稳健性(让模型能够拟合不同的数据)
iii.缓解梯度消失
iv.加速模型收敛
6.常见的激活函数
i. sigmoid:(0,1)
ii.tanh:(-1,1)
iii.relu:max(0,x)
iv.ELU:a(e^x-1)
二、Pytorch
与tansorflows是一对,都是深度学习平台
(一)基本元素操作
Tensor(张量),相当于NumPy 的 ndarray数据结构 ,区别在于可以在 GPU 上使用来加速计算。
from __future__ import print_function import torch
1.创建矩阵操作(没有初始化)
x = torch.empty(5, 3) print(x) # 结果 tensor([[1.8646e+25, 8.1836e-43, 1.8646e+25], [8.1836e-43, 1.8646e+25, 8.1836e-43], [1.8646e+25, 8.1836e-43, 1.8646e+25], [8.1836e-43, 1.8646e+25, 8.1836e-43], [1.8646e+25, 8.1836e-43, 1.8646e+25]])
2.创建矩阵操作(有初始化)
x = torch.rand(5, 3) # 以标准高斯分布的方式赋值,均值为0 方差为1 print(x) # 结果 tensor([[0.5848, 0.8537, 0.0152], [0.2734, 0.4674, 0.6391], [0.4461, 0.0762, 0.8183], [0.1897, 0.1674, 0.9594], [0.7556, 0.0022, 0.1531]])
对比有无初始化矩阵:当声明一个未初始化的矩阵时,它本身不包括任何确切的值,当创建一个未初始化的矩阵时,分配给矩阵的内存中有什幺数据就赋值给了这个矩阵,本质上是毫无意义的脏数据。
3.创建全0矩阵,并指定数据元素类型为long操作
x = torch.zeros(5, 3, dtype=torch.long) print(x) # 结果 tensor([[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]])
4.直接通过数据创建张量
x = torch.tensor([2.5, 3.5]) print(x) # 结果 tensor([2.5000, 3.5000])
5.通过现有的一个张量创建尺寸相同的新张量
# 利用new_ones方法得到新张量 x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes print(x) # 利用randn_like方法得到尺寸相同x的新张量,并采用随机初始化对其赋值 x = torch.randn_like(x, dtype=torch.float) # 重载 dtype! print(x) # 结果size一致
6.求张量尺寸
print(x.size()) # 结果 torch.Size(5,3)
torch.Size函数本质上返回的是一个tuple,因此支持一切元组的操作
(二)基本运算操作
1.加法
# 方式(1) y = torch.rand(5, 3) print(x + y) # 方式(2) print(torch.add(x, y)) # 方式(3) result = torch.empty(5, 3) torch.add(x, y, out=result) print(result) # 方式(4) in_place原地置换 # adds x to y y.add_(x) print(y)
任何一个就地改变张量的操作后面都固定一个 _ 。例如 x.copy_(y), x.t_()将更改x
2.类似于Numpy的方式对张量进行操作
print(x[:, 1])
Be First to Comment