"本教程主要介绍如何使用PyTorch构建一个简单的线性神经网络来拟合正弦函数。通过随机生成的数据集进行训练,并在测试集上评估模型的性能。"
在这个例子中,我们首先看到代码导入了必要的库,包括`os`、`torch.utils.data`、`torch.nn`、`numpy`、`matplotlib.pyplot`等。`os.environ`设置了一个环境变量,允许在某些情况下重复加载库。接着,使用`np.random.seed()`确保每次运行时生成的随机数据是一致的,这对于实验的可重复性至关重要。
接下来,定义了一些超参数,如`NUMBER_TRAIN_DATA`(训练数据的数量)、`NUMBER_TEST_DATA`(测试数据的数量,是训练数据的五分之一)、`BATCH_SIZE`(批量大小)、`LEARNING_RATE`(学习率)以及`EPOCHS`(训练轮数)。`DEVICE`变量用于选择GPU(如果可用)或CPU进行计算。
`get_dataset`函数用于生成随机数据,`data_x`是介于-2π到2π的随机值,`data_y`是对应于`data_x`的正弦值。这样生成的数据模拟了我们要拟合的正弦函数。`train_x`和`train_y`用于训练,`test_x`和`test_y`用于验证模型的泛化能力。
`TensorDataset`和`DataLoader`用于创建PyTorch数据加载器,这使得我们可以按批次处理数据,这对于训练神经网络非常有用。训练和测试数据加载器都设置为批量大小为10,并且训练数据加载器在每个epoch中会随机打乱数据。
定义的网络类`Net`是一个简单的线性神经网络,包含一个输入层、一个隐藏层和一个输出层。使用`nn.Linear`定义了这些层,激活函数为ReLU。`MSELoss`用于损失函数,因为它适用于回归问题,而我们的任务就是预测连续的正弦函数值。`Adam`优化器被选择,它是一种常用的优化算法,具有良好的收敛性和适应性。
训练过程通过`for`循环实现,每个epoch内遍历训练数据加载器。在每个batch上,先执行前向传播计算损失,然后使用反向传播更新权重。训练过程中,还记录了训练损失,并在训练结束时绘制了模型预测与实际值的对比图,以直观地查看模型的拟合效果。
这个例子展示了如何使用PyTorch的基本组件来构建和训练一个简单的神经网络,以及如何对非线性函数进行拟合。尽管这个网络结构简单,但它演示了深度学习的基础流程,对于初学者来说是一个很好的起点。