hello paddle

import paddle         #导入飞桨paddle和numpy
import numpy
print("paddle " + paddle.__version__)
print("numpy " + numpy.__version__)
paddle 2.2.1
numpy 1.21.2
 #用paddle.to_tensor把示例数据转换为paddle的Tensor数据。
    
x_data = paddle.to_tensor([[1.], [3.0], [5.0], [9.0], [10.0], [20.0]])   
y_data = paddle.to_tensor([[12.], [16.0], [20.0], [28.0], [30.0], [50.0]])

一、用飞桨定义模型的计算

在这里的示例中,根据经验,已经事先知道了distance_travelledtotal_fee之间是线性的关系,而在更实际的问题当中,x和y的关系通常是非线性的,因此也就需要使用更多类型,也更复杂的神经网络。(比如,BMI指数跟你的身高就不是线性关系,一张图片里的某个像素值跟这个图片是猫还是狗也不是线性关系。)

飞桨的线性变换层:paddle.nn.Linear来实现这个计算过程,这个公式里的变量x, y, w, b, y_predict,对应着飞桨里面的Tensor概念

linear = paddle.nn.Linear(in_features=1, out_features=1)

二、准备好运行飞桨

机器(计算机)在一开始的时候会随便猜w和b,这时候的w是一个随机值,b是0.0,这是飞桨的初始化策略,也是这个领域常用的初始化策略。(如果你愿意,也可以采用其他的初始化的方式,今后你也会看到,选择不同的初始化策略也是对于做好深度学习任务来说很重要的一点。

w_before_opt = linear.weight.numpy().item()
b_before_opt = linear.bias.numpy().item()

print("w before optimize: {}".format(w_before_opt))
print("b before optimize: {}".format(b_before_opt))
w before optimize: -1.2472419738769531
b before optimize: 0.0

三、告诉飞桨怎么样学习

前面定义好了神经网络(尽管是一个最简单的神经网络),还需要告诉飞桨,怎么样去学习,从而能得到参数w和b

机器学习/深度学习当中,机器(计算机)在最开始的时候,得到参数w和b的方式是随便猜一下,用这种随便猜测得到的参数值,去进行计算(预测)的时候,得到的y_predict,跟实际的y值一定是有差距的。接下来,机器会根据这个差距来调整w和b,随着这样的逐步的调整,w和b会越来越正确,y_predict跟y之间的差距也会越来越小,从而最终能得到好用的w和b。这个过程就是机器学习的过程。

用更加技术的语言来说,衡量差距的函数(一个公式)就是损失函数,用来调整参数的方法就是优化算法

用最简单的均方误差(mean square error)作为损失函数(paddle.nn.MSELoss);和最常见的优化算法SGD(stocastic gradient descent)作为优化算法(传给paddle.optimizer.SGD的参数learning_rate,你可以理解为控制每次调整的步子大小的参数)。

mse_loss = paddle.nn.MSELoss()      #均方误差mse作为损失函数,
sgd_optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters = linear.parameters())   #调参算法SGD作为优化算法

四、运行优化算法

接下来,让飞桨运行一下这个优化算法,这会是一个前面介绍过的逐步调整参数的过程,你应该可以看到loss值(衡量y和y_predict的差距的loss)在不断的降低。

total_epoch = 5000
for i in range(total_epoch):
    y_predict = linear(x_data)
    loss = mse_loss(y_predict, y_data)
    loss.backward()
    sgd_optimizer.step()
    sgd_optimizer.clear_grad()
    
    if i%1000 == 0:
        print("epoch {} loss {}".format(i, loss.numpy()))
        
print("finished training, loss {}".format(loss.numpy()))

epoch 0 loss [1702.1357]
epoch 1000 loss [7.9019628]
epoch 2000 loss [1.7668242]
epoch 3000 loss [0.39504835]
epoch 4000 loss [0.08833063]
finished training, loss [0.0197801]

五、机器学习出来的参数

经过了这样的对参数w和b的调整(学习),再通过下面的程序,来看看现在的参数变成了多少。你应该会发现w变成了很接近2.0的一个值,b变成了接近10.0的一个值。虽然并不是正好的2和10,但却是从数据当中学习出来的还不错的模型的参数,可以在未来的时候,用从这批数据当中学习到的参数来预估了。(如果你愿意,也可以通过让机器多学习一段时间,从而得到更加接近2.0和10.0的参数值。)

w_after_opt = linear.weight.numpy().item()
b_after_opt = linear.bias.numpy().item()

print("w after optimize: {}".format(w_after_opt))
print("b after optimize: {}".format(b_after_opt))

w after optimize: 2.017909288406372
b after optimize: 9.771002769470215
print("hello paddle")
hello paddle
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿洲213

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值