Docker命令总结

FROM [:] [AS ]: 设置基础镜像 FROM alpine:latest RUN [“executable”, “param1”, “param2”]: 执行shell脚本。进来少使用RUN,因为没执行一次 docker就会增加一层只读层。 RUN /bin/bash -c ‘source $HOME/.bashrc; echo $HOME’等同于RUN /bin/bash -c ‘source $HOME/.bashrc; echo $HOME’等同于RUN [“/bin/bash”, “-c”, “source $HOME/.bashrc; echo $HOME”] CMD [“executable”,”param1″,”param2″] [“param1″,”param2”] command param1 param2: DockerFile中只有一个CMD,多于一个将执行最后一个。它的意思差不多就是启动容器后执行的默认命令。 FROM *:*CMD [“catalina.sh”, “run”] LABEL = = … : 镜像标签 LABEL “com.example.vendor”=”ACME Incorporated”LABEL com.example.label-with-value=”foo”LABEL version=”1.0″LABEL description=”This …

深度学习(卷积网络)简介

理解卷积神经网络CNN,特别是对第一次接触卷积神经网络的人来说,经常会对诸如卷积核、滤波器、通道等概念和他们的堆叠架构感到困惑。然而卷积是强大且高度可扩展的概念,在本文中,我们将逐步分解卷积操作的原理,将他与标准的全连接网络联系起来,并且探索如何构建一个强大的视觉层次,使其成为高性能的图像特征提取器。 二维卷积:操作 二维卷积是一个相当简单的操作:从卷积核开始,这是一个小的权值矩阵。这个卷积核在 2 维输入数据上「滑动」,对当前输入的部分元素进行矩阵乘法,然后将结果汇为单个输出像素。 一个标准的卷积 卷积核重复这个过程知道遍历了整张图片,将一个二维矩阵转换为另一个二维矩阵。输出特征实质上是在输入数据相同位置上的加权和(权值是卷积核本身的值)。 输入数据是否落入这个「大致相似区域」,直接决定了数据经过卷积核后的输出。这意味着卷积核的尺寸直接决定了生成新的特征时汇合了多少(或几个)输入特征。 这与全连接层完全相反。在上面的例子中,我们的输入特征为 5*5=25,输出数据为 3*3=9. 如果我们使用标准的全连接层,就会产生一个 25*9=225 个参数的权值矩阵,每个输出都是所有输入数据的加权求和。卷积操作允许我们只用 9 个参数来实现这个变换,每个输出特性不用「查看」每个输入特征,而是只是「查看」来自大致相同位置的输入特征。请注意这一点,因为这对我们后面的讨论至关重要。 Padding 和 Strides 在我们继续介绍卷积神经网络之前,介绍两种卷积层中常用的技术:Padding 和 Strides Padding:如果你看到上面的动画,那么会注意到在卷积核滑动的过程中,边缘基本会被「裁剪」掉,将 5*5 特征矩阵转换为 3*3 的特征矩阵。边缘上的像素永远不在卷积核的中心,因为内核没有任何东西可以扩展到边缘之外。这并不理想,因为我们经常希望输出的尺寸等于输入。 一些 padding 操作 Padding 做了一些非常机智的办法来解决这个问题:用额外的「假」像素(通常值为 0, 因此经常使用的术语「零填充」)填充边缘。这样,在滑动时的卷积核可以允许原始边缘像素位于其中心,同时延伸到边缘之外的假像素,从而产生与输入相同大小的输出。 Striding:运行卷积层时,我们通常希望输出的尺寸是比输入更低。这在卷积神经网络中是常见的,在增加信道数量的同时空间尺寸减小。其中一种方法是使用池化层(例如,取每 2×2 网格的平均值/最大值将空间维度减半)。还有一种方法是使用 Striding: 一个步长为 2 的卷积操作 Stride 的想法是改变卷积核的移动步长跳过一些像素。Stride 是 1 表示卷积核滑过每一个相距是 1 的像素,是最基本的单步滑动,作为标准卷积模式。Stride 是 2 表示卷积核的移动步长是 2,跳过相邻像素,图像缩小为原来的 1/2。Stride 是 3 …

10大经典排序

1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 1.2 动图演示 1.3 代码实现 /** * 冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 * * @param numbers * 需要排序的整型数组 */ public static void bubbleSort(int[] numbers) { int temp = 0; int size = numbers.length; for (int i = 0; i < size – 1; i++) { …

Nginx负载均衡及几个基本用法

正向代理 反向代理 透明代理 负载均衡 静态服务器 nginx的安装 【实现功能】 这篇文章将要介绍的主要内容如下: 1、配置三台服务器 2、分别在三台服务器上部署同样的服务代码 3、使用Nginx实现负载均衡 【实现思路】 我们的Nginx负载均衡器将部署在一台交互服务器上,配置与其他两台服务器的连接,所有的请求直接访问Nginx服务接口,然后Nginx负载均衡器将自行选择真实调用的服务器端口。 【开发及部署环境】 开发环境:Windows 7 x64 sp1 英文版 VisualStudio 2017 部署环境:阿里云 ECS实例 windows server 2012 x64 IIS 7.0 【所需技术】 ASP.NET WebApi2 【实现过程】 使用ASP.NET webapi2 写一个简单地返回json的接口,为了展示我们调用的是不同服务器上的接口,我们以数字形式分别生成三个接口服务,并且分别部署到三台服务器的iis中。 public IHttpActionResult GetTest() { //throw new Exception_DG_Internationalization(1001); string ip = Request.GetIpAddressFromRequest(); return OK(“Test Api . Client Ip Address is …

JMeter压力测试工具简介

JMeter特点 适用性广泛 可以适用于多种应用,服务和协议 Web – HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …) SOAP / REST Webservices FTP Database via JDBC LDAP Message-oriented middleware (MOM) via JMS Mail – SMTP(S), POP3(S) and IMAP(S) Native commands or shell scripts TCP Java Objects 全功能的集成测试工具 支持从浏览器或本地应用程序录制,构建和调试测试计划。 跨平台 纯Java,100%的可移植性,支持从Linux,Windows,Mac OSX等操作系统运行,支持图形界面或命令行方式。 报表 多种HTML的动态报表展示测试结果。 可扩展 高度可扩展的架构,支持JSR223兼容的脚本语言,例如Groovy,BeanShell。可与Maven, Gradle和Jenkins结合使用。 压力测试示例 当前版本的JMeter为5.0,运行需要安装Java8以上的Java。下载后解压,在Windows环境可运行bin目录下的jmeter.bat。 初始图形界面 一,录制测试计划 点击初始界面中工具栏的第二个按钮开始准备录制,弹出如下界面,点击create …

AI知识图谱:机器学习、深度学习、数据分析、数据挖掘「附脑图」

在本文中,我们将研究深度学习、机器学习、数据分析、数据挖掘之间的差异。我们将逐一了解它们,然后讨论他们在各个方面的不同之处。先看AI知识图谱: AI知识图谱 深度学习与机器学习发展史 发展史 一、什么是机器学习? 机器学习:抵达AI目标的一条路径 大体来讲,机器学习就是用算法真正解析数据,不断学习,然后对世界中发生的事做出判断和预测。此时,研究人员不会亲手编写软件、确定特殊指令集、然后让程序完成特殊任务,相反,研究人员会用大量数据和算法“训练”机器,让机器学会如何执行任务。 机器学习这个概念是早期的AI研究者提出的,在过去几年里,机器学习出现了许多算法方法,包括决策树算法(Decision trees)、归纳逻辑程序设计、聚类分析(Clustering)、强化学习、贝叶斯网络、Find-S算法、随机森林算法(Random forests)、人工神经网络等。正如大家所知的,没有人真正达到“强人工智能”的终极目标,采用早期机器学习方法,我们连“弱人工智能”的目标也远没有达到。 机器学习 通常,有3种类型的学习算法: 1,监督机器学习算法用于进行预测。此外,该算法搜索分配给数据点的值标签内的模式。 2,无监督机器学习算法:没有标签与数据点相关联。这些ML算法将数据组织成一组簇。此外,它需要描述其结构,使复杂的数据看起来简单,有条理,便于分析。 3,增强机器学习算法:我们使用这些算法来选择动作。此外,我们可以看到它基于每个数据点。一段时间后,算法改变其策略以更好地学习。 二、什么是深度学习? 深度学习:实现机器学习的技术 深度学习是机器学习中一种基于对数据进行表征学习的方法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。 深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本 任何深度神经网络都将包含三种类型的图层:输入层、隐藏层、输出层。我们可以说深度学习是机器学习领域的最新领域。这是实现机器学习的一种方式。 三、数据挖掘 数据挖掘利用各种技术与统计方法,将大量的历史数据,进行整理分析,归纳与整合,是从海量数据中“挖掘”隐藏信息,如趋势、特征及相关的一种过程。工作BI(商业智能)、数据分析、市场运营都可以做这个工作。 数据挖掘 之所以经常和机器学习合在一起讲是因为现在好多数据挖掘的工作是通过机器学习提供的算法工具实现的。例如广告的ctr预估,PB级别的点击日志在通过典型的机器学习流程可以得到一个预估模型,从而提高互联网广告的点击率和回报率;个性化推荐,还是通过机器学习的一些算法分析平台上的各种购买,浏览和收藏日志,得到一个推荐模型,来预测你喜欢的商品。 我们可以把数据挖掘理解为一种类型的工作,或工作中的某种成分,机器学习是帮助完成这个工作的方法。 统计学、数据库和人工智能共同构造了数据挖掘技术的三大支柱,许多成熟的统计方法构成了数据挖掘的核心内容。 四、数据分析 数据分析只是在已定的假设,先验约束上处理原有计算方法,统计方法,将数据转化为信息,而这些信息需要进一步的获得认知,转化为有效的预测和决策,这时就需要数据挖掘,也就是我们数据分析师系统成长之路的“更上一楼”。 数据分析 数据分析是把数据变成信息的工具,数据挖掘是把信息变成认知的工具,如果我们想要从数据中提取一定的规律(即认知)往往需要数据分析和数据挖掘结合使用。 举个例子:你有50块钱,去买菜,经过一一问价,你知道了50块钱能买多少蔬菜,能买多少肉,能吃多少天,心里得出一组信息,这就是数据分析。根据自己的偏好,营养价值,用餐时间计划,最有性价比的组合确定了一个购买方案,这就是数据挖掘。 五、机器学习与深度学习的比较 深度学习与机器学习我们使用机器算法来解析数据,从数据中学习,并根据所学知识做出明智的决策。基本上,深度学习用于创建人工“神经网络” ,可以自己学习和做出明智的决策。我们可以说深度学习是机器学习的一个子领域。 数据依赖性 性能是两种算法之间的主要关键区别。虽然,当数据很小时,深度学习算法表现不佳。这就是是深度学习算法需要大量数据才能完美理解的原因。 但是,在这种情况下,我们可以看到算法的使用以及他们手工制作的规则。上图总结了这一事实。 硬件依赖 通常,深度学习依赖于高端机器,而传统学习依赖于低端机器。因此,深度学习要求包括GPU。这是它工作中不可或缺的一部分。它们还进行大量的矩阵乘法运算。 特色工程 这是一个普遍的过程。在此,领域知识被用于创建特征提取器,以降低数据的复杂性,并使模式更加可见以学习算法的工作。虽然,处理起来非常困难。因此,这是需要非常多的专业知识和时间。 解决问题的方法 通常,我们使用传统算法来解决问题。但是,它需要将问题分解为不同的部分以单独解决它们。要获得结果,请将它们全部组合起来。 例如:让我们假设你有一个多对象检测的任务。在此任务中,我们必须确定对象是什么以及它在图像中的位置。在机器学习方法中,我们必须将问题分为两个步骤:1.物体检测、2.物体识别。 首先,我们使用抓取算法浏览图像并找到所有可能的对象。然后,在所有已识别的对象中,你将使用像SVM和HOG这样的对象识别算法来识别相关对象。 执行时间处理时间 通常,与机器学习相比,深度学习需要更多时间进行训练。主要原因是深度学习算法中有太多参数。机器学习只花需要更少的时间进行训练。 解释性 我们将可解释性作为比较两种学习技巧的因素。尽管如此,深度学习在用于工业之前仍然被认为是10次。 六、数据分析与数据挖掘的比较 数据分析只是在已定的假设,先验约束上处理原有计算方法,统计方法,将数据分析转化为信息,而这些信息需要进一步的获得认知,转化为有效的预测和决策,这时就需要数据挖掘,也就是我们数据分析师系统成长之路的“更上一楼”。 数据挖掘与数据分析两者紧密相连,具有循环递归的关系,数据分析结果需要进一步进行数据挖掘才能指导决策,而数据挖掘进行价值评估的过程也需要调整先验约束而再次进行数据分析。 数据量上:数据分析的数据量可能并不大,而数据挖掘的数据量极大。 约束上:数据分析是从一个假设出发,需要自行建立方程或模型来与假设吻合,而数据挖掘不需要假设,可以自动建立方程。 对象上:数据分析往往是针对数字化的数据,而数据挖掘能够采用不同类型的数据,比如声音,文本等。 …

Token简介

互联网概念的token认证,大抵是在RESTful API 流行后提出的,在开始token认证之前,我们先梳理下常见的互联网认证机制。 一、HTTP Basic Auth HTTP Basic Auth常见的有两种:第一种就是最常见的,即我们在登陆一些web页面时,会让我们输入用户名密码;另一种是将用户名密码信息通过base64这类算法变换成一条字符串在http请求头中增加auth字段,再传输给服务端。 这个属于最原始级的认证,缺点比较明显,存在http头中的密码信息容易被抓包获取,用户名密码后服务端后需要查询数据库里的信息,进行比对信息,这也增加了服务器的负担。 二、session+cookie模式 假设目前我们有一个查询类的web站点,不可能查询都要登陆一次,为解决一次登陆,可以在固定一段时间内都免登陆查询,就出现了session+cookie模式,该模式是第一次登陆时使用HTTP Basic Auth,认证成功后,为避免每次都到数据库里校验用户名密码信息,就在主机上存储一份登陆的session信息,在本身cookie里记录对应的session信息,cookie里同时保存expire time。 该模式优缺点都比较明显:session信息需要额外的数据库存储,例如一般需增加redis、memached等应用。在多机负载时,需要考虑session共享;但好处也是明显的,session信息统一管理,可以在服务端统一控制认证的过期时间或个别用户的过期时间。 三、简单token认证 token认证最常用的应用场景就是查询接口的调用(RESTful API),查询接口的信息在没有安全需求时,大家都可以通过get方法或post方法取得所需信息。但在有安全需要时一般需要认证后才能获取所需的信息,这时候可以通过先能过HTTP Basic Auth,HTTP Basic Auth认证完成后,服务端返回给客户端一个类似于UUID的唯一标识,我们称之为token。该token一般可以在URL或head头里加入,如以下的常见的URL模式 http://api,361way.com/getinfo?token=xxxxx 或 http://api,361way.com/getinfo?t=xxxxx ,后面再加上相应的查询信息,就可以获取到相应的数据。 token的好处是服务端不需要存储相应信息,但被不怀好意的人从中间获取到该信息时,也容易被利用,非法获取数据。 由于这个简单的token返回串里未返回相应的过期时间信息,如果想增强安全性,一般可以在服务端生成时配合时间戳生成,服务端在接收到client发来带token的信息时,先检测反解token获取时间戳信息,如果该时间戳在超过某个时间点时,就认为过期,需要重新获取。 四、OAuth认证 OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。 这个理解起来比较绕口,举个例子,如很多网站上面有qq或微信登陆接口,qq或微信提供的就是OAuth认证。OAuth虽然名字很洋气,其本质还是token认证,仔细研究下上面的话,是不是原理上和上面提到的简单token认证类似,只不过其加了几个callback函数而已 这里以douban豆瓣网调用QQ的OAuth节口为例,其调用方式如下: # 发起认证: http://www.douban.com/leadToAuthorize # 重定向到QQ认证,并指定回调: http://www.qq.com/authorize?callback=www.douban.com/callback # 返回授权码,并callback到douban http://www.douban.com/callback 五、JWT认证 JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT实际上就是一个字符串,它由三部分组成,头部(Header)、载荷(Payload)与签名(Signature)。这里只简单说下理论,会另开博文深层讨论。 Payload里存放的是存储签发者、签发时间、过期时间、一些数据信息的JSON格式的内容。 { “iss”: “Online JWT Builder”, “iat”: 1416797419, “exp”: …