图形搜索中用到的机器学习基础介绍

概述

针对目标图像(具有统一特征的图像),进行基于深度学习技术的模型训练,通过调优模型结构与参数,得到对于指定图像具有提取特征信息的模型 M。将库中所有图像通过 M 提取出特征信息,并将特征信息存储在ceph 中,所有特征信息提取完成后,创建多叉树索引。当用户上传图片查找时,用 M 提取图片的特征信息,将提取的特征信息转换为索引树叶节点相同数据结构,用该数据在索引中查找到相似度符合要求的图片。

基础概念

深度学习技术的模型为一个结构复杂的层叠神经网络,通过各层的计算(卷积计算,非线性激活层,池化层等),提取得到图片的关键特征信息。对于不同的任务,需要用任务对应的图像,使用深度学习框架作为工具,训练模型,从而得到能够执行特定任务功能的模型。常用的深度学习框架有tensorflow,mxnet等。

卷积层 :利用卷积运算对原始图像或上一层的特征进行变换的层。一般需要采用多个卷积核多滑几次,但也不是越多越好。过多可能造成梯度消失。(问题又来了,什么是梯度?梯度是模型输出与输入结果的差异,每一层参数调整通过这个差值传播完成。网络过深,该差值会被逐层地指数级缩小,接近于 0 时,参数就没有变化了。)

池化层:用来减小图片分辨率,降低计算量和参数数量。具体说就是将特征按通道分开,得到矩阵,对矩阵分割,每个分割块取平均值,将平均值组合,然后堆叠输出。

全连接层:将特征向量进行变换。使用若干维数相同的向量与输入向量做内积操作,然后将结果拼接输出。

非线性激活层:线性函数的复合依然是线性,若无非线性变换,多层变换效果不会被保留。需要进行非线性运算才可保留。常用线性整流函数 ReLU ,这个函数听起来绕口,实际上就是 x > 0 时 y = x, x < 0 时,y = 0。

归一化层:完成多类线性分类器中归一化指数函数的计算。一般为最后一层,以一个长度和类别个数相等的特征向量作为输入,然后输出图像属各个类别的概率。

过拟合:模型过于贴近训练集。

欠拟合:模型能力太差,搞不定训练集也搞不定测试集。

 基本流程

一、环境配置

首先当然是搭建环境,这个里头坑坑洼洼不是一般的多, 参考官方文档,多踩几次就好了。

建议采用 Ubuntu 系统,资源比较多。

 二、模型训练

1、图片预处理

mxnet 要求处理的图像数据具有共同的规范,如何尺寸、通道数等,因此文件服务器中的图片不能直接作为训练数据,需要进行处理,以某种 dataiter 的形式呈现。

2、创建训练集与测试集

ImageRecordIter是一种特殊的DataIter,可以直接接受上文所说的数据集转化成 4 维NDArray。

3、定义神经网络

一个深度神经网络通常由多个顺序连接的层组成,每一层以上一层提取出的特征输入,对其进行特定变换,进过多次变换后,可将原始图像提取为高层次的抽象(具体是什么特征,谁也不知道)。一般神经网络可分为卷积层(提取边沿特征等)、非线性激活层(完成非线性变换),池化层,全链接层等。 可参考维基神经网络

下面是复制过来的一个神经网络,至于为何要这样配置的原因,也不清楚,还需要进一步的学习。

4、模型训练

算法会先初始化一个解,在这个解的基础上,确定一个搜索方向和一个移动步长(各种法算确定方向和步长的方法不同,也就使各种算法适用于解决不同的问题),使初始解根据这个方向和步长移动后,能使预测误差下降。 然后将它更新为新的解,再继续寻找下一步的移动方向的步长,这样不断的迭代下去,最终就能找到一个解,使得误差在可接受的范围内。在寻解过程中,步长太大,就会搜索得不仔细,可能跨过了优秀的解,而步长太小,又会使寻解过程进行得太慢。学习率对原步长作调整,如果学习率lr = 0.1,那么梯度下降法中每次调整的步长就是0.1*梯度。

一般来说,按照以上步骤完成训练的模型,肯定是没法工作的, 蛋疼。

因为非常容易过拟合(太迁就训练集数据)或者欠拟合(模型连训练集都搞不定),这个就要考验一个人的水平了。因为机器学习的关键就是特征工程,数据是有的,就看怎么提取到合适的特征来进行识别了。

 参考:

https://mxnet.incubator.apache.org/api/python/index.html

https://baijiahao.baidu.com/s?id=1584288173097662506&wfr=spider&for=pc

https://baike.baidu.com/item/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/382460

https://blog.csdn.net/storMouse/article/details/56115308?locationNum=4&fps=1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据处理

笔记之一

17760
来自专栏LhWorld哥陪你聊算法

【深度学习篇】--神经网络中的卷积神经网络

Convolutional neural networks  视觉皮层、感受野,一些神经元看线,一些神经元看线的方向,一些神经元有更大的感受野,组合 底层的图案...

9810
来自专栏深度学习思考者

目标检测 | SSD原理以及相关问题

SSD: Single Shot MultiBox Detector ? intro: ECCV 2016 Oral arxiv: http://arxiv...

600100
来自专栏PPV课数据科学社区

译:支持向量机(SVM)及其参数调整的简单教程(Python和R)

一、介绍 数据分类是机器学习中非常重要的任务。支持向量机(SVM)广泛应用于模式分类和非线性回归领域。 SVM算法的原始形式由Vladimir N.Vapnik...

80280
来自专栏人工智能

Tensorflow笔记 tensorflow做线性回归

本系列推送主要参考: Stanford University CS20SI: Tensorflow for Deep Learning Research. 01...

237100
来自专栏marsggbo

使用numpy解决图像维度变换问题

在机器学习中经常会碰到各种图像数据集,有的是按照num*height*width*channel来存储的,而有的则是num*channel*height*wid...

60810
来自专栏智能算法

机器学习三人行(系列三)----end-to-end机器学习

系列二我们详细介绍了数据下载,数据透析以及数据的不同分组方式,详情请参考:机器学习三人行(系列二)----机器学习前奏,洞悉数据之美!。但是在真正进行训练之前,...

39980
来自专栏AI科技评论

开发 | 用 Kaggle 经典案例教你用 CNN 做图像分类!

前言 在上一篇专栏中,我们利用卷积自编码器对 MNIST 数据进行了实验,这周我们来看一个 Kaggle 上比较经典的一个图像分类的比赛 CIFAR( CIFA...

41960
来自专栏大数据智能实战

pix2pix tensorflow试验(GAN之图像转图像的操作)

GAN是一种典型的概率生成模型,其核心思想是:找出给定观测数据内部的统计规律,并且能够基于所得到的概率分布模型,产生全新的,与观测数据类似的数据。 概率生成模...

58450
来自专栏Ldpe2G的个人博客

PCANet --- 用于图像分类的深度学习基准

98920

扫码关注云+社区

领取腾讯云代金券