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])

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45556665/article/details/125939208