前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图形搜索中用到的机器学习基础介绍

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

作者头像
用户2434869
发布2018-09-12 10:43:14
4770
发布2018-09-12 10:43:14
举报
文章被收录于专栏:yl 成长笔记yl 成长笔记

概述

针对目标图像(具有统一特征的图像),进行基于深度学习技术的模型训练,通过调优模型结构与参数,得到对于指定图像具有提取特征信息的模型 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档