PaddlePaddle 中的若干基础命令中的问题
        【摘要】 
                    
                        
                    
                     
 
 简 介: 关键词: Paddle,静态,动态 
 
 
  
  
  
   
    
    
     
      
      
       
        
       
...
    
    
    
    
简 介:
关键词: Paddle,静态,动态
新手入门第四课——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.2 动态图方法

▲ 图3.2.1 Train Error 
■ 相关文献链接:
● 相关图表链接:
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/122383945
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)