首页 版块 访问AI主站 注册 发帖
thunder95
4483
积分 积分商城
4
获赞
【百度技术学院机器学习训练营第二期】-实验作业
Ta的回复 :test
65
【百度技术学院机器学习训练营第二期】-实验作业
Ta的回复 :训练营2班+hulei 第一题: 计算原网络的输入输出, 如下:
65
【百度技术学院机器学习训练营第二期】-实验作业
Ta的回复 :batch_size:128 输入尺寸:(128, 3, 32, 32) 第一层参数个数: 20x(5x5x3 + 1), 卷积输出: (32-5+2x0)/1+1=28, 池化输出:(28-2+2x0)/2+1=14,尺寸:(128, 20, 14, 14) 第二层参数个数: 50x(5x5x20 + 1), 卷积输出: (14-5+2x0)/1+1=10, 池化输出:(10-2+2x0)/2+1=5, 尺寸:(128, 50, 5, 5) 第三层参数个数: 50x(5x5x50 + 1), 卷积输出: (5-5+2x0)/1+1=1, 池化输出:(1-2+2x0)/2+1=1, 尺寸: (128,50,1,1) 全连接输出, 参数个数:50x(10+1), 输出尺寸: (128,10) 验证计算,以第一层为例: 直接print某个层的shape查看,或者用fluid.layers.Print可以观察网络结构,包括layer的shape,dtype和具体的data数据 近似计算w和b的比例,查看模型文件 conv2d_0.b_0 : 104b; conv2d_0.w_0: 5.9KB
65
【百度技术学院机器学习训练营第二期】-实验作业
Ta的回复 :去掉BN层: 不影响输入或输出尺寸变化,也不增加额外的参数数量,实验效果无明显变化 加更深的网络,中间加两层卷积不池化: 在第一层和第二层,以及第二层和第三层中间分别加上filter_size=35, stride=1,filter_size=3的卷积层(没有池 化层下采样),尺寸变化如下: 第一层:(128, 20, 14, 14), 第一加层: (14-3+2)/1+1, 仍旧是(128, 20, 14, 14), 第二层:(128, 50, 5, 5), 第二加层: (5-3+2)/1+1, 仍旧是(128, 50, 5, 5) 第三层和最终输出军保持不变。 同等条件下训练效果:准确率提升至67%, 训练收敛更稳定 修改网络结构,按李老师视频里的建议:,3x3卷积+bn+relu+pool, 增加两个全连接层,输入尺寸不变: (128, 3, 32, 32) 第一层卷积池化(num_filters=64, filter_size=3, padding=1, pool_size=2, pool_stride=2): (128, 64, 16, 16) 第二层卷积池化(num_filters=128, filter_size=3, padding=1, pool_size=2, pool_stride=2):(128, 128, 8, 8) 第三层卷积池化(num_filters=256, filter_size=3, padding=1, pool_size=2, pool_stride=2): (128, 256, 4, 4) 全连接1(size=512):(128, 512) 全连接2(size=512):(128, 512) 全连接3+softmax(size=10): (128, 10) 训练效果: 收敛较快,后期也比较稳定,效果显著提升至79.4% 代码如下: [代码] 第2题: 不同的Loss函数, 均方差误差损失函数(需要修改最后一层全连接,注释掉acc评估): 发现训练集收敛效果较好收敛也较平稳,但是验证集一直来 回震荡不下降,且cost相对训练集非常高(30倍以上)。最终的预测结果也非常差,测试的几张图片全部预测错误。经分析,交叉熵倾向于对正确分类的学习,而均方差对于正确和错误的分类同等对待,这样达不到分类学习的目的。 prediction = fluid.layers.fc(input=conv_pool_3, size=1, act=None) cost = fluid.layers.square_error_cost(input=predict, label=label) 不同的优化算法(SGD、Momentum、Adagrad、Adam):将4个优化器的曲线打印观察,目测是momentum效果最好,但是没做进一步的分析,比如学习率和epochs没做更多调整, 跟其他同学的实验结果有出入,一定程度上跟训练的随机性有关吧。同等条件下,sgd和adagrad震荡剧烈,收敛缓慢,且cost和acc效果都不太好,而adam和momentum相比曲线震荡缓和,cost收敛下降较快,最终的效果也较好。 optimizer =fluid.optimizer.Adam(learning_rate=0.001) optimizer = fluid.optimizer.SGD(learning_rate=0.001) optimizer = fluid.optimizer.MomentumOptimizer(learning_rate=0.001, momentum=0.9) optimizer = fluid.optimizer.Adagrad(learning_rate=0.001) [图片] 第3题: 尝试不同的样本数量:按照cifar给出的data_batch, 分别尝试样本量在10000, 20000, 30000, 40000, 5000的测试集效果,发现数据量越大训练时间越长,平均ACC越高, 样本量越低过拟合越严重,测试集acc低但是训练集acc高; 样本数量在40000时已经能达到全样本量的训练和测试效果。使用图像分类模型识别世界的万事万物个人认为不可行,类别过多,数据量太大训练难度太大,图像分类最好是解决特定的问题效果会更好。我没有重写reader,只是修改原来的reader()函数: [代码] [图片] 第4题: 在百度里下载了宠物猫的图片并resize到32x32大小, 经测试训练的模型效果不太好,应该是模型本身就欠拟合,在验证集上准确率才65%, 所下载的图片跟训练的图片也有些差别,比如背景更加复杂,猫的种类也不一样。  
65
【百度技术学院机器学习训练营第二期】-实验作业
Ta的回复 :第5题: 本实验挑战了VGG模型,按照网络结构编写代码如下: [代码] 需要修改reader_creator函数,将图片大小需要缩放至224*224,代码如下: [代码] 优化器使用了momentum和学习率衰减,代码如下: [代码] vgg16相比之前的实验网络更加复杂,输入图片也更大,所以训练非常慢,原BATCH_SIZE太大,会导致aistudio自动重启,所以改到了16, 但是训练效果显著提升,在第三个epoch时能达到60%+, 最终的训练和测试效果待训练完成后给出。最终acc提升至63%就停止不前了,训练的epoch是数量不够或者学习率还有待进一步调整。  
65
切换版块
智能客服