2020-01-30 使用PaddlePaddle进行线性回归(一)

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。

1.引入必要的运行包:

#引入paddle的包

import paddle.fluid as fluid

import paddle

import numpy as np #引入数学计算的包

# 定义变量,变量的shape为13维,类型为float32,也可以是float64啥的

x=fluid.layers.data(name='x',shape=[13],dtype='float32')

# 个人理解,定义标签的内容

y = fluid.layers.data(name='y', shape=[1], dtype='float32')

#定义一个全链接的隐藏层,激活函数为:relu

/*

paddle.fluid.layers.fc(inputsizenum_flatten_dims=1param_attr=Nonebias_attr=Noneact=Nonename=None)

全连接层

参数:

input (Variable|list of Variable) – 维度为 [N1,N2,...,Nk][N1,N2,...,Nk] 的多维Tensor(或LoDTensor)或由多个Tensor(或LoDTensor)组成的list,输入Tensor的shape至少是2。数据类型为float32或float64。

size (int) – 全连接层输出单元的数目,即输出Tensor(或LoDTensor)特征维度。

num_flatten_dims (int) – 输入可以接受维度大于2的Tensor。在计算时,输入首先会被扁平化(flatten)为一个二维矩阵,之后再与权重(weights)相乘。参数 num_flatten_dims 决定了输入Tensor的flatten方式: 前 num_flatten_dims (包含边界,从1开始数) 个维度会被扁平化为二维矩阵的第一维 (即为矩阵的高), 剩下的 rank(X)−num_flatten_dimsrank(X)−num_flatten_dims 维被扁平化为二维矩阵的第二维 (即矩阵的宽)。 例如, 假设X是一个五维的Tensor,其shape为(2, 3, 4, 5, 6), 若 num_flatten_dims=3num_flatten_dims=3 ,则扁平化的矩阵shape为: (2x3x4,5x6)=(24,30)(2x3x4,5x6)=(24,30) ,最终输出Tensor的shape为 (2,3,4,size)(2,3,4,size) 。默认为1。

param_attr (ParamAttr) – 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 ParamAttr 。

bias_attr (ParamAttr) – 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 ParamAttr 。

act (str) – 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 激活函数 ,默认值为None。

name (str,可选) – 具体用法请参见 Name ,一般无需设置,默认值为None。

*/

hidden=fluid.layers.fc(input=x,size=100,act='relu')

#定义输出网络层,一维

net = fluid.layers.fc(input=hidden,size=1,act=None)

# 定义优化器

#以下用于计算预测值和目标值的方差估计(input 预测值,label 目标值)

/*

参数:

input (Variable) - 预测值,维度为 [N1,N2,...,Nk,D][N1,N2,...,Nk,D] 的多维Tensor,其中最后一维D是类别数目。数据类型为float32或float64。

label (Variable) - 目标值,维度为 [N1,N2,...,Nk,D][N1,N2,...,Nk,D] 的多维Tensor,其中最后一维D是类别数目。数据类型为float32或float64。

*/

cost = fluid.layers.square_error_cost(input=net, label=y)

#计算所有元素的平均值

/*

参数:

x (Variable) : Tensor 或 LoDTensor。均值运算的输入。

name (basestring | None) : 输出变量的名称。

返回:

Variable: 包含输出均值的 Tensor / LoDTensor。

返回类型:

Variable(变量)。

*/

avg_cost = fluid.layers.mean(cost)

# 该接口实现随机梯度下降算法的优化器,定义优化方法,学习率为0.01(一般为此值,此值影响学习效率)

#SGD 是实现 随机梯度下降 的一个 Optimizer 子类,是 梯度下降 大类中的一种方法。 当需要训练大量样本的时候,往往选择 SGD 来使损失函数更快的收敛。

optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)

opts = optimizer.minimize(avg_cost)

# 创建一个使用CPU的解释器

place = fluid.CPUPlace()

exe = fluid.Executor(place)

# 进行参数初始化

exe.run(fluid.default_startup_program())


# 定义训练数据 y_data 为标签 x_data为数据,每一个[]包括13个数据

x_data = np.array([[1.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],

                  [2.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],

                  [3.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],

                  [4.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],

                  [5.0, 6.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 = np.array([[3.0], [5.0], [7.0], [9.0], [11.0]]).astype('float32')

#下面进行训练,进行20次训练

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]))

#克隆一个program进行测试

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

# 开始预测

#定义测试数据

test_data = np.array([[7.0, 8.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')

result = exe.run(program=test_program,

                feed={'x': test_data, 'y': np.array([[0.0]]).astype('float32')}, # y 仅使用同一个类型的占位使用

                fetch_list=[net])

print("当x为7.0时,y为:%0.5f" % result[0][0][0])



执行后,打印结果显:

ass:0, Cost:55.13420

Pass:1, Cost:0.69831

Pass:2, Cost:0.22522

Pass:3, Cost:0.12459

Pass:4, Cost:0.06046

Pass:5, Cost:0.03912

Pass:6, Cost:0.02799

Pass:7, Cost:0.02345

Pass:8, Cost:0.02114

Pass:9, Cost:0.01998

Pass:10, Cost:0.01926

Pass:11, Cost:0.01876

Pass:12, Cost:0.01835

Pass:13, Cost:0.01798

Pass:14, Cost:0.01763

Pass:15, Cost:0.01729

Pass:16, Cost:0.01697

Pass:17, Cost:0.01665

Pass:18, Cost:0.01633

Pass:19, Cost:0.01600

当x为7.0时,y为:14.71384

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容