首页 版块 访问AI主站 注册 发帖
zyxxxxyyfusb
20
积分 积分商城
11
获赞
【百度技术学院机器学习训练营第二期】-实验作业
Ta的回复 :01班-郑杨 1、网络结构:计算每层网络结构和输入输出尺寸和参数个数。不加BN?更深?每层的尺寸变化?更多结构? 1)输入层:imag 输出尺寸:(-1,3,32,32),-1是占位符,用于处理动态的samlpe数量,(3,32,32)是每个sample的size,3表示输入图像的通道数是3,32分别是图片的weight size和hight size。 2)第一个卷积池化层:conv_pool_1 网络结构:在卷积阶段,filter采用size是5*5,计算的时候跟图片的w(weight size)和h(hight size)对应;filter数量20,表示采用了20个通道;在池化阶段,池化核size是2*2,同样在计算的时候跟图片的w(weight size)和h(hight size)对应;池化步长为2,表示每个池化操作像w和h方向分别移动2个单位;最后激活函数采用输入relu。 输入尺寸:(128,3,32,32),128表示sample数(在BATCH_SIZE中设置),(3,32,32)是每个sample的size。 输出尺寸:(128,20,14,14) 参数个数:20 * 3 * 5 *5 3)第二个卷积池化层: 网络结构:在卷积阶段,filter采用size是5*5,计算的时候跟图片的w(weight size)和h(hight size)对应;filter数量50,表示采用了50个通道;在池化阶段,池化核size是2*2,同样在计算的时候跟图片的w(weight size)和h(hight size)对应;池化步长为2,表示每个池化操作像w和h方向分别移动2个单位;最后激活函数采用输入relu。 输入尺寸:(128,20,14,14),含义同第一层。 输出尺寸:(128,50,5,5) 参数个数:50 * 20 * 5 *5 4)第三个卷积池化层: 网络结构:同第二层。 输入尺寸:(128,50,5,5),含义同第二层 输出尺寸:(128,50,1,1) 参数个数:50 * 50 * 5 *5 4)全连接输出层: 网络结果:全链接网络 输入尺寸:(128,50,1,1),含义同第三层 输出尺寸:(128,10) 参数个数:50 * 10 2、尝试不同的Loss函数和优化算法(SGD、Momentum、Adagrad、Adam),观察效果的变化,最好的选择是什么?为什么? 1)不同优化算法在学习率设置一样(0.001)的情况下: SGD:loss收敛到1.2-1.5,acc到0.5 Moment:loss收敛到1.2-1.5,acc到0.5 Adagrad:loss收敛到1.4-1.5,acc到0.5 Adam:loss收敛到1.2-1.3,acc到0.5+ 在猫狗分类实验中,Adam效果最好。Adam中和了其他几种优化算法的优点,在训练过程中,每个参数有不同的学习率和Momentum,提升了模型训练的稳定性。 不同的场景下(学习任务、数据分布等)可能适应不同优化算法,在工程中选择哪种优化算法,可以经过调参进行实验。 2)不同的loss函数:分类问题一般使用cross_entropy 3、尝试不同的样本数量:随着每个类别样本数量由少变多,模型准确率变化的曲线是怎样的?每个类别至少有多少张图片可支撑一个准确率尚可的模型? 使用图像分类模型识别世界的万事万物是否可行?(自己编写数据读取程序,而不用默认函数;先完成同学可以在班级群内推送代码,供同学们参考) 1) 随着每个类别样本数量由少变多,模型准确率一般会更高。 每个类别至少有多少张图片可支撑一个准确率尚可的模型:数据量、数据质量、数据的分布、对真实场景的模拟程度等都是影响模型准确率的重要因素。对于比较简单的场景,比如图片中已经有比较清楚的动物脸部,所需数据量不用太大就能达到较好的效果;对应复杂的场景,比如图片中融入了大量的干扰信息,所需数据则需要较多。 2) 简单的读取自定义的数据的示例程序:   def data_generator(image_files_list, batch_size, shuffle=True):     """     数据生成器,生成batch数据     image_files_list:列表,每个元素包含图片文本的地址以及图片的类型     batch_size:batch大小     shuffle:是否shuffle,默认True     """     def reader():         if shuffle:             np.random.shuffle(image_files_list)         batch_out = []         for item in image_files_list:             image_file_path = item[0]  #图片所在地址             image_label = item[1]  #图片类别                      image = load_images(image_file_path)  #调用load_images,从image_file_path中加载图片             batch_out.append([image, image_label])             if len(batch_out) == batch_size:                 yield batch_out                 batch_out = []     return reader #训练数据示例 train_image_files_list = [     ["/home/aistudio/Cat1.jpg", 0],     ["/home/aistudio/Cat2.jpg", 0],     ["/home/aistudio/dog1.jpg", 1],     ["/home/aistudio/dog2.jpg", 1],     ["/home/aistudio/dog3.jpg", 1],     ["/home/aistudio/car.jpeg", 2] ] #用于训练的数据提供器 train_reader = data_generator(train_image_files_list, BATCH_SIZE, shuffle=True) #测试数据示例 test_image_files_list = [     ["/home/aistudio/Cat3.jpg", 0],     ["/home/aistudio/keji.jpeg", 1] ] #用于测试的数据提供器 test_reader = data_generator(test_image_files_list, BATCH_SIZE, shuffle=False) 4、使用模型实践:拍一些身边宠物狗的照片(或网上找),处理成32*32尺寸后试试模型效果,准或不准的原因是什么? 具有明显特征的图片,识别准确率较高,但是如果整体特征有一定的模糊度,准确率就下降了。 比如大丹犬,与普通dog相比,它的体型高大,更接近horse,再加上人来进行干扰,此时很容易误识别为horse了。可以在训练集中增加此类样本来提高识别准确率,也需要设计更好的网络来捕捉深层特征。
65
切换版块
智能客服