Press "Enter" to skip to content

NLP自然语言处理(一)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注