paddlepaddle百度飞桨学习心得

这是第二次参加百度飞桨的课程了,依然没有好好学习。。都是踩着“及格线”而已,太不争气了,嗯,写个小小的心得
首先附上飞桨的api链接
还有详细的安装模块讲解,简单案例,经典案例,进阶内容等等

然后是项目里自己最近尝试修改过的部分
1.数据打乱
老师提供的案例是先得到训练集数据的索引,然后将索引打乱,从而达到打乱训练集数据的目的。打乱训练集数据的原因是:网络对最近得到的数据的印象较深,除非特殊任务本身对日期等有限制,都会事先打乱训练集,增加数据的随机性,使网络训练效果更好(泛化能力,不打乱,如果最后的一个batch里的数据有较相似的特征,网络可能比较偏)
此处是通过索引来乱序的代码:
事先得到数据集train_set,包含图片和标签:

imgs, labels = train_set[0], train_set[1]
#获得数据集长度
imgs_length = len(imgs)
#定义数据集每个数据的序号,根据序号读取数据
index_list = list(range(imgs_length))
#读入数据时用到的批次大小
BATCHSIZE = 100

#随机打乱训练数据的索引序号
random.shuffle(index_list)

或者可以直接用shuffle打乱数据:

np.random.shuffle(training_data)

我当时交作业好像用了其他的,找不到这两种方法写哪个课件里了
作业是这样写的:

#乱序
train_reader = fluid.io.shuffle(train_reader, 8)

train_reader是读取的训练数据集,buffer_size为8,用的是飞桨的api

2.数据归一化问题
一开始的案例是房价预测,用的是全连接层来解决,其中一个步骤是,将输入数据归一化,(大概)是有平移偏移的0-1分布,然后我总记得有个激活函数来着,里面有一个sigmoid,就一直以为激活函数不仅是有非线性功能,还提供网络某一层输出的归一化的作用
所以当时听课的时候对于“只有对输入数据进行归一化”,有一点疑惑,
后来想想relu并不是只介于0-1的,所以激活函数主要还是提供非线性功能吧,不知道网络具体怎么计算,才能得出,全连接层之后不需要跟一个归一化的过程的,
现在想一想,我当时疑惑的应该是输入归一化,网络输出后跟标签做计算,loss会不会太大

先写两点吧~

猜你喜欢

转载自blog.csdn.net/qq_43523725/article/details/108288456