这波全新的学习遭老罪了,几乎啥都看不明白,一个一个查,感觉注释有代码两倍长。
一、回归
import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
#-----建立数据集-----
# torch.manual_seed(1) # reproducible可再生的
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1)
#numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
#unsqueeze用来增加张量,torch中只能处理二维信息,在指定位置 dim 插入一个大小为1的维度
y = x.pow(2) + 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1)
#这一行的意思是把y和x相关,添加噪点
# torch can only train on Variable, so convert them to Variable
# The code below is deprecated in Pytorch 0.4. Now, autograd directly supports tensors
# x, y = Variable(x), Variable(y)
# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()
#-----建立神经网络-----
class Net(torch.nn.Module): #继承torch的组件
#class(类)是面向对象编程的基本概念,是一种自定义数据结构类型 命名为Net
#init搭建这个信息层所需要的信息
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__() # 继承 __init__ 功能
#首先找到Net的父类(比如是类nn.Module),然后把类Net的对象self转换为类nn.Module的对象,然后“被转换”的类nn.Module对象调用自己的init函数
self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隐藏层线性输出
self.predict = torch.nn.Linear(n_hidden, n_output) # 输出层线性输出
#nn.Lin