PaddlePaddle深度学习--线性回归

运行环境:Spyder (python 3.7.6)

可执行代码:

import paddle.fluid as fluid
import paddle
import numpy as np
import os
import matplotlib.pyplot as plt
BUF_SIZE=500
BATCH_SIZE=20

#用于训练的数据提供器,每次从缓存中随机读取批次大小的数据
train_reader = paddle.batch(
    paddle.reader.shuffle(paddle.dataset.uci_housing.train(), 
                          buf_size=BUF_SIZE),                    
    batch_size=BATCH_SIZE)   
#用于测试的数据提供器,每次从缓存中随机读取批次大小的数据
test_reader = paddle.batch(
    paddle.reader.shuffle(paddle.dataset.uci_housing.test(),
                          buf_size=BUF_SIZE),
    batch_size=BATCH_SIZE)
train_data=paddle.dataset.uci_housing.train();
sampledata=next(train_data())
print(sampledata)
#定义张量变量x,表示13维的特征值
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
#定义张量y,表示目标值
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
#定义一个简单的线性网络,连接输入和输出的全连接层
#input:输入tensor;
#size:该层输出单元的数目
#act:激活函数
y_predict=fluid.layers.fc(input=x,size=1,act=None)
cost = fluid.layers.square_error_cost(input=y_predict, label=y) #求一个batch的损失值
avg_cost = fluid.layers.mean(cost)                              #对损失值求平均值
test_program = fluid.default_main_program().clone(for_test=True)
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.001)
opts = optimizer.minimize(avg_cost)
use_cuda = False                         #use_cuda为False,表示运算场所为CPU;use_cuda为True,表示运算场所为GPU           
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
exe = fluid.Executor(place)              #创建一个Executor实例exe
exe.run(fluid.default_startup_program()) #Executor的run()方法执行startup_program(),进行参数初始化
# 定义输入数据维度
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])#feed_list:向模型输入的变量表或变量表名
iter=0;
iters=[]
train_costs=[]

def draw_train_process(iters,train_costs):
    title="training cost"
    plt.title(title, fontsize=24)
    plt.xlabel("iter", fontsize=14)
    plt.ylabel("cost", fontsize=14)
    plt.plot(iters, train_costs,color='red',label='training 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):                                  #训练EPOCH_NUM轮
    # 开始训练并输出最后一个batch的损失值
    train_cost = 0
    for batch_id, data in enumerate(train_reader()):              #遍历train_reader迭代器
        train_cost = exe.run(program=fluid.default_main_program(),#运行主程序
                             feed=feeder.feed(data),              #喂入一个batch的训练数据,根据feed_list和data提供的信息,将输入数据转成一种特殊的数据结构
                             fetch_list=[avg_cost])    
        if batch_id % 40 == 0:
            print("Pass:%d, Cost:%0.5f" % (pass_id, train_cost[0][0]))    #打印最后一个batch的损失值
        iter=iter+BATCH_SIZE
        iters.append(iter)
        train_costs.append(train_cost[0][0])
       
   
    # 开始测试并输出最后一个batch的损失值
    test_cost = 0
    for batch_id, data in enumerate(test_reader()):               #遍历test_reader迭代器
        test_cost= exe.run(program=test_program, #运行测试cheng
                            feed=feeder.feed(data),               #喂入一个batch的测试数据
                            fetch_list=[avg_cost])                #fetch均方误差
    print('Test:%d, Cost:%0.5f' % (pass_id, test_cost[0][0]))     #打印最后一个batch的损失值
    
    #保存模型
    # 如果保存路径不存在就创建
if not os.path.exists(model_save_dir):
    os.makedirs(model_save_dir)
print ('save models to %s' % (model_save_dir))
#保存训练参数到指定路径中,构建一个专门用预测的program
fluid.io.save_inference_model(model_save_dir,   #保存推理model的路径
                                  ['x'],            #推理(inference)需要 feed 的数据
                                  [y_predict],      #保存推理(inference)结果的 Variables
                                  exe)              #exe 保存 inference model
draw_train_process(iters,train_costs)

运行结果:

(array([-0.0405441 ,  0.06636364, -0.32356227, -0.06916996, -0.03435197,
        0.05563625, -0.03475696,  0.02682186, -0.37171335, -0.21419304,
       -0.33569506,  0.10143217, -0.21172912]), array([24.]))
Pass:0, Cost:594.97675
Test:0, Cost:252.35065
Pass:1, Cost:561.83167
Test:1, Cost:246.09416
Pass:2, Cost:459.74844
Test:2, Cost:232.91687
Pass:3, Cost:509.07635
Test:3, Cost:495.48148
Pass:4, Cost:472.40460
Test:4, Cost:194.80412
Pass:5, Cost:240.92383
Test:5, Cost:66.57917
Pass:6, Cost:440.24042
Test:6, Cost:84.65546
Pass:7, Cost:634.61072
Test:7, Cost:182.83545
Pass:8, Cost:341.25592
Test:8, Cost:45.64724
Pass:9, Cost:239.61629
Test:9, Cost:38.21730
Pass:10, Cost:416.92545
Test:10, Cost:13.68345
Pass:11, Cost:313.31342
Test:11, Cost:137.43176
Pass:12, Cost:193.87694
Test:12, Cost:47.85563
Pass:13, Cost:201.06247
Test:13, Cost:82.04956
Pass:14, Cost:303.68903
Test:14, Cost:93.72757
Pass:15, Cost:271.42902
Test:15, Cost:68.27122
Pass:16, Cost:147.85150
Test:16, Cost:31.66114
Pass:17, Cost:163.93301
Test:17, Cost:34.30592
Pass:18, Cost:217.68208
Test:18, Cost:159.02216
Pass:19, Cost:198.56328
Test:19, Cost:11.23554
Pass:20, Cost:151.04672
Test:20, Cost:156.35715
Pass:21, Cost:228.13264
Test:21, Cost:19.72987
Pass:22, Cost:135.02721
Test:22, Cost:28.90829
Pass:23, Cost:139.20348
Test:23, Cost:43.64440
Pass:24, Cost:106.02905
Test:24, Cost:37.60497
Pass:25, Cost:234.56519
Test:25, Cost:4.32913
Pass:26, Cost:88.99309
Test:26, Cost:28.61305
Pass:27, Cost:90.94614
Test:27, Cost:5.81786
Pass:28, Cost:108.04978
Test:28, Cost:1.58353
Pass:29, Cost:72.39711
Test:29, Cost:10.82204
Pass:30, Cost:114.94093
Test:30, Cost:0.34398
Pass:31, Cost:80.49113
Test:31, Cost:21.12144
Pass:32, Cost:52.95084
Test:32, Cost:20.68388
Pass:33, Cost:132.29752
Test:33, Cost:5.25918
Pass:34, Cost:148.28853
Test:34, Cost:17.86463
Pass:35, Cost:104.56012
Test:35, Cost:22.85536
Pass:36, Cost:160.09470
Test:36, Cost:31.46528
Pass:37, Cost:55.97822
Test:37, Cost:44.90407
Pass:38, Cost:74.20323
Test:38, Cost:5.53818
Pass:39, Cost:185.96228
Test:39, Cost:14.48831
Pass:40, Cost:19.58599
Test:40, Cost:11.97766
Pass:41, Cost:54.85631
Test:41, Cost:23.13018
Pass:42, Cost:71.04317
Test:42, Cost:13.37346
Pass:43, Cost:119.49823
Test:43, Cost:13.66442
Pass:44, Cost:183.30392
Test:44, Cost:34.38294
Pass:45, Cost:29.84375
Test:45, Cost:15.30897
Pass:46, Cost:13.55676
Test:46, Cost:4.49575
Pass:47, Cost:35.73510
Test:47, Cost:29.71836
Pass:48, Cost:182.10692
Test:48, Cost:9.02156
Pass:49, Cost:91.14111
Test:49, Cost:16.10660
save models to /home/aistudio/work/fit_a_line.inference.model

写在后面:paddlepaddle是一个框架,类似一个包,在使用时需要import导入
目前测试在python自带IDE不可执行,需要使用第三方代码平台进行导入使用,目前测试通过。

猜你喜欢

转载自blog.csdn.net/qq_43530438/article/details/107736410