百度深度学习集训营已经正式开营,每个阶段的作业都将有各自的奖励,欢迎大家学习~
PS:如遇帖子过期、审核不通过的情况,请先复制内容保存在word文档,然后根据提示,完成个人实名验证,刷新后重新粘贴复制的内容,即可提交~
欢迎大家报名参加~
1月9日作业:
作业9-1:在第二章中学习过如何设置学习率衰减,这里建议使用分段衰减的方式,衰减系数为0.1, 根据ResNet目前的训练情况,应该在训练到多少步的时候设置衰减合适?请设置好学习率衰减方式,在眼疾识别数据集iChallenge-PM上重新训练ResNet模型。
作业9-1奖励:在作业中随机各抽取5名同学送出飞桨本+数据线+飞桨贴纸
回复帖子形式: 作业9-1:XXX
抽奖作业截止时间:2020年1月13日中午12点之前
作业9-2奖励:在作业中随机各抽取5名同学送出飞桨本+数据线+飞桨贴纸
回复帖子形式: 作业9-2:XXX
抽奖作业截止时间:2020年1月13日中午12点之前
1月7日作业:
作业8:如果将LeNet模型中的中间层的激活函数Sigmoid换成ReLU,在眼底筛查数据集上将会得到什么样的结果?Loss是否能收敛,ReLU和Sigmoid之间的区别是引起结果不同的原因吗?请发表你的观点
作业8奖励:在作业中随机各抽取5名同学送出飞桨本+数据线+飞桨贴纸
回复帖子形式: 作业8:XXX
获奖同学:#820 thunder95、#819 你还说不想我吗、 #818 百度用户#0762194095、#817 呵赫 he、#816 星光1dl
1月2日作业
作业7-1 计算卷积中一共有多少次乘法和加法操作
输入数据形状是[10, 3, 224, 224],卷积核kh = kw = 3,输出通道数为64,步幅stride=1,填充ph = pw =1
完成这样一个卷积,一共需要做多少次乘法和加法操作?
提示:先看输出一个像素点需要做多少次乘法和加法操作,然后再计算总共需要的操作次数
提交方式:请回复乘法和加法操作的次数,例如:乘法1000,加法1000
作业7-1奖励:抽取5人赢得飞桨定制本+数据线,截止时间2020年1月6日中午12点之前
回复帖子形式: 作业7-1:XXX
作业7-2奖励:从正确答案中抽取5人获得飞桨定制本+50元京东卡,截止时间2020年1月6日中午12点之前
12月31日作业
作业6-1:
1.将普通神经网络模型的每层输出打印,观察内容
2.将分类准确率的指标 用PLT库画图表示
3.通过分类准确率,判断以采用不同损失函数训练模型的效果优劣
4.作图比较:随着训练进行,模型在训练集和测试集上的Loss曲线
5.调节正则化权重,观察4的作图曲线的变化,并分析原因
作业6-1奖励:抽取5人赢得飞桨定制本+数据线 ,回复帖子形式: 作业6-1:XXX
作业6-2:
正确运行AI Studio《百度架构师手把手教深度学习》课程里面的作业3 的极简版代码,分析训练过程中可能出现的问题或值得优化的地方,通过以下几点优化:
(1)样本:数据增强的方法
(2)假设:改进网络模型
(2)损失:尝试各种Loss
(2)优化:尝试各种优化器和学习率
目标:尽可能使模型在mnist测试集上的分类准确率最高
提交实现最高分类准确率的代码和模型,我们筛选最优结果前10名进行评奖
作业6-2奖励:飞桨定制本+50元京东卡
12月25日作业
12月23日作业
作业4-1:在AI studio上运行作业2,用深度学习完成房价预测模型
作业4-1奖励:飞桨定制本+ 《深度学习导论与应用实践》教材,选取第2、3、23、123、223、323…名同学送出奖品
作业4-2:回复下面问题,将答案回复帖子下方:
通过Python、深度学习框架,不同方法写房价预测,Python编写的模型 和 基于飞桨编写的模型在哪些方面存在异同?例如程序结构,编写难易度,模型的预测效果,训练的耗时等等?
回复帖子形式: 作业4-2:XXX
作业4-2奖励:在12月27日(本周五)中午12点前提交的作业中,我们选出最优前五名,送出百度定制数据线+《深度学习导论与应用实践》教材
12月17日作业
完成下面两个问题,并将答案回复在帖子下面,回帖形式:作业3-1(1)XX(2)XX
作业奖励:在2019年12月20日中午12点之前提交,随机抽取5名同学进行点评,礼品是本+数据线
12月12日作业
获奖者:第12名:飞天雄者
12月10日作业
作业1-1:在AI Studio平台上https://aistudio.baidu.com/aistudio/education/group/info/888 跑通房价预测案例
作业1-1奖励:最先完成作业的前3名,以及第6名、66名、166名、266名、366名、466名、566名、666名的同学均可获得飞桨定制大礼包:飞桨帽子、飞桨数据线 、飞桨定制logo笔
作业1-1的获奖者如图:
作业1-2:完成下面两个问题,并将答案发布在帖子下面
①类比牛顿第二定律的案例,在你的工作和生活中还有哪些问题可以用监督学习的框架来解决?假设和参数是什么?优化目标是什么?
②为什么说AI工程师有发展前景?怎样从经济学(市场供需)的角度做出解读?
作业1-2奖励:回复帖子且点赞top5,获得《深度学习导论与应用实践》教材+飞桨定制本
点赞Top5获奖者:1.飞天雄者 2.God_s_apple 3.177*******62 4.学痞龙 5.故乡237、qq526557820
作业截止时间2020年1月10日,再此之前完成,才有资格参加最终Mac大奖评选
报名流程:
1.加入QQ群:726887660,班主任会在QQ群里进行学习资料、答疑、奖品等活动
2.点此链接,加入课程报名并实践:https://aistudio.baidu.com/aistudio/course/introduce/888
温馨提示:课程的录播会在3个工作日内上传到AI studio《百度架构师手把手教深度学习》课程上
作业9-1
首先使用固定学习率查看效果
opt = fluid.optimizer.Momentum(learning_rate=0.001, momentum=0.9)
得到的loss图像为:
看图像发现,训练过程中第一次是在第50次时有较大波动,因此尝试在50次时缩减学习率。
再次训练发现loss值的变化在50次之后逐渐变小
作业9-2:
对原来的实例代码中做修改:
训练过程的loss计算更改
第四个模块的代码修改,由于第四个模块有两个输出,其中还要加上几个全连接层
对应的前向计算的过程也要修改
最后的训练结果,模型训练变慢:
作业9-1:在第二章中学习过如何设置学习率衰减,这里建议使用分段衰减的方式,衰减系数为0.1, 根据ResNet目前的训练情况,应该在训练到多少步的时候设置衰减合适?请设置好学习率衰减方式,在眼疾识别数据集iChallenge-PM上重新训练ResNet模型
学习率衰减能够让准确率和loss进一步改进
作业7-1:
乘法:867041280 加法:867041280
作业7-2:
作业7-1:
乘法:(224+2-3+1) * (224+2-3+1) * 10 * 3 *64 * 9 = 867041280
加法:(224+2-3+1) * (224+2-3+1) * 10 * 3 * 64 * 9 + 224 * 224 * 10 * 64 *3(这一步是RGB三通道和各个卷积核卷积操作后得到的三通道再融合时需要的加法次数) = 963379200
作业7-2:
作业3-1(1) 使用numpy计算tanh激活函数
(2)统计随机生成矩阵中有多少个元素大于0
作业9-1:
运行后观察loss发现在80的时候波动很大,设置为学习率变化阈值
调整以后的loss趋于稳定
9-2:修改网络
作业9-1:在第二章中学习过如何设置学习率衰减,这里建议使用分段衰减的方式,衰减系数为0.1, 根据ResNet目前的训练情况,应该在训练到多少步的时候设置衰减合适?请设置好学习率衰减方式,在眼疾识别数据集iChallenge-PM上重新训练ResNet模型。
过程1:开始试验发现loss波动太大,动态调整学习率效果不好。分析是batch_size过小导致loss波动大。
过程2:将batch_size从10调整为40后,波动率下降,但仍然存在(并突出了)一个现象:训练集loss的波动竟然比验证集更大。
过程3:分析是不是程序出错了。试验采用adam优化器自动调整学习率发现,训练集波动和数值都小于验证集。
过程4:另一思路分析是动量设置过大,导致加剧了loss在最优解附近的震荡。
过程5:网上查资料得知有种说法,0.9的momentum就能使模型收敛比SDG块10倍。试验momentum动量参数从0.9调整到0.5发现,果然训练集的波动率受到了有效抑制。
过程6:试验将动量从0.9降低至0.5后,Momentum优化器学习率在100次迭代后decay。结果显示,其不但降低了loss和accuracy的波动,还提高了accuracy。
结论1:batch_size太小会导致loss的波动会比较大,当batch_size太小时,调节学习率的作用有限。10这么小的batch_size,后面用adam这种自动衰减学习率的优化方法时效果也有限。
结论2:使用Momentum优化器在loss波动较大的情况下,动量不能设置太大。开始试验时,由于波动量设置过大竟然导致训练组比验证组loss波动还厉害。
结论3:使用Momentum优化器时,decay学习率的同时也decay动量效果更好。其他优化器同理。
结论4:即使小batch_size会导致loss波动增大,但能够加快训练速度,尤其是在硬件资源有限的情况下。所以,资源有限时,小batch_size还是性价比更高的,但对学习率优化的要求也更高,不熟悉最好用adam。
作业9-2:补全GoogLeNet的三个分类器
googLeNet有两处需要修改:
1.前向计算forward()方法要返回Inception4a,Inception4d和Inception5b三个块输出的softmax分类值,本例中用sigmoid的二分类特性代替。返回前要加上各个inception块算分类值需要的平均池化、全连接和dropout层。
2.训练方法train()中将forward()返回的三个值分别求得交叉商损失,再按照2:2:6的比重求得最终预测值与loss值。
p1, p2, p3 = model.forward(x)
p1 = fluid.layers.sigmoid(p1)
p2 = fluid.layers.sigmoid(p2)
p3 = fluid.layers.sigmoid(p3)
predict = p1 * 0.2 + p2 * 0.2 + p3 * 0.6
l1 = fluid.layers.sigmoid_cross_entropy_with_logits(p1, label)
l2 = fluid.layers.sigmoid_cross_entropy_with_logits(p2, label)
l3 = fluid.layers.sigmoid_cross_entropy_with_logits(p2, label)
loss = l1 * 0.2 + l2 * 0.2 + l3 * 0.6
作业9-2:
以下3个地方需要修改:
结果:
start training ...
epoch: 0, batch_id: 0, loss is: [0.6741834]
epoch: 0, batch_id: 10, loss is: [0.6695887]
[validation] accuracy/loss: 0.4725000262260437/0.675366222858429
epoch: 1, batch_id: 0, loss is: [0.570052]
epoch: 1, batch_id: 10, loss is: [0.6330353]
[validation] accuracy/loss: 0.9100000262260437/0.6231394410133362
epoch: 2, batch_id: 0, loss is: [0.6673101]
epoch: 2, batch_id: 10, loss is: [0.72236514]
[validation] accuracy/loss: 0.8574999570846558/0.5590617656707764
epoch: 3, batch_id: 0, loss is: [0.63359785]
epoch: 3, batch_id: 10, loss is: [0.5377601]
[validation] accuracy/loss: 0.6324999928474426/0.5132871866226196
epoch: 4, batch_id: 0, loss is: [0.6085617]
epoch: 4, batch_id: 10, loss is: [0.5289607]
[validation] accuracy/loss: 0.9149999618530273/0.32958561182022095
epoch: 5, batch_id: 0, loss is: [0.52167547]
epoch: 5, batch_id: 10, loss is: [0.5545877]
[validation] accuracy/loss: 0.8299999237060547/0.3667006194591522
epoch: 6, batch_id: 0, loss is: [0.4408757]
epoch: 6, batch_id: 10, loss is: [0.3657415]
[validation] accuracy/loss: 0.9550000429153442/0.2204791009426117
epoch: 7, batch_id: 0, loss is: [0.3958261]
epoch: 7, batch_id: 10, loss is: [0.42100492]
[validation] accuracy/loss: 0.9424999952316284/0.21202610433101654
epoch: 8, batch_id: 0, loss is: [0.5467679]
epoch: 8, batch_id: 10, loss is: [0.3406551]
[validation] accuracy/loss: 0.9350000619888306/0.20788440108299255
epoch: 9, batch_id: 0, loss is: [0.4761749]
epoch: 9, batch_id: 10, loss is: [0.56333125]
[validation] accuracy/loss: 0.9675000309944153/0.14981447160243988
您好,能不能传授一下loss 曲线的画法呢?按照老师发布的记事本,我不知道为什么我loss数据总是取不出来,画不出图像
作业7-1
乘法次数867041280, 加法次数 834928640
乘法 N*ic*oc*kw*kh*((H+2ph-kh)/sh +1)*((W+2pw-kw)/sw+1)
如果pad的是0,加法N*oc*ic*(kw*kh-1)*((H+2ph-kh)/sh +1)*((W+2pw-kw)/sw+1)+N*oc*(ic-1)*((H+2ph-kh)/sh +1)*((W+2pw-kw)/sw+1)=834928640
作业4-2:通过Python、深度学习框架,不同方法写房价预测,Python编写的模型 和 基于飞桨编写的模型在哪些方面存在异同?例如程序结构,编写难易度,模型的预测效果,训练的耗时等等?
相同:
1 python编写的模型跟飞桨编写的模型具有深度学习中构建模型的基本步骤,数据预处理 网络结构 模型配置等步骤都是一样的
不同:
1 飞桨的结构更加简洁,清晰,因为损失函数以及数据生成等步骤可以直接通过调用函数实现,不需要实现对底层的实现过程深入了解,而python编写的结构对每一个步骤都详细进行了编写,因此模型更加复杂,结构更加庞大
2 飞桨的编写更加容易,python的编写复杂
3 python编写的模型预测效果没有飞桨编写的模型的预测效果好,python编写的模型在数据处理,损失函数以及优化器等方面都是比较粗糙的,而飞桨中的模型的许多函数经过了优化,能够让模型取得比较好的预测效果
作业5
5-1:从原始数据集中随机抽取100张图片,测试模型的准确率,
做法,从测试数据集中,将所有图片读取出来,然后构造从1-10000张图片中随机抽取一百张进行验证
准确率为21%
作业5-2:了解下对于计算机视觉,有哪些常见的卷积神经网络?
LeNet,1989年,LeCun提出的卷积神经网络的鼻祖,
AlexNet,2012年提出的5卷积层+2 全连接层的卷积神经网络
GoogleNet,2015年提出的深度卷积神经网络中的一个重要的结构,层数推进到了22层,跳出AlexNet的基本结构,提出了inception单元
ResNet,2015年何凯明提出的更深的网络。
作业5-3:在手写数字识别任务上,哪种优化算法的效果最好,多大的学习率最优? 通过loss的下降趋势来判断
我在这里测试了四种优化算法,分别是SGD、Momentum、Adagrad和Adam,每种算法分别设置三种学习率,0.1 、0.01、和0.001,
其中训练参数为 batch-num = 5, batch-num = 100,其中loss下降最快且数值最小的是Adam算法学习率在0.001的时候。
作业3-1(1)使用numpy计算tanh激活函数(请用numpy写出计算程序,并画出tanh函数曲线图,x的取值范围设置为[-10., 10.])
程序:
# x是1维数组,数组大小是从-10. 到10.的实数,每隔0.1取一个点
import numpy as np
import matplotlib.pyplot as plt
#设置图片大小
plt.figure(figsize=(8, 3))
x = np.arange(-10, 10, 0.1)
# 计算 Sigmoid函数
s =(np.exp(x) - np.exp(- x)) / (np.exp(x) + np.exp(- x))
# 设置一个子图窗口,将Sigmoid的函数图像画在左边
f = plt.subplot(111)
# 画出函数曲线
plt.plot(x, s, color='r')
# 添加文字说明
plt.text(-5., 0.9, r'$y=\tanh(x)$', fontsize=13)
# 设置坐标轴格式
currentAxis=plt.gca()
currentAxis.xaxis.set_label_text('x', fontsize=15)
currentAxis.yaxis.set_label_text('y', fontsize=15)
plt.show()
作业:3-2 统计随机生成矩阵中有多少个元素大于0
程序:
import numpy as np
#生成随机数构成的矩阵
p = np.random.randn(10,10)
#在10*10矩阵中筛选出大于0的元素
q = p[p>0]
#输出符合条件的结果
#print(q)
#统计符合条件的个数
print(q.shape)
作业8:如果将LeNet模型中的中间层的激活函数Sigmoid换成ReLU,在眼底筛查数据集上将会得到什么样的结果?Loss是否能收敛,ReLU和Sigmoid之间的区别是引起结果不同的原因吗?请发表你的观点
使用激活函数Sigmoid, Loss难以收敛。原因是多层sigmoid叠加会出现梯度消失。
作业9-1:
使用分段衰减的方式,衰减系数为0.1
作业7-1:
输出一个像素点需要:
9次乘法
8次加法+1次偏置项加法=9次加法
单层数据[224, 224]卷积不填充输出数据[222, 222],输出像素点为222*222
因此:
一次卷积需要的乘法=9*222*222*3*64*10=851,627,520次
一次卷积需要的加法=9*222*222*3*64*10=851,627,520次
作业7-2:
①F=n*μ
通过增加正压力N,求得一个值F,通过组数据可以求得μ。假设是呈线性关系,参数是模型中的变量μ。优化目标是寻找使得数据拟合较好的参数。
②
曾经在听一次讲座时,主讲嘉宾讲未来的职业有两种,制作人工智能的程序员,和使用人工智能完成一定目的的使用者。在机器学习特别是深度学习的出现后,使得人们在解决某些领域的问题时不需要掌握那么多该领域的知识,并对系统的输入数据依据该领域的深厚知识进行精妙的变化和处理,这提高了行业的自动化程度,加快了业务的迭代速度。
因为现在这个阶段的深度学习的概念从2010年左右又变得火热,目前各大高校培养的机器学习方面的人才对于现在市场的需求来说还是相对滞后的,相关从业人员不但需要丰富的工程经验,对业务数据有准确的把握,同时也要能紧跟机器学习当下最前沿的理论并尝试加以应用,这个要求还是比较高的,市场上满足这些要求的人并不算多,整体高素质的机器学习从业者是供少于求。所以说机器学习的前景很好。