Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

KNN 分类算法

发表于 2021-06-11 | 分类于 算法

KNN分类算法

KNN是机器学习种最简单的分类算法,而图像分类也是图像识别种最简单的问题,所以这里使用KNN来做图像分类,帮忙大家初步了解图像识别算法。

KNN(K-NearestNeighbor),即K-最近邻算法,顾名思义,找到最近的k个邻居,在前k个最近样本(k近邻)中选择最近的占比最高的类别作为预测类别。

KNN算法的计算逻辑:

  1. 给定测试对象,计算它与训练集中每个对象的距离;
  2. 圈定距离最近的k个训练对象,作为测试对象的邻居;
  3. 根据这k个近邻对象所属的类别,找到占比最高的那个类别作为测试对象的预测类别。

在KNN中,有两个方面的因素会影响KNN算法的准确度:一个是距离计算,另一个是k的选择。

一般使用两种比较常见的距离公式计算距离:

  1. 曼哈顿距离:
  2. 欧式距离:

KNN算法实现

阅读全文 »

反爬(七)

发表于 2021-05-18 | 分类于 爬虫

网站七处罚信息反爬破解

前情回顾:

本次破解的网站其实在前面的文章中已经有过了,具体可以参考这篇博客:

https://forchenxi.github.io/2019/09/20/spider-bankofchina/

本次是网站反爬有所升级,所以破解流程也是基于上一次的升级,所以看这篇文章前你需要先补习一下上面那篇。

正式开始:

首先跳过无限Debug

本次网站升级后,当我们按下F12开始调试时,浏览器会出现无限Debug的情况:

我们只要把鼠标放到Debugger前面的序号3上面,点击鼠标右键,选择Never pause here就可以解决了。

wzwschallenge参数

上一次破解时,我们需要获取的就是这样一个东西(省略了前缀):
/WZWSREL3poZW5nd3Vnb25na2FpLzEyNzkyNC8xMjgwNDEvMjE2MTQyMS9pbmRleC5odG1s?wzwschallenge=V1pXU19DT05GSVJNX1BSRUZJWF9MQUJFTDg2MzAxMQ==

通过发送这样一个请求来获取cookie,从而成功获取到数据。

而且当时,改变的只有wzwschallenge参数的值,前面那部分是固定的,下面来看下本次网站改版后是什么情况:

阅读全文 »

神经网络--激活函数

发表于 2021-05-16 | 分类于 深度学习

神经网络–激活函数

参考文章:

https://blog.csdn.net/tyhj_sf/article/details/79932893

https://zhuanlan.zhihu.com/p/73214810

什么是激活函数

单一神经元模型如下图所示:

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

激活函数的用途

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

阅读全文 »

手动推导BP网络

发表于 2021-05-15 | 分类于 深度学习

手动推导BP网络

本文章转载自CSDN

原作者:ZJE_ANDY

原文链接:https://blog.csdn.net/u014453898/article/details/88607537

BP网络神经元

从神经网络中拿出一个神经元j分析:

一:BP算法第一阶段:输入信息的正向传播阶段

阅读全文 »

理解循环神经网络

发表于 2021-04-23 | 分类于 自然语言处理

本文章参考《python深度学习》

理解循环神经网络

密集连接网络和卷积神经网络都有一个主要特点,就是没有记忆,它们单独处理每个输入,在输入与输入之间没有保存任何状态。对于这 样的网络,要想处理数据点的序列或时间序列,你需要向网络同时展示整个序列,即将序列转换成单个数据点。例如,你在IMDB 示例中就是这么做的:将全部电影评论转换为一个大向量, 然后一次性处理。这种网络叫作前馈网络(feedforward network)。

与此相反,当你在阅读这个句子时,你是一个词一个词地阅读(或者说,眼睛一次扫视一 次扫视地阅读),同时会记住之前的内容。这让你能够动态理解这个句子所传达的含义。生物智能以渐进的方式处理信息,同时保存一个关于所处理内容的内部模型,这个模型是根据过去的信息构建的,并随着新信息的进入而不断更新。

循环神经网络(RNN,recurrent neural network)采用同样的原理,不过是一个极其简化的版本:它处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息。实际上,RNN 是一类具有内部环的神经网络。

在处理两个不同的独立序列(比如两条不同的IMDB 评论)之间,RNN 状态会被重置,因此,你仍可以将一个序列看作单个数据点,即网络的单个输入。真正改变的是,数据点不再是在单个步骤中进行处理, 相反,网络内部会对序列元素进行遍历。

在介绍使用Numpy模拟实现RNN的前向传递之前先补充一些Numpy中张量点积的知识

阅读全文 »

深度学习用于文本和序列

发表于 2021-03-15 | 分类于 自然语言处理

本文章参考《python深度学习》

深度学习用于文本和序列

深度学习用于自然语言处理是将模式识别应用于单词、 句子和段落,这与计算机视觉是将模式识别应用于像素大致相同。

文本向量化

与其他所有神经网络一样,深度学习模型不会接收原始文本作为输入,它只能处理数值张量。 文本向量化(vectorize)是指将文本转换为数值张量的过程。它有多种实现方法。

  • 将文本分割为单词,并将每个单词转换为一个向量。
  • 将文本分割为字符,并将每个字符转换为一个向量。
  • 提取单词或字符的 n-gram,并将每个 n-gram 转换为一个向量。n-gram 是多个连续单词 或字符的集合(n-gram 之间可重叠)。

将文本分解而成的单元(单词、字符或 n-gram)叫作标记(token),将文本分解成标记的过程叫作分词(tokenization)。英文分词相较中文分词简单一些,本身句子的空格就分割了不同的单词,而中文分词需要考虑一些歧义性等问题,比较复杂,后面会有单独的篇章介绍中文分词,这里是针对英文的文本向量化处理。

所有文本向量化过程都是应用某种分词方案,然后将数值向量与生成的标记相关联。这些向量组合成序列张量,被输入到深度神经网络中。

将向量与标记相关联的方法有很多种。这里将介绍两种主要方法:

  1. 对标记做one-hot 编码(one-hot encoding)

  2. 标记嵌入[token embedding,通常只用于单词,叫作词嵌入(word embedding)]。

阅读全文 »

深度学习用于计算机视觉(下篇)

发表于 2021-03-12 | 分类于 深度学习

本文章参考《Python深度学习》

深度学习用于计算机视觉(下篇)

本系列文章内容较多,共分为三篇,主要包括以下内容:

  • 理解卷积神经网络(convnet)
  • 使用数据增强来降低过拟合
  • 使用预训练的卷积神经网络进行特征提取
  • 微调预训练的卷积神经网络
  • 将卷积神经网络学到的内容及其如何做出分类决策可视化

上篇主要包括前两点,中篇包括三四点,下篇主要围绕第五点。

卷积神经网络的可视化

人们常说,深度学习模型是“黑盒”,即模型学到的表示很难用人类可以理解的方式来提取和呈现。虽然对于某些类型的深度学习模型来说,这种说法部分正确,但对卷积神经网络来说绝对不是这样。卷积神经网络学到的表示非常适合可视化,很大程度上是因为它们是视觉概念的表示,这篇文章介绍三种最容易理解也最有用的可视化方法。

  • 可视化卷积神经网络的中间输出(中间激活):有助于理解卷积神经网络连续的层如何 对输入进行变换,也有助于初步了解卷积神经网络每个过滤器的含义。
  • 可视化卷积神经网络的过滤器:有助于精确理解卷积神经网络中每个过滤器容易接受的 视觉模式或视觉概念。
  • 可视化图像中类激活的热力图:有助于理解图像的哪个部分被识别为属于某个类别,从 而可以定位图像中的物体。

对于第一种方法(即激活的可视化),我们将使用 前面在猫狗分类问题上从头开始训练的小型卷积神经网络。对于另外两种可视化方法,我们将使用前面介绍的 VGG16模型。

阅读全文 »

深度学习用于计算机视觉(中篇)

发表于 2021-02-26 | 分类于 深度学习

本文章参考《Python深度学习》

深度学习用于计算机视觉(中篇)

本系列文章内容较多,共分为三篇,主要包括以下内容:

  • 理解卷积神经网络(convnet)
  • 使用数据增强来降低过拟合
  • 使用预训练的卷积神经网络进行特征提取
  • 微调预训练的卷积神经网络
  • 将卷积神经网络学到的内容及其如何做出分类决策可视化

上篇主要包括前两点,中篇包括三四点,下篇主要围绕第五点。

使用预训练的卷积神经网络

​ 深度学习模型本质上具有高度的可复用性,比如,已有一个在大规模数据集上训练的图像分类模型或语音转文本模型,你只需做很小的修改就能将其复用于完全不同的问题。

​ 想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络。 预训练网络(pretrained network)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训练好。如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以有效地作为视觉世界的通用模型,因此这些特征可用于各种不同的计算机视觉问题,即使这些新问题涉及的类别和原始任务完全不同。

​ 举个例子,你在 ImageNet 上训练了一个网络(其类别主要是动物和日常用品),然后将这个训练好的网络应用于某个不相干的任 务,比如在图像中识别家具。这种学到的特征在不同问题之间的可移植性,是深度学习与许多早期浅层学习方法相比的重要优势,它使得深度学习对小数据问题非常有效。

阅读全文 »

深度学习用于计算机视觉(上篇)

发表于 2021-02-05 | 分类于 深度学习

本文章参考《Python深度学习》

深度学习用于计算机视觉(上篇)

本系列文章内容较多,共分为三篇,主要包括以下内容:

  • 理解卷积神经网络(convnet)
  • 使用数据增强来降低过拟合
  • 使用预训练的卷积神经网络进行特征提取
  • 微调预训练的卷积神经网络
  • 将卷积神经网络学到的内容及其如何做出分类决策可视化

上篇主要包括前两点,中篇包括三四点,下篇主要围绕第五点。

卷积神经网络简介

我们先通过一个简单的例子来展示什么卷积神经网络,它是Conv2D层和MaxPooling2D层的堆叠。

1
2
3
4
5
6
7
8
9
10
11
from keras import layers
from keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.summary()

卷积神经网络接收形状为 (image_height, image_width, image_channels) 的输入张量(不包括批量维度)。本例中设置卷积神经网络处理大小为 (28, 28, 1) 的输入张量, 这正是 MNIST 图像的格式。

model.summary()可以用来查看卷积神经网络的架构

阅读全文 »

网易易盾滑动验证码破解(补充篇)

发表于 2021-01-30 | 分类于 爬虫

网易易盾破解补充篇

之前写了两篇易盾破解的文章,分别讲了fp、cb、data等参数的破解,以及额外的图像识别,但是实际上整个破解过程并不完整,我在文章中有提到watchman这块没有破解,这篇文章对此进行补充。

acToken

我在之前的文章中一直把acToken参数当做定值来处理的,但是实际上其并不是定值,我们先来看下其生成过程,点击check请求的调用栈(get请求是没有acToken参数的)

阅读全文 »
1…789…12
chenxi

chenxi

120 日志
12 分类
224 标签
Links
  • Docle
  • Swift
© 2025 chenxi
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4