之前笔者一直用tensorflow,最近PyTorch有些苗头,所以没事就大致了解一下,由于PyTorch的API较多,每个函数都去了解,时间上也不允许,所以这类框架最好的学习方式就是结合具体的例子逐步深入下去。

那么今天的这个例子来源于莫烦Python给出的一个用三层神经网络做函数拟合的例子,虽然例子很常见,但用pytorch实现才是关键,从这个例子中,能窥探到pytorch的思想和一些固定的使用套路。

问题描述:
用一个三层神经网络来拟合出如下二次函数y = x^2

训练数据生成:
为了防止过拟合,提高模型的泛化能力,在生成样本点时,给y添加一些较小的随机噪声,即样本点形式如下(x,x^2+r),r表示随机噪声。

import torch
import matplotlib.pyplot as plt
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)  
y = x.pow(2) + 0.2*torch.rand(x.size())                
plt.scatter(x.data.numpy(), y.data.numpy())
plt.show()

数据可视化:

搜狗截图20181218115425.png
搜狗截图20181218115425.png

在上面的一段代码中有一个需要了解的API,也即torch.unsqueeze,简单来说,其目的用于数据维度扩充,其调动形式如下:
torch.unsqueeze(a,N),表示给数据a在索引为N的位置扩充1个维度,如对于规模为(1,3)的数据a,调用torch.unsqueeze(a,1)以后维度则变成(1,1,3).具体的可以参考:https://blog.csdn.net/xiexu911/article/details/80820028