机器学期第一学期小结

一、本学期的的总结:

 机器学期第一学期小结_第1张图片

本学期从第一个网络LeNet写起,到AlexNet,再到VGG16。期间使用LeNet做了手写数字识别,使用AlexNet做了猫狗大战的分类。

 

卷积神经网络的基本单元:

卷积层、Kernel-size、Zero-padding、池化层、非线性激活函数

、全连接层

 

 机器学期第一学期小结_第2张图片

 

 

LetNet网络结构:

 机器学期第一学期小结_第3张图片

AlexNet网络结构:

 机器学期第一学期小结_第4张图片

Vgg网络结构:

 机器学期第一学期小结_第5张图片

 

RestNet网络结构:

 

 

具体实现代码在仓库:

https://coding.net/u/Qinxianshen/p/Tensorflow-Learning/git?public=true

 

二、自己对机器学习的理解:

我在念高中期间,做了不少题目的。会通过刷题目,总结一类题目的解法,以后遇到这类题目,就用这个“套路”去解决。这其实就说明了一种学习方式,从特殊到抽象一般规律,再用一般规律去解决特殊问题。这种从一般到特殊的过程,被称为“泛化”,而从一般到特殊的过程,被称为“演绎”。

我们可以通过这个例子来理解机器学习,在做的事情。机器学习,顾名思义。也就是让机器去学习。这其实是一个研究“学习”的过程。通过,让机器从一群数据中摸索,得出一个模型,当新的样本出现的时候,用这个模型,来解决问题。

对于人来说,我们可以从数据中得到一些规律,进而抽象出一些概念,发展出一门学科。这被称为“概念形成”,“概念学习”。但是,当数据的特征,属性太多的时候,人们往往很难得出概念,或者说概念无法被人类理解。举一个例子,我们可以很容易理解3维、4维空间的事物,在脑海中,可以很容易形成这些画面。但是随着维度的增加,我们就很难从脑海中想象了。

这里举一些例子,来理解接下来的概念。

首先,我们来问一个问题,“什么样的蘑菇是有毒的?”你可能会回答,“颜色太鲜艳的是有毒的”。很好,你提到了蘑菇的颜色。这个是蘑菇的一个特征(Feature),当然还有很多很多。味道,气味,触摸感等等。随着你的参考特征的增加,这个问题的研究维度就在不断的增加。我们把这些特征张成的空间称为“属性空间”或者“样本空间”,空间的维度与你研究这个问题选取的特征数有关。就如同,你在做平面几何的时候,参考的是x 和 y 两个坐标轴,那么x,y张成的空间是2维的,当你研究立体几何的时候,增加了z轴这个参考,4维的话,你可以加上时间轴。5维的话,根据你研究的问题,选取对应的特征。是有些抽象,可以停一下,再读下去。

好,我们继续。我们说过,学习的过程往往要从很多案例中学习,这一个个案例,被称为“样本”。假设我们有足够的案例,是否可以继续来研究“什么样的蘑菇是有毒的”这个问题呢?或许还不行,最好我们还能知道,每个案例的结果,也就是每个样本我都知道,哪些是有毒的,哪些是没有毒的。也就是样本的“标签”(Target)。而这些有标记信息的示例张成的空间被称为“标记空间”或者“输出空间”。我们把样本作为行,特征作为列,把这些例子写在一张表上。看看我们能不能从这张表中得出规律。不知道,看到这里你有没有注意到,这张表是不是和你学的矩阵很类似。其实潜移默化中,我们已经把问题转化成,在一个空间里寻找最优解的问题了。

“矩阵不仅仅是数字排列而成的表而已。比如M*N的矩阵A,它表示了从n维空间到m维空间的“映射”。具体来讲就是把n维空间中的点x(n维列向量)变换到m维空间的点(m维列向量)Ax的映射”。

上面这一段是节选自《程序员的数学》这一册书的第三本《线性代数》里的综述。我很建议大家读读这本书,对大家理解线性代数,有很大的帮助。矩阵的运算,可以理解为空间的变换。

回到我们的蘑菇,“什么样的蘑菇有毒?”实际上就是把众多的案例分类成“有毒”、“没毒”。这种问题被称为“分类”问题。而这个例子,只分成两类,那么就是“二分类”问题。

想象一下,这个问题就可以转化成,例子就是散落在一个高维空间的一个个点,你要用一个线或者超平面,去把这些点优雅地分开。

当然这个例子只是一个分类问题,因为我们预测的值是离散的,比如明天是阴天还是晴天。但是,当研究问题变成明天会是多少度。预测的值变成连续的,定量的,那么这就是一个回归问题。

当然这些问题都是,你已经知道了案例的结果而定的。如果说,你不知道“标签”,也就是Target时,怎么办?事实上,现实生活中,这样的例子挺多的。你事先不知道结果。这些数据,是否能够拿来学习呢?答案是可以的,我们可以分析,这些案例之间的特征相似度,把他们分成一个个组,或者叫做“簇类”。“物以类聚,人与群分”。这就是一个聚类的过程。

前者能够,知道标签的学习,被称为“监督学习”,没有标签的学习,被称为“非监督学习”。

 

上述理解是我本学期时写的一段理解,现在记录在此处:

https://www.bilibili.com/read/cv331390

 

三、使用深度学习做的一些小尝试:

 

(1)用机器学习算法实现简单图像分类

运行效果:

 机器学期第一学期小结_第6张图片

实现说明:

 

数据集:Kaggle 猫狗大战数据集合

地址:https://www.kaggle.com/c/dogs-vs-cats/data

PS:该数据集分为 train 和 test 两个文件夹 一共有25000张图片。由于数据集文件太大,就没有放到项目里了。

 

 

Logs文件夹:存放这训练的保存文件。每2000保存一次,我们训练的总次数10000次 所以保存了 2000 4000 6000 8000 9999步的训练模型。

 

主要代码:

input_data.py 文件:

用于数据处理和解析。get_files函数,对图片的路径进行切片,取出图片名字里的标签,猫和狗,给图片进行标签。并随机打乱。get_batch函数,对处理好的数据每次只取一定数量,我们是每次取出了64张。(根据电脑的不同,选择不同,内存如果大可以选择多一些)

model.py文件:

定义了网络的结构。具体网络结构写在后文。除了定义网络结构,还写了一些辅助的函数,方便训练时操作。losses,evaluation,trainning等。

train_and_val.py文件:

程序的入口。主要编写了training的函数,训练模型的函数。和随机从25000张图片里取出一张用模型进行检测。

 

网络结构:(该网络并非经典的letnet,alexnet,vgg16等等)

 

输入:

208*208

卷积:3*3    步长:1      输入通道:3   输出通道16

208*208

池化:3*3    步长:2     

104*104

卷积:3*3    步长:1      输入通道:16   输出通道16

104*104

池化:3*3    步长:1

104*104

全连接 输入:104*104*16 输出128

全连接 输入:128   输出128

全连接 输入:128   输出2(分成2类)

相关参数说明:

最终分类:2类(2分类问题,数据集可以拓展)

输入图片宽度:208

输入图片长度:208

训练集和测试集:8:2

每次取出64张图片进行训练。

分配程序内存:2000mb

训练次数:10000

学习率:0.0001

非线性函数:relu

正则化处理:lrn(虽然已经过时了,但是在这个简单的网络还是很适用的)

优化器:Adapoptimizer

 

 

 

拓展:

上述代码是二分类问题。手写数字识别可以实现多分类问题。

机器学期第一学期小结_第7张图片

 

上述实验,我们在答辩的时候也有演示,使用的是Lenet网络。

具体代码已经存放在我们的代码仓库:

https://coding.net/u/Qinxianshen/p/Tensorflow-Learning/git?public=true

 

(2)使用Google开源的API 进行object detection:

使用前的准备工作:

https://www.zhihu.com/question/61173908

可以加入opencv 通过摄像头实时识别:

 机器学期第一学期小结_第8张图片

首先要加入opencv的库

sudo apt-get install opencv-python

调用官方的api的代码在 object-detection-change.py

参考了这个教程:

https://www.youtube.com/watch?v=COlbP62-B-U

四、本学期了解的其他有趣的案例

1.RNN的通俗解释

http://blog.csdn.net/qq_39422642/article/details/78676567

2.机器学习如何用GPU实现优化

http://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/79049210

3.使用Tensorflow RNN来写诗

https://github.com/hzy46/Char-RNN-TensorFlow

4.使用Tensorflow RNN来预测比特币的股价

https://gitee.com/fendouai/TensorFlow-Bitcoin-Robot

5.详细配置Caffe

http://blog.csdn.net/A_Z666666/article/details/72853346

6.Tensorflow1.7新特性

http://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/79572577

7.如何在ubuntu16.04安装TensorflowGPU

http://blog.csdn.net/qin_xian_shen/article/details/79574056

8.如何安装Ubuntu16.04

https://www.bilibili.com/video/av16053502/

9.Tensorflow入门经典教程(CNN RNN 等等)

https://github.com/aymericdamien/TensorFlow-Examples

10.Tensorflow物体识别

https://github.com/tensorflow/models/tree/master/research/object_detection

对应的中文教程:

https://www.zhihu.com/question/61173908

11.Tensorflow的生成艺术的模型: https://github.com/tensorflow/magenta/tree/master/magenta/models

12.Tensorflow音乐生成

1)Google Magenta Github地址 https://github.com/tensorflow/magenta

2)用Tensorflow创作曲子: https://github.com/llSourcell/Music_Generator_Demo

13.用Tensorflow画画

1)Skatch RNN 论文地址: https://arxiv.org/pdf/1704.03477.pdf

2)Skatch RNN Tensorflow官网的介绍: https://magenta.tensorflow.org/sketch_rnn

3)Google Blog 对Skatch RNN的介绍: https://research.googleblog.com/2017/04/teaching-machines-to-draw.html

4)Sketch RNN的notebook地址: https://github.com/tensorflow/magenta-demos/blob/master/jupyter-notebooks/Sketch_RNN.ipynb

5)Quick Draw 感受一下这个画图的识别游戏: https://quickdraw.withgoogle.com/data

 

 

 

你可能感兴趣的:(tensorflow,机器学习)