深度学习总结(2016.9--2016.10)

2024-03-14 15:18

本文主要是介绍深度学习总结(2016.9--2016.10),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原本的打算是参加上海Bot大赛,在比赛中学习一下相关知识,就是想入门而已。开学半个月一直没找到状态,只是上上课。后来在师兄的帮助下,开始逐渐着手比赛的事情,虽然最终没有赶上在比赛截至前提交一版测试。但学了不少,不亏!

大致记录一下这一个月做的事情:

keras篇

  • win10下先配置keras,看keras文档,用theano后端跑了mnsit数据集,Dogs and Cats 数据集
  • 熟悉keras后,搭VGG16网络,加载全连接层之前的参数,自带函数无法做到
  • 加载部分参数,花了很久的时间才搞定,最终,强行一层一层的加载,全链接层用[-0.1,0.1]随机数,过程中学习了.h5文件的写入和读取
  • 重载参数参数后用数据集训练模型,但acc数值一直和瞎猜的一样,三类的话,acc就是0.33,同时loss在一个epoch后,数值上升,并且保持不变!!!一直都不变!!!(过了一个月,发现是lr太高了,把lr调低模型就开始收敛了)找了很久没有找到原因,一方面是知识匮乏,一方面keras封装的太高层了,完全看不到实现细节,最终放弃keras,转向了caffe。

caffe篇

  • win10下一晚上配好了caffe的cpu版本和gpu版本,感觉比keras好配置多了。查了资料学习如何使用,还是mnist入手,结果全是命令行一脸懵逼,好在搞清楚后确实方便很多,一行代码都没写,就是转数据成lmdb,设置各种路径,速度caffe确实比theano快,只不过命令行显示信息不如keras好看
  • 会用caffe后,改VGG16模型,重载参数,最后一层全连接层(fc3层)随机初始化参数,fc1和fc2层重载参数并小lr更新,fc3层大lr更新,一切顺利,训练了6个epoch后top1命中0.8,top5命中0.95
  • 想办法提高acc,之后就做了很多实验,如下:
  • 师兄说试试增加数据量,全连接层参数全部随机初始化,只训练最后三层。
  • 增加数据量方法:先保持长宽比调整原图片最短边为256,用边长224的正方形对图片进行crop,四个角+正中间,再左右反转,总共10张(原本还有旋转等,但一算扩大了134倍,有4T数据,放不下,就先扩大10倍)
  • train_set有12W张图片,大小12G,扩充数据花了4个小时,扩充后大小25G,再转成lmdb格式,用时10小时,大小260G。
  • 最后3层全连接层随机初始化参数,用260G数据训练30个epoch后准确率acc : 0.755080465171,比之前的还差…………

  • 就开始找原因,先后做了很多实验(以下实验结果所用模型为120W数据训练最后三层fc层,30epoch所得的模型):

    • 实验1:从train集合中抽出100张进行预测,统计acc,score=0.96
      这里写图片描述

    • 实验2:测试时,将测试图片直接压缩到224*224进行测试,统计acc=0.797251262775(这种方法acc比实验3的acc高)

    • 实验3:测试时,将每张测试图片保持长宽比调整到最短边为256,对四个角+中心用224*224大小的正方形进行crop,用crop出来的5个图片分别进行预测,将5个小图片预测出来的置信度对应相加再除以5(保证总的置信度为1),取置信度最高的类别为预测出来的类别,统计acc=0.755080465171

    • 实验4:结合实验2和实验3,将实验2和3预测出的置信度对应相加,平均,以计算出来的置信度为最终置信度,取最高为预测类别,统计acc=0.814049101374(这种方法准确率最高)

    • 实验5:做一个12*12的表格,行数表示真实的图片类别,列表示预测的类别,统计每种情况的图片数量(贴一个120W张图片30个epoch模型的结果)

      predict_pic_labels_32_use_mix_30_epoch_probability_12
      -calculate score test score:0.843392458593 pics:8513  time: 6.904585 s
      top 1 count_num: 6930 sum_num: 8513 acc : 0.814049101374
      test   table is :
      [ 989    3    0    0   15    1   16    4    3    4    1   10]
      [  23  476    7    4   12    3   32   63    7   13    3   38]
      [   3    5  605    3    3   21   12    1   63   96    7   10]
      [  13   13   13  632   17   66   23    7    3   12   15   22]
      [  15    1    2   12  886   34   30    6   18   22    7   11]
      [  13    5   10   17   20  341   22    3    7   29   17   11]
      [  10    6    2    6   21    3 1096    8    5    0    2    7]
      [  15   55    3    3    4    9   19  284    7   10    2   13]
      [  16    0   20    0   11    3   25    3  846   18    3    7]
      [  16    0   17    0    9    6    8    3    5   91    3   10]
      [   0    3    1    7    7   29   11    1    9   35  449    5]
      [   6   14    7   11    3    8   10    4    4    8    4  236]
      
    • 实验6:将test集合中错误分类的图片按类别输出,观察被分错的图片都有神马特点(发现大部分是动画图片)

      test_wrong_pic_6(cat)real_animaltoy_model _animalcartoon_animal
      sum_num=38813616236
      percent36%4%60%
    • 实验7:随机从train集合和test集合中抽出500张图片,分别人眼统计真实动物图片数量、玩具模型动物图片数量、动画动物图片数量
      train集合12W张图片,结果:

      train_set_12Wreal_animaltoy_model _animalcartoon_animal
      train_set_500_149802
      train_set_500_249604
      train_set_500_349316
      percent99.13%0.07%0.8%

      test集合8513张图片,结果:

      test_set_8513real_animaltoy_model _animalcartoon_animal
      test_set_500_14191071
      test_set_500_24961268
      percent84%2%14%
    • 实验8:从test集合中分别拿100张真实动物图片、玩具模型动物图和动画动物图片,进行测试统计acc

      test_set_100real_animaltoy_model _animalcartoon_animal
      acc84%52%35%
    • 结论:综合实验6、实验7和实验8,acc不高的主要原因就是训练集中卡通图片几乎没有,测试集中出现了许多卡通图片。次要原因是细粒度分类效果不好,实验1的结果就可以看出。
  • 接下来的工作就是两个方向,一个细粒度分类,一个domain transfer,师兄讲先看看domain transfer方面的论文吧

这篇关于深度学习总结(2016.9--2016.10)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808825

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss