从Numpy到PaddlePaddle1

2021-02-14  本文已影响0人  LabVIEW_Python

Numpy是用于科学计算的通用框架,它具备:

import numpy as np
import math

# 创建训练数据和标签值
x = np.linspace(-math.pi, math.pi, 2000)
y = np.sin(x)

# 随机初始化权重 weights
a = np.random.randn()
b = np.random.randn()
c = np.random.randn()
d = np.random.randn()

learning_rate = 1e-6
for t in range(5000):
    # 前向传播: 计算预测值 y
    # y = a + b x + c x^2 + d x^3
    y_pred = a + b * x + c * x ** 2 + d * x ** 3

    # 计算损失函数值
    loss = np.square(y_pred - y).sum()
    if t % 500 == 499:
        print(t, loss)

    # 计算参数 a, b, c, d 相对于 loss函数的梯度
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x ** 2).sum()
    grad_d = (grad_y_pred * x ** 3).sum()

    # 更新参数
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d

print(f'Result: y = {a} + {b} x + {c} x^2 + {d} x^3')
x = 90* math.pi/180
print(f"sin(x)={np.sin(x)}; y(x) = {a + b * x + c * x ** 2 + d * x ** 3}")

运行结果:

4999 [8.817238]
Result: y = [-0.00027947] + [0.8567045] x + [4.8210277e-05] x^2 + [-0.09332521] x^3
sin(x)=1.0; y(x) = [0.9838394]

PaddlePaddle(飞桨)是深度学习框架,将神经网络抽象为计算表示Operator(算子)和数据表示Variable(变量),让开发者能方便快速的搭建深度学习模型。它具备:

import paddle
import math

# 创建训练数据和标签值
x = paddle.linspace(-math.pi, math.pi, 2000)
y = paddle.sin(x)

# 随机初始化权重 weights
a = paddle.randn([1])
b = paddle.randn([1])
c = paddle.randn([1])
d = paddle.randn([1])

learning_rate = 1e-6

for t in range(5000):
    # 前向传播: 计算预测值 y
    # y = a + b x + c x^2 + d x^3
    y_pred = a + b * x + c * x ** 2 + d * x ** 3

    # 计算损失函数值
    loss = paddle.square(y_pred - y).sum()
    if t % 500 == 499:
        print(t, loss.numpy())

    # 计算参数 a, b, c, d 相对于 loss函数的梯度
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x ** 2).sum()
    grad_d = (grad_y_pred * x ** 3).sum()

    # 更新参数
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d

print(f'Result: y = {a.numpy()} + {b.numpy()} x + {c.numpy()} x^2 + {d.numpy()} x^3')
x = 90* math.pi/180
a,b,c,d = a.numpy(),b.numpy(),c.numpy(),d.numpy()
import numpy as np
print(f"sin(x)={np.sin(x)}; y(x) = {a + b * x + c * x ** 2 + d * x ** 3}")

运行结果

4999 [8.817238]
Result: y = [-0.00027947] + [0.8567045] x + [4.8210277e-05] x^2 + [-0.09332521] x^3
sin(x)=1.0; y(x) = [0.9838394]

用PaddlePaddle实现的程序框架和计算,跟Numpy实现的程序非常类似
下一节《从Numpy到PaddlePaddle2》

上一篇 下一篇

猜你喜欢

热点阅读