【百度技术学院机器学习训练营第二期】-实验作业
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%, 所下载的图片跟训练的图片也有些差别,比如背景更加复杂,猫的种类也不一样。