前置知识
数据生成
我们先生成最简单的二次函数。
import torch
x = torch.unsqueeze(torch.linspace(-5, 5, 100000), dim=1)
y = x.pow(2)+2*torch.rand(x.size())
test_x = torch.unsqueeze(torch.linspace(-5, 5, 1000), dim=1)
test_y = test_x.pow(2)+2*torch.rand(test_x.size())
torch.linspace
:等差数列插值。在示例中,就是在-5~5之间均匀地插入100000torch.unsqueeze
:维度扩充。我们生成的数据是1维的,我们需要在生成一位才能满足需要。torch.rand
: [ 0 , 1 ) [0,1) [0,1)随机数均匀生成。我们给数据增加一定的混乱度。如果想要生成正态分布可以使用torch.randn
如果想要看到生成的函数图像可以借助matplotlib
参考代码如下
import matplotlib.pyplot as plt
import numpy as np
plt.scatter(test_x.data.numpy(),test_y.data.numpy(),s=2 * np.ones(test_x.size()))
plt.show()
批训练数据打包
import torch.utils.data as data
BATCH_SIZE = 100
train_dataset = data.TensorDataset(x, y)
train_loader = data.dataloader.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=1,
)
DataLoader参数解释
dataset
:数据集,不解释。batch_size
:每批的数据大小shuffle
:是否打乱数据集num_workers
:使用多进程加载的进程数,0代表不使用多进程。记得如果要多进程要放在main
里面不然会报错的。
建立神经网络
正常的方法
(为什么叫正常的方法因为下面有快速的方法
import torch.nn