首页 Paddle框架 帖子详情
Fluid1.2.0 就房价预测例子的相关问题
收藏
快速回复
Paddle框架 问答深度学习模型训练 6209 22
Fluid1.2.0 就房价预测例子的相关问题
收藏
快速回复
Paddle框架 问答深度学习模型训练 6209 22

没有深度学习经验,没有python经验,但也想硬啃paddle这本圣经。

在跟随学习paddle fluid1.2.0版本的过程中,我从线性回归(房价预测)代码片段里,有一部分还无法理解,请填过坑的前辈为我指指路

 

代码以 https://github.com/PaddlePaddle/book/blob/develop/01.fit_a_line/train.py 中的为准

 

1.在代码38行出现了shuffle和batch两个方法。

我能明白shuffle是每到buf数量打乱一次返回一个reader。就本数据集,总共是506行数据,那么shuffle会是 1个500个数据和1个6个数据 2个reader
还是只会有1个500个数据的reader

batch吃到数据集后,会以每batch_size个数据为一批数据,是否可以认为本案例中,batch对象中有25批数据?

 

 

2.第50行初始化了2个program。一个是主程序、一个是启动程序,

因为exe这个Executor在72行run了启动程序,而在82行又用主程序run了。这两者是否缺一不可?各自run了之后有什么意义?

 

3.第56行 创建了一个随机梯度下降优化器,但是没有任何地方显式的去让执行器使用这个优化器。
请问是正常的嘛,是不需要指定,自动应用在执行器上的吗?

 

4代码第109行 在存储模型的时候,传入的第二个参数是所谓的输入层,这里的x是字符串吧?是代表第46行所注册的名为x的输入层吗。为什么要用[],是考虑可能有多个输入层输入的情况吗?

 

5.代码第113行 fluid.core.scope() 是做什么用的?看文档只有一个fluid.scope,并没有找到core的scope。
fluid.scope说要想运行一个网络,需要指明它运行所在的域。但是我从代码上也只看到了他声明了个对象,并没有指明所谓的域?

这里也没有显式表明scope的用途。所以没明白用途。

 

 

6.116行 with fluid.scope_guard(inference_scope): 代表的是什么意义? 因为没理解scope

修改全局/默认作用域(scope), 运行时中的所有变量都将分配给新的scope。

这里的变量指的是啥?? 是因为训练完就跑的推理,所以这里变量指的是缓存里的模型吗???

 

 

7.121行 因为数据集test()应该也是506个(没确认过),那此时这个batch如果batch_size是10的话,应该有50批数据(最后一组不满10个不用)还是51批数据呢(最后一批不满10个)

 


8.第81行,这个reader只会返回20条数据吗?还是会把25批数据都for出来。我通过打印检查step发现是20次过一个epoch的,所以结论更像前者,但是还是确认一下。如果是真的只返回20条,那为何要用for in? 这样是为了batch提取的是随机的一批吗?

 

0
收藏
回复
全部评论(22)
时间顺序
goJhou
#2 回复于2019-01

paddle更新太快了(狗头)。

买的两本paddlepaddle的书全是针对v1和v2的,尴尬

0
回复
夜雨飘零1
#3 回复于2019-01

1、shuffle是把数据加入到缓存中,batch是把缓存中的数据在拿到训练中。比如先拿500条数据到缓存中,然后每次从缓存中获取32条数据进行训练。

2、default_main_program是paddlepaddle的主程序,我们定义的网络,优化方法都是在这个主程序中。default_startup_program这个是初始化程序,整个框架有一些需要出现后的参数,就是通过这个程序初始化的

3、这就是主程序的作用,你不用手动添加,会自动添加到程序中的。

4、这个是输入数据的name,把这个传入进去,之后可以直接掉哟个着值传入参数了。

5、这个在https://github.com/PaddlePaddle/book/blob/64c82c575ff842eaf02c62e61ec6cce78ecc0f42/01.fit_a_line/train.py#L116 用到,python就是这样的,我建议还是要学一下python

6、就是在with值下面的代码

7、51个,最后剩多少,用多少。

8、每个循环获取batch size条数据,直到获取完

0
回复
goJhou
#4 回复于2019-01
1、shuffle是把数据加入到缓存中,batch是把缓存中的数据在拿到训练中。比如先拿500条数据到缓存中,然后每次从缓存中获取32条数据进行训练。 2、default_main_program是paddlepaddle的主程序,我们定义的网络,优化方法都是在这个主程序中。default_startup_program这个是初始化程序,整个框架有一些需要出现后的参数,就是通过这个程序初始化的 3、这就是主程序的作用,你不用手动添加,会自动添加到程序中的。 4、这个是输入数据的name,把这个传入进去,之后可以直接掉哟个着值传入参数了。 5、这个在https://github.com/PaddlePaddle/book/blob/64c82c575ff842eaf02c62e61ec6cce78ecc0f42/01.fit_a_line/train.py#L116 用到,python就是这样的,我建议还是要学一下python 6、就是在with值下面的代码 7、51个,最后剩多少,用多少。 8、每个循环获取batch size条数据,直到获取完
展开

感谢大佬解答,以下是我看了回答后产生的一些新问题

 

1. 那其实像本案例中506个数据,shuffle取出的是506个中的头500个然后打乱,剩下6个等于是抛掉不会再用了,是这样吗?

 

2.什么情况下该用default_startup_program呢?

该案例中仅仅exe这个执行器run了它,另外一个执行器exe_test是一个全新的执行器,它就没有run(default_startup_program)

而exe_test是为了使用测试集测试误差用的,也实际在代码中使用了。为何exe和exe_test会有这个不同?

 

4.能理解他传入网络层的name来告诉模型输入层是哪层,但没理解他加[]的意义,这个可能会在后面其他案例中学到,现在的观念还是觉得输入层都是单一的,只是维度很多。 他加了个[]是意思是可能会有多个输入层这样子吗?

0
回复
夜雨飘零1
#5 回复于2019-01
goJhou #4
感谢大佬解答,以下是我看了回答后产生的一些新问题   1. 那其实像本案例中506个数据,shuffle取出的是506个中的头500个然后打乱,剩下6个等于是抛掉不会再用了,是这样吗?   2.什么情况下该用default_startup_program呢? 该案例中仅仅exe这个执行器run了它,另外一个执行器exe_test是一个全新的执行器,它就没有run(default_startup_program) 而exe_test是为了使用测试集测试误差用的,也实际在代码中使用了。为何exe和exe_test会有这个不同?   4.能理解他传入网络层的name来告诉模型输入层是哪层,但没理解他加[]的意义,这个可能会在后面其他案例中学到,现在的观念还是觉得输入层都是单一的,只是维度很多。 他加了个[]是意思是可能会有多个输入层这样子吗?
展开

1、剩下的6个就第二批

2、其实完全可以使用一个执行器exe的

4、因为输入数据有可能不止一个,可能是多个,所以需要一个数组

0
回复
busyboxs
#6 回复于2019-01

第一个问题,你的问题中就包含有一个问题;首先分析一下数据:

数据是506确实没错,但是分为训练集和测试集,所以

训练集数据为404条,测试集数据为102条

 

然后分析一下reader,上面的图是普通的reader,下面的图是shuffle的reader

那么shuffle发生了什么呢,这里设置的buf_size为5.

打印前20条数据,可以看到每5个进行一次shuffle。

然后是batch。

batch_size设置为2,那么没两条数据组成一起,然后按照生成器来理解就明白了。

 

3
回复
goJhou
#7 回复于2019-01
第一个问题,你的问题中就包含有一个问题;首先分析一下数据: [图片] [图片] 数据是506确实没错,但是分为训练集和测试集,所以 [图片] 训练集数据为404条,测试集数据为102条   然后分析一下reader,上面的图是普通的reader,下面的图是shuffle的reader [图片] 那么shuffle发生了什么呢,这里设置的buf_size为5. [图片] 打印前20条数据,可以看到每5个进行一次shuffle。 然后是batch。 [图片] batch_size设置为2,那么没两条数据组成一起,然后按照生成器来理解就明白了。  
展开

给力,喜欢你的可视化的回答。我本来也想着打印出来看的,结果只给了一个内存地址。。python没用过,还需要时间学习

0
回复
busyboxs
#8 回复于2019-01

问题2:

图片信息的链接:http://paddlepaddle.org/documentation/docs/zh/1.2/api_cn/fluid_cn.html#paddle.fluid.Program

 

0
回复
goJhou
#9 回复于2019-01
问题2: 图片信息的链接:http://paddlepaddle.org/documentation/docs/zh/1.2/api_cn/fluid_cn.html#paddle.fluid.Program   [图片]
展开

嗯嗯,这个楼上说了,理解了~

0
回复
busyboxs
#10 回复于2019-01

问题3:

首先你在添加下面代码后,

sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
main_program中会添加一个op和一些var,

可以通过下面代码来查看或者直接打印main_program

for op in main_program.current_block().ops:
    if op.type == 'sgd':
        print(op)

然后executer在执行时,会执行program中的每一个op

0
回复
busyboxs
#11 回复于2019-01

问题5:

core是封装的,不是python写的,当然找不到啦,可以用下面代码来查看

print(paddle.fluid.core.__file__)
print(paddle.fluid.core.Scope.__doc__)
0
回复
goJhou
#12 回复于2019-01
busyboxs #11
问题5: core是封装的,不是python写的,当然找不到啦,可以用下面代码来查看 [代码]

core应该是fluid的吧。文档里没有说core这个库

0
回复
busyboxs
#13 回复于2019-01
goJhou #12
core应该是fluid的吧。文档里没有说core这个库

是fluid的,但是core的核心代码是用C++写的,在源码中是找不到core的,只有编译之后才会在lib/python2.7/site-packages/paddle/fluid/目录下生成一个core.so文件,就像opencv的python库cv2.so一样。

但是不知道为什么core下有些类和fluid的API中的是一样的,比如

fluid.CPUPlace()
fluid.core.CPUPlace()
0
回复
goJhou
#14 回复于2019-01
busyboxs #13
是fluid的,但是core的核心代码是用C++写的,在源码中是找不到core的,只有编译之后才会在lib/python2.7/site-packages/paddle/fluid/目录下生成一个core.so文件,就像opencv的python库cv2.so一样。 但是不知道为什么core下有些类和fluid的API中的是一样的,比如 [代码]
展开

吼吼 了解了

0
回复
于祥
#15 回复于2019-01
busyboxs #10
问题3: 首先你在添加下面代码后, sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) main_program中会添加一个op和一些var, 可以通过下面代码来查看或者直接打印main_program [代码] 然后executer在执行时,会执行program中的每一个op
展开

这种方式有点像动态图,那paddlepaddle是静态图还是动态图?

0
回复
busyboxs
#16 回复于2019-01
于祥 #15
这种方式有点像动态图,那paddlepaddle是静态图还是动态图?

Fluid好像是动态图

0
回复
goJhou
#17 回复于2019-01
busyboxs #16
Fluid好像是动态图

??什么动态图静态图

0
回复
busyboxs
#18 回复于2019-01

动态图vs静态图(https://zhuanlan.zhihu.com/p/49815772)

这篇文章(https://www.jianshu.com/p/2946f75e3145)说paddlepaddle是动态图。

我的理解就是静态图像tensorflow那样得先建图,然后再传数据执行图,动态图像pytorch那样可以添加一个op之后立即执行,而不用等建完图再执行。

0
回复
w
worddict
#19 回复于2019-01
goJhou #17
??什么动态图静态图

就是深度学习的图结构是否能改

0
回复
w
worddict
#20 回复于2019-01
goJhou #17
??什么动态图静态图

tensorflow是静态的不过现在也支持动态了,Pytorch是动态的。

0
回复
A
AIStudio786322
#21 回复于2019-01

有空学习研究下

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户