简述
虽然使用过pytorch来搭建GANs,但是对于Pytorch其实还是不是很熟,这里想系统的学习下。顺便再来做一下笔记。
学习网站
https://morvanzhou.github.io/tutorials/machine-learning/torch/3-01-regression/
大家直接看原文好了。这里我自己随便写写便于我自己记忆。
拟合过程
数据
torch.unsqueeze()
,会扩展这个维度。然后dim选择的方向是列的方向。这里,就是将[1,2,3]
变成了[[1], [2], [3]]
类似于这样的操作。torch.rand()
随机数,范围为(0,1)然后,输入的内容为tuple表示规模- 因为有结构的问题,所以,这里就直接使用了
.data
先获取数据之后,再用numpy()
来转成numpy中的数据类型。 - 画图的话是基础,这里就不讲了。
import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F # 激励函数都在这
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1)
y = x.pow(2) + 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1)
# 画图
plt.scatter(x.data.numpy(), y.data.numpy())
plt.show()
建立神经网络
这里会写一个类。就是神经网络类。
- 基类为
torch.nn.Module
在pytorch的官方文档中写道
Base class for all neural network modules.
所有神经网络的基类
Your models should also subclass this class.
你的模型也需要是这个类的子类
Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes:
Modules可以包括其他的模块,允许按照树形结构建造它。你也可以创立一个子模块,通过下面的方式。(其实文档下写的标准方法,跟下面的是一样的)
- 通过
super
函数实现父类的初始化 - 创建类变量,一个隐藏层的模型,一个输出层模型
- 丢进去的两个参数,其实就都是数。表示的是输入这个小模块的长度,再到输出这个小模块的长度。其实就说这个模型就是隐含着一个矩阵,做了一个矩阵乘法之后,就可以得到后面的东西了。
- 重载了前向传播的函数内容。
- 表示,前向传播的过程中,先经过隐藏层模型,再被relu的激活模型调用,之后,在通过输出层。这就是整个前向传播的流程了
class Net(torch.nn.Module): # 继承 torch 的 Module
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__