2020-01-06 14:18:28 a6333230 阅读数 127
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2372 人正在学习 去看看 执著

二郎本身不是做深度学习的,但是,学术界受深度学习的影响挺大的,严重冲击着传统研究领域,尤其是图像。。。。于是,二郎想看看深度学习是咋回事

二郎做过深度学习科普式讲解,PPT100多页,但是直到现在,二郎还是觉得,一提起深度学习,还是没有概念。

之前一直听师兄和同事在谈,调参,调参,调参,参数好了,结果好了,就可以发论文了。。。找个框架,改改,就能发论文。水论文。。二郎没去做,二郎专心做基础研究

近期,在做一个专利,关于深度学习的,写着写着有所感悟,所以分享给大家

深度学习并不神奇,只是设计了一个方程,这个方程很大,让这个方程可以做到:咱们给一个x,它能输出一个y。整体就是这么一个过程。。。。
为什么会有很难的感觉???
大家都难,然而,学者们大部分是半路出家,一知半解就开始拿别人的代码来跑了。所以,看不懂也没事,会用就行(就像手机,你肯定不会造手机,但是你会用。ps也是,程序肯定不是你编的,会用就行。)
这里还吐槽一下,那些教0基础深度学习的,很多都往数学上钻,这样很容易让很多人无功而返的。。。。。

1.设计网络
大牛设计网络当然是一步一步规划好了,普通研究人员是拿别人设计好的网络过来和别的网络组合一下,跑出好结果,就说自己的研究是好的。(所以,那些能发到顶会的论文,虽然看起来解决了个小问题,但是他们大部分还是对设计网络有贡献,设计了新的网络结构,其他人只是拿现有的过来跑一下。)因此,你可能说看起来网络好难,那么多层,不知咋办………………大家都不知咋办,只是拿来用,觉得好用,改,也是小改,多改一点就可以发论文了。所以,不用纠结,看不懂网络,因为有些网络就是那样设计的,外行人直接看懂,那怎么体现设计人的水平。

2.优化网络
这个可以成为一个行业了,确实需要懂的知识比较多。高明的研究人员会知道哪部分影响哪部分,有计划地修改网络结构和训练方法。普通的研究人员只是看结果,改了哪里,结果好了,哪里就需要改。大部分人是,看网上和其他研究说,改哪里好,就改哪里,然后改好网络了,再想着怎么说明为什么这么改好,说明道理,然后发论文。优化网络(让训练速度更快,结果更好,所需数据量更少)

3.测试集和训练集
其实都是一堆图片(二郎是研究CV的),一部分用来训练网络,一部分用来测试训练后的网络是否好用。

4.训练网络
网络设计好后有很多参数和权重是未知的,需要将数据代入,然后获得未知量,和解方程类似。如何获得的????一般情况下是有图像对,原图和结果图,把原图放入网络,得到处理结果,结果和结果图对比,发现误差,然后调节未知量。经过多次调节,得到最优的未知量组合(其实做不到最优,需要考虑时间成本)

5.基于物理模型的网络??
这个噱头不错,很多专家也说了,这是一个研究方向。让网络自动获得原来需要估计的未知量,例如去雾的DCP算法中,之前需要估计的未知量是深度信息和天空光,现在,直接用网络获得深度信息和天空光,然后将获得的深度信息和天空光代入大气成像模型中,获得复原图像。
那么如何训练呢?
估计深度信息的网络,提前已经有了数据对,原图和深度图;估计天空光的,也是人为标定后(这个可以用多种方法)。

6.损失函数
这个可能大家都摸不着头脑,咋设置,看着数学推理好高级………………
其实核心在于,直接拿来用,是的,大部分人都是直接拿来用。高级点的是自己设计一个,而且能讲清道理,这个,可以发SCI了…………

7.搭环境
很多搞深度学习的上来的工作就是搭环境,因为很多大牛公布的代码需要特定的环境才能跑(这个是因为学者大部分不想看里面详细的代码,不想改代码适应环境,只想拿来用)。环境:需要的tensorflow版本(里面的模块版本也很多,很多都不是版本兼容的,二郎曾经怀疑过,有些代码环境很难搭是因为发布代码的人不太想让你轻易地就能用它)。
还有另一个环境就是服务器,很多代码是用服务器跑的,那个跑的比较快。
服务器是啥???(比较厉害的电脑,其实就是电脑,运行速度很快罢了。)

说了这么多,二郎也吐槽了好多,向真心做科研的大佬们致敬,向只是想发SCI的人们投去xx的目光(OOOOO)。

2018-02-06 18:21:19 oHanTanYanYing 阅读数 1654
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2372 人正在学习 去看看 执著

  自从意识到深度学习是未来之后,自己看了相关的书籍三本,看了吴恩达和李飞飞两位神级人物的课程,配置了caffe,torch,pytorch等等开源架构,也跑了几个开源工程,却始终都感觉似懂非懂,实在是糟心。
  经过了严肃认真的思考后,本人决定从最底层开始,自己写一个架构,进而可以深入了解深度学习的方方面面。
  本篇作为系列文章的开篇总览,目的就是给自己挖个坑,以提醒自己要好好努力。并且也给这一系列文章定出规则,以时时回望。
  因为本人最熟悉的是C++,所以会用C++实现一个架构。另外python作为机器学习的近乎官方语言,在这一系列文章中也会实现一个架构。最后,本人最喜欢pytorch架构,也会用其实现想要做的东西(分成cpu和gpu两个版本)。
  因此,本系列每篇文章将涉及到的内容如下:


  1. 原理的理解(其中有可能大部分都借鉴网上优秀的博客或者书籍中的内容,因而如有雷霆,是本人抄的。但绝非不过脑子的抄,当然也会标明出处)
  2. C++实现
  3. python实现
  4. pytorch的CPU实现
  5. pytorch的GPU实现

  需要说明一下的是本人自行实现的代码(也有可能借鉴别人)书写肯定受限于本人水平,几乎不可能有现成架构的效率和规范,只作为本人练习之用。工程中本人将用成熟的框架进行,这也才有了4,5点。
  如果有看本人之前写的一些博文可能会觉得很多只讲实现没讲原理,那是因为相关内容本人在工程中用到于是就快速实现出来,有些原理本人也不知道。但这一系列本人将力求做到自己透彻理解,并把涉及到的原理认真仔细的整理出来。
  那么预告一下下一篇,深度学习1—最简单的全连接神经网络

2016-11-11 13:34:16 skyinmoon 阅读数 9710
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2372 人正在学习 去看看 执著

     mxnet是一个深度学习的框架,我们可以在上面运行我们所需要的神经网络及各种深度学习的东西。这里总结一下在ubuntu上安装mxnet以及怎么使用我们自己的数据让mxnet跑起来。很遗憾的是我们的电脑gpu还不能用,只能先讲用cpu的。网上有很多关于这类的东西,我也看了很多,但感觉只有总结后才是自己的东西,不然看过之后不久又忘得干干净净。

    (1)基本依赖安装

           sudo apt-get update

           sudo apt-get install -y build-essential git libblas-dev libopencv-dev

    (2)从github下载mxnet

           git clone --recursive https://github.com/dmlc/mxnet

    (3)用python编译(用于在python上开发,import mxnet as mx)

         cd python  (切换到mxnet里的python文件夹)

         python setup.py install

     (4)上面是基本步骤,如果有需要,还要安装numpy,scipy,sklean,matplotlib,opencv,setuptools,用gpu的话,要安装cuda,然后make -j4(4核是-j4,8核是-j8)


       安装好后,mxnet/examples里有很多可以测试的例子,比如运行python train_minst.py.接下来最重要的是用我们自己的数据进行神经网络的训练。有几个步骤,

        (1)先将我们要训练的数据放在不同的文件夹里,每个文件夹代表不同的分类,就是labels

          (2) 生成.lst文本,用于数据的索引

                            python im2rec.py --list  ../histcut6/cut6  ../histcut6  --recursive=true         #--list指生成.lst文件,../histcut6/cut6指生成.lst的位置和前缀名,../histcut6指原始数据的位置。

           (3)生成.rec二进制文件

                            python im2rec.py   ../histcut6/cut6_train ../histcut6

                             (python im2rec.py -h   查看帮助)

           (4)将生成好的文件送入网络进行训练。在mxnet/example/image-classification里,有多个网络模型,inception-bn,alexnet,googlenet,vggnet.跑一个网络,我们需要用到find_mxnet.py   train_model.py    train_imagenet.py     symbol_alexnet.py

              之后,运行train_imagenet.py,并设置命令行参数。

                                  python train_imagenet.py  --network=alexnet   --data-dir=../histcut6  --num-epochs=20 ........

                                  (python train_imagenet.py  -h  查看帮助)

           (5)训练完成后就可以用训练好的模型进行predict,需要用到.params和.json文件,在mxnet/example/cpp/image-classification里有用于分类预测的image-classification-predict.cc,我们需要修改一下里面的.params和.json文件路径,以及图片大小等,然后编译,之后就可以用编译好的文件进行predict



mxnet的初级运用就这样完成了。

2018-05-06 15:42:26 mohuak 阅读数 469
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2372 人正在学习 去看看 执著

深度学习实训周报

1、Grad-CAM(Gradient-weighted Class Activation Mapping)

Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

GAM

这次的任务 主要是跑代码和理解Grad CAM,通过训练和测试猫和狗的图片集,并且对这些图片进行辨别,可以分辨出哪些是猫哪些是狗。
如:
这里写图片描述这里写图片描述
这里写图片描述这里写图片描述

然后跑了一下Grad-CAM的代码,大概如下,然后查看照片,亦和上图一样。

这里写图片描述


还有另外一份关于Grad-CAM的github。

大致模型如下,

跑了代码之后,产生如下结果,
test.jpg
这里写图片描述
result.jpg

这里写图片描述
很清晰地划分出了人所在的部分。

2.对抗攻击和防守(Adversarial Attacks and Defenses)

初步了解

一副图片,经过识别之后,判定为Alps,但是经过一些噪点处理过后,却被判别器判定为Dog而且其精确度极高,这就是对抗攻击的一个简单的例子,同时也是对抗攻击实现的结果。
这里写图片描述

攻击方法(白盒攻击和黑盒攻击)

白盒攻击
攻击者能够获知机器学习所使用的算法,以及算法所使用的参数。攻击者在产生对抗性攻击数据的过程中能够与机器学习的系统有所交互。

黑盒攻击
攻击者并不知道机器学习所使用的算法和参数,但攻击者仍能与机器学习的系统有所交互,比如可以通过传入任意输入观察输出,判断输出。

这里写图片描述

防守方法(黑盒防守和白盒防守)

黑盒攻击防御策略:训练其他的分类器来检测对抗输入。

白盒攻击防御策略:实行对抗训练程序。

黑盒攻击防御策略不仅可以帮助防止过度拟合,让分类器的鲁棒性变强,还可以让你的模型加速收敛。但是根据最近的研究结果,这也不能消除所有对抗攻击带来的问题。而且,增加一个分类器也会大大降低分类效率,实现这两个分类器也要求你具备更多 GANs 的经验,因此这种解决方案都不是最优的。

2018-05-29 11:17:04 weixin_39880579 阅读数 430
  • 深度学习基础教程

    接触数据挖掘的算法多年,近一两年开始用到深度学习的算法.我也是从0开始一点一点学的,在学习的过程中感觉现在的教程不太适合初学者,现有的教程或书,要么是大堆的数学公式,吓跑初学者,要么是大堆的代码淹死初学者,要么是大堆的理论比喻,迷惑初学者,要么是大堆很牛的东西(没有参考文献),打击初学者.我觉得,把数学原理弄明白,再能用代码实现算法,这是主要的,这个课程就是为了帮助初学者实现这个目的.

    2372 人正在学习 去看看 执著

分两部分记录:

一.日志信息

二.程序语言

#############################################################################

一.日志信息

    在TRAIN_DIR路径下会产生四种文件:

        1.checkpoint:文本文件,包含所有model.ckpt-xxxx,相当于是不同时间节点生成的所有ckpt文件的一个索引。

        2.model.ckpt-2124.data-000000-of-000001:模型文件,保存模型的权重

        3.model.ckpt-2124.meta: 图文件,保存模型的网络图

        4.model.ckpt-2124.index: 这个不清楚

        5.graph.pbtxt: 用protobuf格式保存的模型的图

    Tensorflow使用五个不同级别的日志消息。按照上升的顺序,它们是DEBUG,INFO,WARN,ERROR和FATAL。当在任何这些级别配置日志记录时,Tensorflow将输出与该级别相对应的所有日志消息以及所有级别的严格级别。例如,如果设置了ERROR的日志记录级别,则会收到包含ERROR和FATAL消息的日志输出,如果设置了一个DEBUG级别,则会从所有五个级别获取日志消息。

    默认情况下,Tensorflow在WARN的日志记录级别进行配置,但是在跟踪模型训练时,需要将级别调整为INFO,tf.logging.set_verbosity(tf.logging.INFO)

二.程序语言

1.join 和 os.path.join函数

    join:用于合并字符串数组

    os.path.join:用于合并多个路径

import os
dataset_dir = '.'
file_pattern = 'fgvc_%s.tfrecord'
split_name = 'train'
a = os.path.join(dataset_dir, file_pattern % (split_name))
print a   #./fgvc_train.tfrecord

2.tf.expand_dims 和 tf.squeeze

    tf.expand_dims: 用于增加维度(点击打开链接)

import tensorflow as tf
a = tf.constant([[1,2,3],[4,5,6]])
with tf.Session() as sess:
    print sess.run(a)
    '''
    [[1 2 3]
     [4 5 6]]
     '''
    print tf.shape(a)
    '''
    Tensor("Shape_5:0", shape=(2,), dtype=int32)
    '''
    a_1 = tf.expand_dims(a,0)
    print sess.run(a_1)
    '''
    [[[1 2 3]
      [4 5 6]]]
    '''
    print tf.shape(a_1)
    '''
    Tensor("Shape_6:0", shape=(3,), dtype=int32)
    '''
    a_2 = tf.expand_dims(a,-1)
    print sess.run(a_2)
    '''
    [[[1]
      [2]
      [3]]

     [[4]
      [5]
      [6]]]
    '''
    print tf.shape(a_2)
    '''
    Tensor("Shape_7:0", shape=(3,), dtype=int32)
    '''
    a_3 = tf.expand_dims(a,1)
    print sess.run(a_3)
    '''
    [[[1 2 3]]

     [[4 5 6]]]
     '''
    print tf.shape(a_3)
    '''
    Tensor("Shape_8:0", shape=(3,), dtype=int32)
    '''

      tf.squeeze:减少多余的维度

import tensorflow as tf
a = tf.constant([[1]])
b = tf.constant([[[1,2],[3,4]]])
with tf.Session() as sess:
    print sess.run(a) #[[1]]
    print sess.run(tf.squeeze(a)) # 1
    print sess.run(b) 
    '''
    [[[1 2]
      [3 4]]]
      '''
    print sess.run(tf.squeeze(b))
    '''
    [[1 2]
     [3 4]]
    '''

    3.tf.cast 函数

   用法:tf. cast(x, dtype, name=None)

  作用:将x的数据格式转化成dtype.

import tensorflow as tf
a = tf.constant([[1.2]])
b = tf.constant([[[1,2],[3,4]]])
with tf.Session() as sess:
    print sess.run(a) #[[1.2]]
    print sess.run(tf.cast(a, tf.int32))# [[1]]

    dtype类别有:tf.bool, tf.int32, tf.int64, tf.float32, tf.float64

4.将Tensor张量转化为numpy数组

点击打开链接

注:tensorflow里面不能将张量转化成矩阵后用numpy计算,因为numpy里不能实现梯度反传。

5.不能用for循环遍历图片的所有像素点,这样会导致op节点爆炸。

6.如果采用tf.initialize_all_variables().run(),所有权重都将初始化,如果只训练某一层权重则不应用这句命令。

详细内容:点击打开链接

7.tf查找元素相关程序  点击打开链接

8.tf.matmul与tf.multiply

    tf.matmul:矩阵乘法

    tf.multiply:element-wise。对应元素相称,如两个矩阵的第一行第一列相乘。

9.tf.shape(a) 和a.get_shape()

点击打开链接

10.tf.argmax   返回最大值的下标

        tf.argmax(    ,axis = 0)    纵向比较

        tf.argmax(    , axis = 1)   横向比较

点击打开链接

11.

深度学习

阅读数 5

没有更多推荐了,返回首页