阅读单词记忆30min--->105
听背单词1h----=4单元
深度学习:莫烦python:
torch&numpy很像,不过后者一开始要import里面会多出一个as np。除此之外,其有关数学的符号也是一致的,不过就是前缀不一样。矩阵相乘:maymul(data,data)mm(tensor,tensor)。其中torch中的dot是将数字展平,依次相乘。
细节内容,如何模拟,细节变化有哪些:
BP算法:刚刚在看的时候可以查看了一下该算法,我了解到其又名正向传播和误差反向传播的算法。也就是说,先正向传播,若是输出的实际值与期望值不符合就将其差值进行反向传播,分配到每一层的每一个单元进行匹配,其会发送误差信号,进而利用梯度下降法进行校正权值和阈值,使误差减小到最低()直至梯度为0)
介绍Variable(from torch.autograd import Variable,这是一种库和类的区别),这是一种变量,其实我们网络中所定义的参数就是一个个变量,利用这个能够使参数根据BP算法等各种梯度算法实现数值的调整。
其实tensor就是torch的数值。variable=Variable(tensor,requires_grad=True),这个句子就是指将v中的tensor进行映射,放到另一个篮子里,然后形成一定的关系,此关系是一个单元和另一个单元的关系。一个计算节点。requires_grad如果是true,那么就意味着要将所反向传播得到的误差进行梯度处理反馈到这个变量上,进行校正。
tensor和variable中,后者如果true可以反向传播 .由于variable中的值都为tensor,所以如果想要转化成numpy不能直接转化,如variable.numpy错误,需要变为variable.data.numpy
为什么需要激励函数?:
解决不能用线性方程解决的问题。给出一个线性方程,然后利用AF()将线性方程掰弯,使其变成非线性的方程,其中AF()可以有多种形式。activation function AF()就是激励函数。如果是少层的神经网络——多种选择;如果是卷积神经网络——Relu;如果是循环神经网络——Relu/tanh (激励函数的全部代码可以从莫烦python网站中找到所写的全部代码)
(普通神经网络出来结果)线性----->非线性(满足复杂性),条件是AF()激励函数。
nn是指神经网络import torch.nn.functional as F,后面as是一种简洁命名。
torch.linspace是将区间内分成多少个线段进行绘图。x=Variable(x)指的是将x放在V这个大篮子里,但是matplotlib不能直接识别tensor的数据,所以需要转化成numpy的数据,用到x_np=x.data.numpy() x.data是将tensor存放到data里面
激励函数的激活值(softmax是激励函数,但不是用来作图的,是用来做统计的)。在深度学习这一块,画图不是关键,所以其程序完全可以直接复制就好。
import matplotlib.pyplot as plt
二、做神经网络——回归&分类
dim=1指的就是维度为1。 torch.unsqueeze就是将一维转化成二维,torch只能处理二维的数据x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)。神经网络只能识别variable,所以将x,y=Variable(x),Variable(y) 变成variable的形式。#plt.scatter(x.data.numpy(),y.data.numpy())前面那个是生成散点图,但由于画图只能识别numpy的数据,所以将torch的数据转化成numpy的数据。plt.show()打印图#
class主要是用来定义的,此处定义了一个网络Net。括号里面就是主要的模块,可以直接调用Module里面的框架
1.calss Net(torch.nn.Module):
2. def _init_(self,n_feature,n_hidden,n_output): #_init_主要是存放我们需要的一些信息
3. super(Net,self)._init_() #1~3是官方操作;此句也就是将net调用再返回自身使用_init_#
4. self.hidden=torch.nn.Linear(n_feature,n_hidden) #每一层对应一种属性,此处n_xxxx指的是xxxx的数目#并且init中并没有搭建这些网络,不过是进行了一些参数的定义。
5. self.predict=torch.nn.Linear(n_hidden,n_output) #此处定义的是输出层
6. def forward(self,x): #是一个过程,调用前面init中提到的信息进行向前传播。 真正对于网络的搭建是在此处#此处x指的是输入个数/输入的量
7. x=F.relu(self.hidden(x)) #从里向外看,指的是将x输入到隐藏层,输出了n个神经节,将输出的n个神经节进行激活/使用激活函数.
8. x=self.predict(x) #此处的x是7中的x(隐藏层出来的),然后输入到输出层,进行输出.此处不用AF()的原因是因为 会将输出值进行截断一部分,使输出结果不全面,一般不用。
9. return x
上文1~9就是一个简易的网络被搭成。
优化神经网络optimizer
1.optimizer=torch.optim.SGD(net.parameters(),lr=0.5) #optim中有很多优化函数,此处选用了一个叫做SGD的。由于是优化嘛,所以我们此处要将神经网络的参数(net.parameters())放入,lr指的是学习效率,其值不能太高也不能太低,一般就小于1.
2.loss_func=torch.nn.MSELoss() #loss_func指的就是误差的计算,MSELoss指的是均方差计算,用来处理回归问题足够了。
3.for t in range(100): #训练的步数