PaddlePaddle 中的若干基础命令中的问题

举报
tsinghuazhuoqing 发表于 2022/01/10 22:51:52 2022/01/10
【摘要】 简 介: 关键词: Paddle,静态,动态 ...

简 介:

关键词 Paddle静态动态

定义张量
文章目录
两种方法对比
为什么这样定
义无法允许?
回归网络
第一种方法:静态图
第二种方法:动态图
回归UCI房价
静态图方法
动态图方法

  新手入门第四课——PaddlePaddle快速入门.

 

§01 义张量


1.1 两种方法对比

  下面两种方法都可以定义出相同的张量。

x1 = fluid.layers.fill_constant(shape=[2,2], value=1, dtype='int64')
x2 = fluid.layers.fill_constant(shape=[2,2], value=1, dtype='int64')
y1 = fluid.layers.sum(x=[x1,x2])
print(type(x1), x1, type(y1),y1)

z1 = paddle.ones([2,2], dtype='int64')
z2 = paddle.ones([2,2], dtype='int64')

w = z1+z2

print(type(w), w)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

  运行结果

<class 'paddle.Tensor'>
Tensor(shape=[2, 2], dtype=int64, place=CPUPlace, stop_gradient=True,
       [[1, 1],
        [1, 1]])
<class 'paddle.Tensor'>
Tensor(shape=[2, 2], dtype=int64, place=CPUPlace, stop_gradient=True,
       [[2, 2],
        [2, 2]])

<class 'paddle.Tensor'>
Tensor(shape=[2, 2], dtype=int64, place=CPUPlace, stop_gradient=True,
       [[2, 2],
        [2, 2]])

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

  可以看到他们的执行结果是相同的。

1.2 为什么这样定义无法允许?

  下面的程序是按照Paddle中的示例程序来运行,反向在运行过程中无法执行。

place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
exe.run(fluid.default_startup_program())

  
 
  • 1
  • 2
  • 3

 

§02 归网络


2.1 第一种方法:静态图

  这是一种定义静态图的方法,定义回归网络。

from headm import *                 # =

import paddle
import paddle.fluid as fluid

paddle.enable_static()

x = fluid.layers.data(name='x', shape=[13], dtype='float32')
hidden = fluid.layers.fc(input=x, size=100, act='relu')
net = fluid.layers.fc(input=hidden, size=1, act=None)

y = fluid.layers.data(name='y', shape=[1], dtype='float32')
cost = fluid.layers.square_error_cost(input=net, label=y)
avg_cost = fluid.layers.mean(cost)

test_program = fluid.default_main_program().clone(for_test=True)
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)

place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())

x_data = array([[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                   [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                   [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                   [4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                   [5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]).astype('float32')
y_data = array([[3.0], [5.0], [7.0], [9.0], [11.0]]).astype('float32')
test_data = array([[6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]).astype('float32')

for pass_id in range(20):
    train_cost = exe.run(program=fluid.default_main_program(),
                         feed={'x':x_data, 'y':y_data},
                         fetch_list=[avg_cost])

    print("pass:%d, Cost:%0.5f"%(pass_id, train_cost[0]))

result = exe.run(program=test_program,
                 feed={'x':test_data, 'y':array([[0.0]]).astype('float32')},
                 fetch_list=[net])

printt(result)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

2.2 第二种方法:动态图

  动态图的方法进行预测是在 Paddle下的Tensor运算以及简单回归问题 给出了测试方案。

from headm import *                 # =

import paddle
import paddle.nn.functional as F
from paddle import to_tensor as TT
from paddle.nn.functional import square_error_cost as SQRC
from paddle.nn.functional import softmax as softmax

paddle.disable_static()

net = paddle.nn.Sequential(
    paddle.nn.Linear(13,100),
    paddle.nn.ReLU(),
    paddle.nn.Linear(100,1),
)

optimizer = paddle.optimizer.SGD(learning_rate=0.01, parameters=net.parameters())

x_data = array([[i]+[0]*12 for i in range(1,6)]).astype('float32')
y_data = array([[i*2+1] for i in range(1,6)]).astype('float32')
test_data = array([[6]+[0]*12]).astype('float32')

inputs = paddle.to_tensor(x_data)
labels = paddle.to_tensor(y_data)

for pass_id in range(10):
    out = net(inputs)
    loss = paddle.mean(SQRC(out,labels))

    loss.backward()
    optimizer.step()
    optimizer.clear_grad()

    if pass_id %1==0:
        print("Pass:{}, Loss:{}".format(pass_id,loss.numpy()))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

  dir(train_data)

 

§03 归UCI房价


3.1 静态图方法

from headm import *                 # =

import paddle
import paddle.fluid as fluid

train_data = paddle.dataset.uci_housing.train()
test_data = paddle.dataset.uci_housing.test()

BUF_SIZE        = 500
BATCH_SIZE      = 20
train_reader = paddle.batch(
    paddle.reader.shuffle(train_data, buf_size=BUF_SIZE),
    batch_size = BATCH_SIZE,
)
test_reader = paddle.batch(
    paddle.reader.shuffle(test_data, buf_size=BUF_SIZE),
    batch_size = BATCH_SIZE,
)

paddle.enable_static()

x = fluid.layers.data(name='x', shape=[13], dtype='float32')
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)

cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(cost)

optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.001)
opts = optimizer.minimize(avg_cost)

test_program = fluid.default_main_program().clone(for_test=True)

use_cude = False
place = fluid.CUDAPlace(0) if use_cude else fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())

feeder = fluid.DataFeeder(place=place, feed_list=[x,y])

iter = 0
iters = []
train_costs = []

def draw_train_progress(iters, train_costs):
    title = 'Train Cost'
    plt.figure(figsize=(10, 8))
    plt.title(title, fontsize=24)
    plt.xlabel('Iter', fontsize=14)
    plt.ylabel('Cost', fontsize=14)
    plt.plot(iters, train_costs, color='red', label='Train Cost')
    plt.grid()
    plt.show()

EPOCH_NUM = 50
model_save_dir = '/home/aistudio/work/fit_a_line.inference.model'

for pass_id in range(EPOCH_NUM):
    train_cost = 0
    for batch_id,data in enumerate(train_reader()):
        train_cost = exe.run(program=fluid.default_main_program(),
                             feed=feeder.feed(data),
                             fetch_list=[avg_cost])

        if batch_id%40 ==0:
            print("Pass:%d, Cost:%0.5f"%(pass_id, train_cost[0][0]))
        iter = iter+BATCH_SIZE
        iters.append(iter)
        train_costs.append(train_cost[0][0])

    test_cost = 0
    for batch_id,data in enumerate(test_reader()):
        test_cost = exe.run(program=test_program,
                            feed=feeder.feed(data),
                            fetch_list=[avg_cost])

    print("Test:%d, Cost:%.5f"%(pass_id, test_cost[0][0]))

if not os.path.exists(model_save_dir):
    os.makedirs(model_save_dir)

print("Save models to %s"%model_save_dir)

fluid.io.save_inference_model(model_save_dir,
                              ['x'],
                              [y_predict],
                              exe)

draw_train_program(iters, train_costs)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

▲ 图3.1.1 Train Cost

▲ 图3.1.1 Train Cost

3.2 动态图方法

▲ 图3.2.1 Train Error

▲ 图3.2.1 Train Error


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/122383945

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。