前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MXNet逐梦之旅]实战一·使用MXNet拟合曲线(对比MXNet,PyTorch与TensorFlow实现的区别)

[MXNet逐梦之旅]实战一·使用MXNet拟合曲线(对比MXNet,PyTorch与TensorFlow实现的区别)

作者头像
小宋是呢
发布2019-06-27 14:24:05
8790
发布2019-06-27 14:24:05
举报
文章被收录于专栏:深度应用

MXNet逐梦之旅实战一·使用MXNet拟合曲线(对比MXNet,PyTorch与TensorFlow实现的区别)

在之前的博文中我们用TensorFlowPyTorch进行了拟合曲线,到达了不错的效果。

我们现在使用MXNet进行相同的曲线拟合,进而来比较一下TensorFlow与PyTorch的异同。

搭建神经网络进行训练的步骤基本相同,我们现在开始用MXNet来实现。

  • 问题描述 拟合y= x*x -2x +3 + 0.1(-1到1的随机值) 曲线 给定x范围(0,3)
  • 问题分析 在直线拟合博客中,我们使用最简单的y=wx+b的模型成功拟合了一条直线,现在我们在进一步进行曲线的拟合。简单的y=wx+b模型已经无法满足我们的需求,需要利用更多的神经元来解决问题了。
  • 生成数据
代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import torch as t
from torch.autograd import Variable as var

def get_data(x,w,b,d):
    c,r = x.shape
    y = (w * x * x + b*x + d)+ (0.1*(2*np.random.rand(c,r)-1))
    return(y)

xs = np.arange(0,3,0.01).reshape(-1,1)
ys = get_data(xs,1,-2,3)

xs = var(t.Tensor(xs))
ys = var(t.Tensor(ys))

生成的数据图像为:

  • 搭建网络
代码语言:javascript
复制
from mxnet.gluon import loss,nn,data
from mxnet import autograd, nd, gluon,init

import numpy as np
import matplotlib.pyplot as plt

def get_data(x,w,b,d):
    c,r = x.shape
    y = (w * x * x + b*x + d)+ (0.1*(2*np.random.rand(c,r)-1))
    return(y)

xs = np.arange(0,3,0.01).reshape(-1,1)
ys = get_data(xs,1,-2,3)

xs,ys = nd.array(xs),nd.array(ys)


batch_size = 100
# 将训练数据的特征和标签组合。
dataset = data.ArrayDataset(xs, ys)
# 随机读取小批量。
data_iter = data.DataLoader(dataset, batch_size, shuffle=True)

model = nn.Sequential()

model.add(nn.Dense(16,activation='relu'))
model.add(nn.Dense(1))

model.initialize(init.Normal(sigma=0.01))

print(model)

loss_f = loss.L2Loss()

trainer = gluon.Trainer(model.collect_params(), 'Adam', {'learning_rate': 0.1})

num_epochs = 1000
for epoch in range(1, num_epochs + 1):
    for X, y in data_iter:
        with autograd.record():
            l = loss_f(model(X), y)
        l.backward()
        trainer.step(batch_size)
    l = loss_f(model(xs), ys)
    if(epoch%100==0):print('epoch %d, loss: %f' % (epoch, l.mean().asnumpy()))




ys_pre = model(xs)

plt.title("curve")
plt.plot(xs.asnumpy(),ys.asnumpy())
plt.plot(xs.asnumpy(),ys_pre.asnumpy())
plt.show()
  • 输出结果
代码语言:javascript
复制
Sequential(
  (0): Dense(None -> 16, Activation(relu))
  (1): Dense(None -> 1, linear)
)
epoch 100, loss: 0.229648
epoch 200, loss: 0.233721
epoch 300, loss: 0.233185
epoch 400, loss: 0.178324
epoch 500, loss: 0.018889
epoch 600, loss: 0.009249
epoch 700, loss: 0.007344
epoch 800, loss: 0.003552
epoch 900, loss: 0.003080
epoch 1000, loss: 0.002648
  • 实验现象
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MXNet逐梦之旅实战一·使用MXNet拟合曲线(对比MXNet,PyTorch与TensorFlow实现的区别)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档