前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最简单的神经网络实战

最简单的神经网络实战

作者头像
福贵
发布2021-03-09 18:24:27
6740
发布2021-03-09 18:24:27
举报
文章被收录于专栏:合集

最简单的神经网络

准备训练数据

随机生成50个数据,用作训练数据

代码语言:javascript
复制
x = np.linspace(1, 100)

最简单的神经网络拟合,y=ax+b,所有设置y为

代码语言:javascript
复制
y = 2 * x + 3

不过,为了符合实际情况,可用适当增加一些噪声。

代码语言:javascript
复制
noise = torch.randn(50)y = 2 * x + 3+noise.numpy()

绘制x,y的图象如下

构建神经网络

torch里面可以基于nn.Module类写自己的神经网络,这里使用最简单的线性层。

代码语言:javascript
复制
class nn(nn.Module):    def __init__(self, in_features=1, mid_features=5, out_features=1):        super(nn, self).__init__()        self.layer1 = nn.Linear(in_features, mid_features)        self.layer2 = nn.Linear(mid_features, out_features)        self.layer = nn.Linear(mid_features, mid_features)    def forward(self, x):        x = self.layer2(x)        for i in range(1):            x = self.layer(x)        x = self.layer2(x)        return x

之后则是设置损失函数,优化器,依旧选择最简单的。

代码语言:javascript
复制
criterion = nn.L1Loss()optimizer = optim.RMSprop(model.parameters())

其中L1形式的损失函数就在lasso loss,$loss=(y-X\theta)+C|\theta|$。RMSProp算法的全称叫 Root Mean Square Prop。考虑到训练时1-100,那么预测则选取50-150。迭代计算,结果如下:

全部代码

代码语言:javascript
复制
x = np.linspace(1, 100)noise = torch.randn(50)y = 2 * x + 3+noise.numpy()plt.plot(x, y)plt.show()dataset = []for i, j in zip(x, y):    dataset.append([i, j])epochs = 10model = Nn(1, 1)criterion = nn.L1Loss()optimizer = optim.RMSprop(model.parameters())dataset = torch.tensor(dataset, dtype=torch.float, requires_grad=True)for times in range(epochs):    for i, data in enumerate(dataset, 0):        x, label = data        optimizer.zero_grad()        out = model(x.unsqueeze(dim=0))        loss = criterion(out, label.unsqueeze(dim=0))        print("loss:", loss.data.item())        loss.backward()        optimizer.step()x = np.linspace(50, 150)y = 2 * x + 3dataset = []for i, j in zip(x, y):    dataset.append([i, j])dataset = torch.tensor(dataset, dtype=torch.float, requires_grad=True)pred_y = []pred_x = xfor i, data in enumerate(dataset, 0):    x, label = data    optimizer.zero_grad()    out = model(x.unsqueeze(dim=0))    pred_y.append(out)plt.plot(pred_x, pred_y)print(pred_x, pred_y)plt.show()

有时间给出最简单神经网络的解析

tex无法解析的问题下个版本解决

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与MySQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最简单的神经网络
    • 准备训练数据
      • 构建神经网络
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档