• 17 Jul 2019 » 使用keras从0开始搭建迁移学习模型
  • 人工智能领域目前最火的莫过于深度学习了,但是,由于深度学习与传统的机器学习从原理和技术上有一些明显的不同,对于一些新人来说,往往有些不知如何入手。本文准备通过keras官方的fine tune代码样例,解释一下搭建迁移学习模型的流程。 深度学习的基本介绍 这里简单介绍一下深度学习相关知识,为了方便大家理解,我会与传统机器学习的一些知识进行类比。深度学习本质上是对人脑视觉生物工作原理上的类比。人脑在处理视觉信息时,最小的处理单元是视神经元,一个视神经元会有某些刺激作出反应,对于视觉来说,神经元会有不同的层次来进行组织,不同的层来处理不同的刺激(特征),上层神经元接受的信息来自下层神经元。例如,最底层的光感受细胞,感受原始的光学刺激,初级视觉皮层的神经元,从光感受细胞的刺激中经过处理获得边缘、方向等信息。再经过更高级的神经网络层,进一步抽取更抽象的特征,例如轮廓、形状等,最终由大脑作出物体类型的判断。 在上面这个过程描述中,引入了神经元、网络层(layer)、网络结构这些深度学习的重要概念。深度学习过程中,是要在一个网络结构上训练对应权重文件,权重文件就是层与层之间神经元传输信息的权重。对应到机器学习领域,网络结构可以理解为一种算法,权重文件是算法经过数据训练后得到的模型。 而我们经常听到的DNN、CNN和RNN这些属于更大的一类网络类型。DNN是深度神经网络,是较早的一类神经网络类型,比如线性感知器多层感知器,主要应用于解决传统的机器学习任务。而CNN是卷积神经网络,是根据人类视觉的流程而模拟出来的,在计算机视觉中有广泛的应用。著名的VGG,mobileNet,inception都是CNN的一种具体网络结构;而RNN则是循环神经网络,主要用于时间序列方面的建模,对于自然语言处理这类带有时间上下文的任务效果显著,著名的LSTM就是RNN的代表,LSTM也是来自于对人类记忆系统的模拟,全称叫做长短时记忆。同样从人类得到其他的还有注意门等等。这类网络类型和机器学习中的算法类别很像。比如机器学习算法类别有广义线性模型,其中有logistic回归,线性回归等。这些具体的算法就像inception,vgg这类网络结构。 其实从人工智能总体的发展流程来看,人工智能的终极目标是使机器产生与人类一样的智能,在具体实现方式上存在两个流派,一类是功能类比,一类是结构类比。前者是不关心具体的实现方式,只要机器可以与人类作出相同的事情,那么就认为机器在相关问题上具有了人类的智能。后者的隐含假设是结构相同的物体也会有相同的功能,如果人类设计的智能体的结构能够和人脑一样,那么也可以表现出与人脑一样的智能。两种流派各有优劣,功能类比面临的问题是无法找到通用智能,在某类任务上表现出的智能未必会适用于其他任务,今年打败各国围棋高手的alpha go也仅仅是适用于围棋类任务,而结构类比,多少有些不可知论的意味。当然随着研究的深入,二者也有逐渐融合的趋势。而深度学习恰恰是二者融合的一个证明,人工智能在用想拖到结构在处理类似的功能,实际效果目前来看也比较乐观。 迁移学习的基本介绍 了解了深度学习的基本知识,接下来看一下本篇文章的主题之一迁移学习。迁移学习本身也是认知/教育心理学的概念。其基本含义是当人类掌握了某项技能或知识后,再学习相近领域的时候时,由于有先前的经验,可以加速学习过程,即先前相近任务的知识经验迁移到新的任务上。如果从生理学角度去思考的话,神经元的放电模型来激活相关神经元,相近任务的神经元的联接拓扑结构更近,更容易得到激活。比如,本身会滑旱冰的人,学习滑冰会很快。 具体到深度学习的任务,在视觉任务中,前面提到的CNN卷积神经网络,在不同的图片分类任务上,用于识别具体像素的网络层,用于学习边缘、方向这些更高一级的网络层,以及用于学习更抽象特征,轮廓、形状的网络层,这些层的作用都是相近的,可以迁移到的不同图片分类任务上,所需要作出修改的通常只是模型最后几层。 下面以keras为例,来说明如何进行深度的学习的迁移学习。keras是比tensorflow更高级(更简单)的深度学习工具,它提供了更很多方便的工具,底层可以使用多种深度学习框架。它与tensorflow的关系,可以用pandas与numpy的关系来类比。 这里与keras官方迁移学习(fine tune)的例子代码作为示例。 from...
    Read more...

  • 07 Jul 2019 » 搭建私有pip源
  • 在项目交付过程中,经常遇到没有外网的环境,这时系统如果需要依赖pip源,那么通常需要搭建私有pip源。这里需要解决三个问题。 搭建私有pip服务器 下载/更新私有pip服务中的pip包 在pip客户端中设置本地pip源 搭建私有pip服务器 官方提供了多个pypi的实现,具体联接为:https://wiki.python.org/moin/PyPiImplementations chishop和djangopypi,基于django Plone Software Center pypiserver,最小化pypi服务器,易于安装和使用 Warehouse,下一代Python包仓库 官网也列出了使用apache搭建私有pip服务器的一些httpd.conf配置。 这里选用轻量级的pypiserver作为私有pip服务器。 安装pypiserver...
    Read more...

  • 27 Jan 2019 » 大规模机器学习-2018的DataOps/MLOps
  • 动机 数据科学可以被概括为两个工作流: 模型开发 模型服务 当数据科学团队较小的时候,不会面临太多的问题,所有事情都相对较好。 需要维护的模型较少 关于模型的知识在数据科学家的头脑中 每个人有跟踪流程的方法 但是,随着数据科学需求的增长,将面临新的问题 数据流的复杂度增加 大量的数据处理工作流 数据没有在标准化的流程中修改 管理复杂的流和定时任务变得不可管理 每个数据科学家有他们自己的工具集 一些喜欢tensorflow...
    Read more...

  • 19 Jan 2019 » 从0开始制造一个docker自定义镜像
  • docker容器技术现在火的一塌糊涂,最近的工作刚好和这部分内容有交集,就动手搞了一下,这里记录下Docker使用的相关流程。 安装Docker 由于我用的是mac,docker是基于linux系统,因此需要下载docker desktop,是一个mac下的app,下载后放入应用程序中就可以运行。 运行起来会后在顶部的状态栏中常驻一个小鲸鱼的小图标,点击这个图标可以进行重启,退出等操作。 这iterm2中输入docker version,能看到docker相关信息就说明docker安装成功了,可以开始你的docker之旅吧。 自定义镜像是由基础镜像和自定义环境构成。这个例子使用的基础镜像是centos,自定义环境使用 tensorflow的模型例子 https://github.com/tensorflow/models 启动一个基础镜像  docker run -it --name...
    Read more...

  • 06 Jan 2019 » Uber机器学习平台米开朗基罗简介
  • Uber在自家的博客上用两篇文章的篇幅介绍了他们自己的机器学习平台(Michelangelo)Meet Michelangelo: Uber’s Machine Learning Platform 和 Michelangelo PyML: Introducing Uber’s Platform for Rapid Python...
    Read more...

  • 30 Dec 2018 » rancher搭建一个k8s集群
  • rancher是一个管理多k8s集群的开源工具,通过rancher可以快速创建和管理多个k8s集群,包括aws,gke,阿里云等公有云厂商及自身的基础设施。 安装rancher rancher自身也是基于docker,因此首先要在集群上安装docker。在centos安装docker可以使用yum install。 yum install docker 按照rancher官网的指导安装rancher镜像。 sudo docker run -d --restart=unless-stopped -p 80:80...
    Read more...

  • 21 Dec 2018 » 机器学习概念
  • 机器学习(ML)可以帮助你使用历史数据来作出更好的商业决策。机器学习算法发现数据中的模式,并且用这些发现构建数学模型。你可以用这些模型对未来的数据进行预测。例如,一个机器学习模型的可能应用可以根据消费者历史的行为预测他购买特定商品的可能性。 使用机器学习解决商业问题 你可以在带有真实答案的已有样例的问题上应用机器学习。例如,如果你想使用机器学习来预测一封email是否是垃圾邮件,你可以收集被正确标记为垃圾邮件或非垃圾邮件的样例。接下来你可以使用机器学习在这些email样例上进行归纳,以便预测新email是不是垃圾邮件。这种从带有标记的真实答案的数据上进行学习的方法被称为监督式机器学习。 你可以在这些特定的机器学习任务上使用监督式机器学习:二分类(从两个潜在结果中预测一个),多分类(从两个以上的结果中预测一个)以及回归(预测一个数值)。 二分类问题里的例子有: 客户会不会买这个产品? 这封邮件是不是垃圾邮件? 这个产品是书还是农产品? 这个评论是消费者写的还是机器人? 多分类问题的例子有: 这个产品是书、电影还是衣服? 这个电影是浪漫戏剧、纪录片或惊悚片? 这个消费者最关系哪类产品? 回归问题的例子有: 明天北京的天气是多少?...
    Read more...

  • 16 Dec 2018 » 使用requests和beautiful soup下载网页数据
  • Python中有很多方便的包,requests和beautiful soup可以很简单将一个网站直接下载下来。 Requests requests是一个非常简单的http库,比urllib2要人性化很多。官网很贴心的,对比了用两个模块来做同一件的数据的代码量。 requests代码样例 import requests r = requests.get('https://api.github.com', auth=('user', 'pass')) print r.status_code print...
    Read more...

  • 05 Feb 2018 » 使用金山云从零开始搭建一个搜索下拉推荐服务
  • 最近折腾了一下从零开始在金山云上搭建一个搜索下拉推荐,这里记录一下相关的流程,感谢未来的架构师丁神提供的咨询服务。 使用的数据是github上的bestbuy的产品数据大概4W+,和丁神讨论一下架构,本身数据量很小,其实直接上mysql就可以,因为是个demo为了扩展性,最终定下来的架构是nginx(用来承载搜索框静态页)+ flask(提供搜索建议的web服务)+ es(后端的数据查询)+ redis(用于缓存查询结果) 搭建相关环境 首先通过ssh登录服务器 ssh root@xxx.xxx.xxx.xxx 安装python3 一般linux服务器上都有安装python,不过都是python2版本,因为马上都要退休了,所以安装一个python3 我用的这台机器上yum,直接用yum安装python36 yum install python36...
    Read more...

  • 13 May 2017 » 服务器脚本开发效率神器jupyter notebook
  • 在本地上写python脚本通常使用的效率工具组合ipython + sublimetext,但是,当需要将本地开发的脚本部署到服务器上时,流程就略显复杂,一般的流程是先通过跳板机ssh上去,再从跳板机ssh到服务器,编写好的脚本则需要两次scp才能上传到服务器上,在服务器上调试脚本和修改脚本也相对麻烦,前者可以用ipython,后者则可以是在本地重新scp两次或者在服务器上通过vim来直接修改服务器文件,可能因为我不习惯这种编程模型一直觉得流程不是那么顺。刚好最近在服务器上打一个jupyter notebook,发现使用notebook会是整个流程顺畅很多,这里记录一下相关的一些经验。 安装python 一般linux服务器上都有安装python,不过版本可能较低,可以自己手动安装最新版本。 一般的流程是wget下载最新的python包,tar xvf解压tar包 cd进入所在目录 ./configure make make install 如果没有sudo权限,则需要直接prefix,比如 ./configure...
    Read more...