Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

理解循环神经网络

发表于 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参数的)

阅读全文 »

机器学习基础

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

本文章参考《python深度学习》,看这部分内容之前已经学习过吴恩达机器学习视频的大部分内容,所以看这一章非常简单,易于理解,仅做简单的重点整理。

机器学习的四个分支

监督学习

监督学习是目前最常见的机器学习类型。给定一组样本(通常由人工标注),它可以学会将 输入数据映射到已知目标[也叫标注(annotation)]。

虽然监督学习主要包括分类和回归,但还有更多的奇特变体,主要包括如下几种。

  • 序列生成(sequence generation)。给定一张图像,预测描述图像的文字。序列生成有时 可以被重新表示为一系列分类问题,比如反复预测序列中的单词或标记。
  • 语法树预测(syntax tree prediction)。给定一个句子,预测其分解生成的语法树。
  • 目标检测(object detection)。给定一张图像,在图中特定目标的周围画一个边界框。这 个问题也可以表示为分类问题(给定多个候选边界框,对每个框内的目标进行分类)或 分类与回归联合问题(用向量回归来预测边界框的坐标)。
  • 图像分割(image segmentation)。给定一张图像,在特定物体上画一个像素级的掩模(mask)。
无监督学习

无监督学习是指在没有目标的情况下寻找输入数据的有趣变换,其目的在于数据可视化、 数据压缩、数据去噪或更好地理解数据中的相关性。

降维(dimensionality reduction)和聚类(clustering)都是众所周知的无监督学习方法。

阅读全文 »

预测房价:回归问题

发表于 2021-01-19 | 分类于 深度学习

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

预测房价:回归问题

回归问题预测一个连续值而不是离散的标签,例如,根据气象数据 预测明天的气温,或者根据软件说明书预测完成软件项目所需要的时间。

注意:不要将回归问题与logistic回归算法混为一谈;logistic回归不是回归算法,而是分类算法

波士顿房价数据集

预测 20 世纪 70 年代中期波士顿郊区房屋价格的中位数,已知当时郊区的一些数 据点,比如犯罪率、当地房产税率等。这里用到的数据集相对较少,只有 506 个,分为 404 个训练样本和 102 个测试样本。输入数据的 每个特征(比如犯罪率)都有不同的取值范围。例如,有些特性是比例,取值范围为 0~1;有 的取值范围为 1~12;还有的取值范围为 0~100,等等。

加载数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from keras.datasets import boston_housing

(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
print(train_data[0])
print(train_data.shape) # (404, 13)
print(test_data.shape) # (102, 13)

print(train_targets[:10])
print(train_targets.shape) # (404,)
print(test_targets.shape) # (102,)

# 输出如下:
[1.23247 0. 8.14 0. 0.538 6.142 91.7 3.9769 4. 307. 21. 396.9 18.72]
(404, 13)
(102, 13)
[15.2 42.3 50. 21.1 17.7 18.5 11.3 15.6 15.6 14.4]
(404,)
(102,)

如你所见,我们有 404 个训练样本和 102 个测试样本,每个样本都有 13 个数值特征,比如 人均犯罪率、每个住宅的平均房间数、高速公路可达性等。 目标是房屋价格的中位数,单位是千美元。

准备数据
阅读全文 »

Python Request库的cookie使用

发表于 2020-12-31 | 分类于 爬虫

Python Request库的cookie使用

认识Cookie

Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

cookie的属性

一般cookie所具有的属性,包括:

Domain:域,表示当前cookie所属于哪个域或子域下面。

对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名的。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其为值为默认的www.example.com。

Path:表示cookie的所属路径。

Expire time/Max-age:表示了cookie的有效期。expire的值,是一个时间,过了这个时间,该cookie就失效了。或者是用max-age指定当前cookie是在多长时间之后而失效。如果服务器返回的一个cookie,没有指定其expire time,那么表明此cookie有效期只是当前的session,即是session cookie,当前session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就应该被浏览器所删除了。

secure:表示该cookie只能用https传输。一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输。

httponly:表示此cookie必须用于http或https传输。这意味着,浏览器脚本,比如javascript中,是不允许访问操作此cookie的。

服务器发送cookie给客户端
阅读全文 »

深度学习目标检测破解滑动验证码

发表于 2020-11-22 | 分类于 深度学习

深度学习目标检测破解滑动验证码

前言

本文主要参考以下文章:

利用深度学习识别滑动验证码缺口位置

利用深度学习 PyTorch 识别滑动验证码缺口

这两篇文章都是同一位大佬所写,第一篇是利用华为云的一个深度学习平台做的(无需做任何编码工作),第二篇是通过PyTorch来做的,要自己代码实现。我这里主要参考第二篇文章,也直接在这里把作者使用到github项目列出来:

标注工具labelImg

PyTorch-YOLOv3

作者自己的破解项目

因为我在次之前接触过一点Keras,还没有接触过PyTorch,所以倾向于利用Keras来解决此问题,于是我就查找了keras-yolov3的相关资料,主要参考这两篇博客:

Keras-yolov3如何训练自己的数据集

keras-yolov3训练及测试详解

上面那篇博客过于具体过程讲的比较详细,一般按照教程来就可以,下面那篇是我遇到一些问题时找到的,关于这个项目的解析比较详细,可以帮助我们理解这个项目。

这篇博客主要使用这个github项目:

keras-yolov3

阅读全文 »
1…789…12
chenxi

chenxi

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