激活函数

两种方式识别“传统”图片验证码

不羁岁月 提交于 2020-08-16 13:59:11
目前,很多网站为了反爬都会采取各种各样的策略,比较简单粗暴的一种做法就是图片验证码,随着爬虫技术与反爬技术的演变,目前验证码也越来越复杂,比较高端的如Google的I‘m not a robot,极验等等。这些新的反爬方式大多都基于用户行为分析用户点击前的鼠标轨迹来判断是访问者是程序还是人。 基于图像处理的图片验证码识别 这篇文章介绍的是破解一般“传统”的图片验证码的步骤。上面提到的极验(目前应用比较广)也已经可以被破解,知乎上有相关的专栏,这里就不重复了。 即便是传统的图片验证码,也是有难度区分的(图一是我母校研究生院官网上的验证码,基本形同虚设;图二则是某网站的会员登录时的验证码增加了一些干扰信息,字符也有所粘连),但是破解的流程大致是一样的。 图1 图2 ▐ 识别步骤 获取样本 从目标网站获取了5000个验证码图片到本地,作为样本。因为后期需要进行监督学习样本量要足够大。 样本去噪 ✎ 先二值化图片 这一步是为了增强图片的对比度,利于后期图片图像处理,代码如下: # 二值化图片 @staticmethod def two_value_img(img_path, threshold): img = Image.open(img_path).convert('L') # setup a converting table with constant threshold tables

算法之“算法”:所有机器学习算法都可以表示为神经网络

旧时模样 提交于 2020-08-16 10:04:54
大概从20世纪50年代的早期研究开始,机器学习的所有工作就都是随着神经网络的创建积累而来的。随后出现了一个又一个新算法,从逻辑回归到支持向量机。但是十分确切地说,神经网络是算法的算法及机器学习的巅峰。可以说,神经网络是对机器学习的普遍概括,而不是仅仅一次尝试。 这样说来,与其说神经网络是简单的算法,不如说是框架和概念,这是显而易见的,因为在构建神经网络时有很大的自由度——比如对于隐藏层&节点个数、激活函数、优化器、损失函数、网络类型(卷积神经网络、循环神经网络等)以及特殊层(批归一化、随机失活等)。 如果把神经网络看作是概念而非严格的算法,一个有趣的推论就应运而生了:任何机器学习算法,无论是决策树还是k近邻,都可以用神经网络表示。直觉上,我们可以通过几个例子理解,更严谨地讲,这种说法也可以通过数学方法证明。 我们先来定义一下什么是神经网络:它是一个体系结构,包括输入层、隐藏层和输出层,各层的节点之间互相连接。信息通过线性变换(权重和偏置)和非线性变换(激活函数)从输入层转换到输出层,有一些方法可以更新模型的可训练参数。 逻辑回归简单定义为一个标准回归,每个输入的乘法系数和附加截距都要通过一个sigmoid函数,这可以通过不包括隐藏层的神经网络来建模,结果是通过sigmoid输出神经元的多元回归;线性回归也可以通过将输出神经元激活函数替换为线性激活函数来建模

tensorflow与深度学习之二

无人久伴 提交于 2020-08-15 15:38:25
tensorflow是什么 tensorflow计算模型-计算图 2.1计算图的概念 2.2计算图的使用 tensorflow数据模型-张量 3.1张量的概念 3.2张量的使用 tensorflow运行模型-会话 tensorflow实现神经网络 第一个CNN网络 6.1CNN算法原理 6.2CNN是干什么的 6.3tensorflow实现CNN 6.4CNN模型发展 第一个RNN网络 7.1RNN算法原理 7.2RNN是干什么的 7.3tensorflow实现RNN 7.4RNN模型发展及变体 3、优化器如何选择 目前TensorFlow支持11种不同的经典优化器(参考TensorFlow API tf.train文档) tf.train.Optimizer tf.train.GradientDescentOptimizer tf.train.AdadeltaOptimizer tf.train.AdagtadOptimizer tf.train.AdagradDAOptimizer tf.train.MomentumOptimizer tf.train.AdamOptimizer tf.train.FtrlOptimizer tf.train.ProximalGradientDescentOptimizer tf.train.ProximalAdagradOptimizer

深度学习入门笔记(二):神经网络基础

主宰稳场 提交于 2020-08-15 05:37:06
前言 神经网络 是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应”.我们在机器学习中谈论神经网络时指的是“神经网络学习”,或者说,是机器学习与神经网络这两个学科领域的衣叉部分。 文章目录 前言 1. 神经元模型 2. 感知机与多层网络 2.1感知机 2.2 多层神经网络 3. 误差逆传播算法 4. 全局最小与局部极小 5. 其他常见神经网络 5.1 RBF网络 5.2 ART网络 5.3 SOM 网络 5.4 级联相关网络 5.5 Elman网络 1. 神经元模型 神经网络中最基本的成分是 神经元(neuron)模型 ,即上述定义中的“ 简单单元 ”。在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送 化学物质 ,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“ 阈值”(threshold), 那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。 1943年,将上还情形抽象为下图所示的简单模型,这就是一直沿用至今的 “M-P神经元模型” 。在这个模型中,神经元接收到来自 n 个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的 总输入值 将与神经元的 阈值 进行比较,然后通过“ 激活函数 ”(activation

12中主要的Dropout方法:如何应用于DNNs,CNNs,RNNs中的数学和可视化解释

风流意气都作罢 提交于 2020-08-14 20:18:21
作者:Axel Thevenot 编译:ronghuaiyang 原文链接: 12中主要的Dropout方法:如何应用于DNNs,CNNs,RNNs中的数学和可视化解释 ​ mp.weixin.qq.com 深入了解DNNs,CNNs以及RNNs中的Dropout来进行正则化,蒙特卡洛不确定性和模型压缩的方法。 动机 在深度机器学习中训练一个模型的主要挑战之一是协同适应。这意味着神经元是相互依赖的。他们对彼此的影响相当大,相对于他们的输入还不够独立。我们也经常发现一些神经元具有比其他神经元更重要的预测能力的情况。换句话说,我们会过度依赖于个别的神经元的输出。 这些影响必须避免,权重必须具有一定的分布,以防止过拟合。某些神经元的协同适应和高预测能力可以通过不同的正则化方法进行调节。其中最常用的是 Dropout 。然而,dropout方法的全部功能很少被使用。 取决于它是 DNN ,一个 CNN 或一个 RNN ,不同的 dropout方法 可以被应用。在实践中,我们只(或几乎)使用一个。我认为这是一个可怕的陷阱。所以在本文中,我们将从数学和可视化上深入到dropouts的世界中去理解: 标准的Dropout方法 标准Dropout的变体 用在CNNs上的dropout方法 用在RNNs上的dropout方法 其他的dropout应用(蒙特卡洛和压缩) 符号 标准的Dropout

Mxnet基础知识(一)

那年仲夏 提交于 2020-08-14 13:21:12
1. 基本数据结构   和pytorch等中的tensor类似,mxnet中的ndarray或者nd,用来操作矩阵或者张量数据。基本操作类似于Numpy, 支持计算,索引等。 创建矩阵 from mxnet import nd #或者 from mxnet import ndarray as nd #创建矩阵 x1 = nd.array([[ 1 , 2 ,], [ 3 , 4 ]]) x2 = nd.random.uniform( 1 , 10 , shape=( 3 , 3 )) # 3 * 3的矩阵 x3 = nd.random.randn( 2 , 3 ) # 2 * 3 的矩阵 x4 = nd.random.randint( 1 , 10 , shape=( 2 , 3 )) # 2 * 3 的矩阵 x5 = nd.ones(shape=( 2 , 2 )) # 2 * 2 的矩阵 x6 = nd.full(shape=( 2 , 3 ), val= 2 ) # 2 * 3 的矩阵, 值为2 print(x1.shape, x1.size, x1.dtype) #( 2 , 2 ) 4 < class ' numpy.float32 ' >   操作矩阵 x = nd.random.randn( 2 , 3 ) y = nd.random.randn( 2 , 3 )

写给程序员的机器学习入门 (五)

风流意气都作罢 提交于 2020-08-14 04:00:19
递归模型的应用场景 在前面的文章中我们看到的多层线性模型能处理的输入数量是固定的,如果一个模型能接收两个输入那么你就不能给它传一个或者三个。而有时候我们需要根据数量不一定的输入来预测输出,例如文本就是数量不一定的输入,“这部片非常好看” 有 7 个字,“这部片很无聊” 有 6 个字,如果我们想根据文本判断是正面评价还是负面评价,那么就需要使用支持不定长度 (即可以接收 6 个又可以接收 7 个) 输入的模型。时序性的数据数量也是不一定的,例如一个运动中的球,从某个时间点开始的第 0 秒在位置 1,第 1 秒在位置 3,第 2 秒在位置 5,那么正确的模型应该可以预测出第 3 秒在位置 7,如下图所示。当然,时序性的数据可以固定一个窗口(例如最近的 5 条数据)来处理,这样输入数量就是一定的,但灵活性就降低了,窗口设置过小可能会导致没有足够的信息用于预测输出,过大则会影响性能。 递归模型 (Recursive Model) 可以用于处理不定长度的输入,用法是一次只传固定数量的输入给模型,可以分多次传,传的次数根据数据而定。以上述例子来说,“这部片非常好看” 每次传一个字需要传 7 次,“这部片很无聊” 每次传一个字需要传 6 次。而递归模型每收到一次输入都会返回一次输出,有的场景只会使用最后一次输出的结果 (例如这个例子),而有的场景则会使用每一次输出的结果。 换成代码可以这样理解:

从卷积拆分和分组的角度看CNN模型的演化

一个人想着一个人 提交于 2020-08-14 02:18:29
博客: 博客园 | CSDN | blog 写在前面 如题,这篇文章将尝试从卷积拆分的角度看一看各种经典CNN backbone网络module是如何演进的,为了视角的统一,仅分析单条路径上的卷积形式。 形式化 方便起见,对常规卷积操作,做如下定义, \(I\) :输入尺寸,长 \(H\) 宽 \(W\) ,令长宽相同,即 \(I = H = W\) \(M\) :输入channel数,可以看成是tensor的高 \(K\) :卷积核尺寸 \(K \times K\) ,channel数与输入channel数相同,为 \(M\) \(N\) :卷积核个数 \(F\) :卷积得到的feature map尺寸 \(F \times F\) ,channel数与卷积核个数相同,为 \(N\) 所以,输入为 \(M \times I \times I\) 的tensor,卷积核为 \(N \times M \times K \times K\) 的tensor,feature map为 \(N \times F \times F\) 的tensor,所以常规卷积的计算量为 \[FLOPS = K \times K \times M \times N \times F \times F \] 特别地,如果仅考虑SAME padding且 \(stride = 1\) 的情况,则 \(F =

EAS:基于网络转换的神经网络结构搜索 | AAAI 2018

ぃ、小莉子 提交于 2020-08-13 18:58:44
论文提出经济实惠且高效的神经网络结构搜索算法EAS,使用RL agent作为meta-controller,学习通过网络变换进行结构空间探索。从指定的网络开始,通过function-preserving transformation不断重用其权重,EAS能够重用之前学习到的知识进行高效地探索新的结构,仅需要10 GPU days即可   来源:晓飞的算法工程笔记 公众号 论文: Efficient Architecture Search by Network Transformation 论文地址: https://arxiv.org/abs/1707.04873 Introduction   为了加速神经网络搜索过程,论文提出EAS(Efficient Architecture Search),meta-controller通过网络转化(network transformation)操作进行结构空间探索,操作包含拓宽层,插入层,增加skip-connections等。为了继续使用学习到的权重,基于function-preserving transformation来初始化新的不同参数的网络,再进一步训练来提高性能,能够显著地加速训练过程。对于meta-controller,则结合了最近的强化学习方法 Architecture Search by Net

【2万字干货】利用深度学习最新前沿预测股价走势

∥☆過路亽.° 提交于 2020-08-13 06:45:07
https://zhuanlan.zhihu.com/p/56509499 正文 在本篇文章中,我们将创建一个完整的程序来预测股票价格的变动。为此,我们将使用生成对抗性网络(GAN),其中LSTM是一种递归神经网络,它是生成器,而卷积神经网络CNN是鉴别器。我们使用LSTM的原因很明显,我们试图预测时间序列数据。为什么我们使用GAN,特别是CNN作为鉴别器?这是一个好问题,后面会有专门的部分介绍。 当然,我们将对每个步骤会进行详细的介绍,但最难的部分是GAN:成功训练GAN非常棘手的部分是获得正确的超参数集。因此,我们将使用贝叶斯优化(以及高斯过程)和深度强化学习(DRL)来决定何时以及如何改变GAN的超参数(探索与开发的两难境地)。在创建强化学习时,我们将使用该领域的最新进展,如Rainbow和PPO。 我们将使用许多不同类型的输入数据。随着股票的历史交易数据和技术指标,我们将使用NLP最新的进展(使用Bidirectional Embedding Representations from Transformers,BERT,一种传输学习NLP)创建情绪分析(作为基本分析的来源),傅里叶变换提取总体趋势方向,stacked autoencoders识别其他高级特征,寻找相关资产的特征组合,ARIMA用于股票函数的近似度等等,以便尽可能多地获取关于股票的信息、模式、相关性等