摘要:
代码仓库: https://github.com/brandonlyg/cute-dl 目标 上阶段cute-dl已经可以构建基础的RNN模型。但对文本相模型的支持不够友好, 这个阶段的目标是, 让框架能够友好地支持文本分类和本文生成任务。具体包括: 添加嵌入层, 为文本寻找高效的向量表示。 添加类 阅读全文
摘要:
目标 这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent Unit)实现. 添加LSTM(Long Short-term Memory)实现. 使用基于GRU和LSTM的RNN 阅读全文
摘要:
代码仓库: https://github.com/brandonlyg/cute dl (转载请注明出处!) 目标 上个阶段使用MLP模型在在MNIST数据集上实现了92%左右的准确率,达到了tensorflow同等模型的水平。这个阶段要让cute dl框架支持最简单的卷积神经网络, 并在MNIST 阅读全文
摘要:
代码仓库: https://github.com/brandonlyg/cute dl (转载请注明出处!) 目标 1. 增加学习率优化器, 加快模型在小学习率下模型的训练速度。 2. 使用MNIST数据集比较同一个模型使用不同学习率优化器的表现。 常见的学习率优化算法 在上个阶段,我们使用固定学习 阅读全文
摘要:
代码仓库: https://github.com/brandonlyg/cute dl 目标 1. 增加交叉熵损失函数,使框架能够支持分类任务的模型。 2. 构建一个MLP模型, 在mnist数据集上执行分类任务准确率达到91%。 实现交叉熵损失函数 数学原理 分解交叉熵损失函数 交叉熵损失函数把模 阅读全文
摘要:
代码仓库: https://github.com/brandonlyg/cute dl 目标 1. 为Session类增加自动分批训练模型的功能, 使框架更好用。 2. 新增缓解过拟合的算法: L2正则化, 随机丢弃。 实现自动分批训练 设计方案 增加Dataset类负责管理数据集, 自动对数据分批 阅读全文
摘要:
目标 完成框架设计文档中列出的基础类和需要在基础类中实现的接口。使用最简的单多层感知机(Multi Layer Perceptron)模型对框架进行初步验证, 因此, 除了框架的核心部分外, 还要实现一个全连接层,一个激活函数,一个优化器和一个损失函数。 框架代码简介 我把这个框架命名为cute 阅读全文
摘要:
"TOC" 前言 随着tensorflow2的发布, 构建一个复杂的深度学习模型变得简单很多。与此同时,更多的原理及细节被隐藏起来,很容易让人知其然而不知其所以然。如果要了解那些隐藏在简单表象下的原理和细节,首先想到的是阅读它的代码。然而这并不是一件容易的事,核心原理相关代码淹没在大量工程优化代码中 阅读全文
摘要:
准备工作 html示例: 把该示例保存到test.html中. 创建python文件,输入代码 后面所有的示例代码都会添加到这个文件中 Selector的主要方法 得到选中节点的字符串 get(): 得到选中节点列表中的第一个中节点, 并转换成字符串返回。 getall(): 得到选中节点列表中的所 阅读全文
摘要:
在使用scrapy抓取网页时, 如果遇到使用js动态渲染的页面, 将无法提取到在浏览器中看到的内容. 针对这个问题scrapy官方给出的方案是scrapy selenium, 这是一个把selenium集成到scrapy的开源项目, 它使用selenium抓取已经渲染好(js代码已经执行完成)的动态 阅读全文
摘要:
matplotlib.pyplot 是命令行风格的函数集,让matplotlib看起来像MATLAB.Each一样工作。pyplot函数能够对画布(figure)进行一些改变,例如:创建一个画布(figure), 在画布中创建一个绘图区域,在绘 阅读全文
摘要:
最近学习Logistic回归算法,在网上看了许多博文,笔者觉得这篇文章 "http://blog.kamidox.com/logistic regression.html" 写得最好。但其中有个关键问题没有讲清楚:为什么选择 log(h(x))作为成本函数(也叫损失函数)。 和线性回归算法相比,逻辑 阅读全文
摘要:
Matplotlib是一个用Python实现的绘图库。现在很多机器学习,深度学习教学资料中都用它来绘制函数图形。在学习算法过程中,Matplotlib是一个非常趁手的工具。 一般概念 图形(figure)类似于画布,它包含一个或多个子坐标系(axes)。至少有一个坐标系才能有用。 下面是一段简单的示 阅读全文
摘要:
Future模式是一个重要的异步并发模式,在JDK有实现。但JDK实现的Future模式功能比较简单,使用起来比较复杂。Netty在JDK Future基础上,加强了Future的能力,具体体现在: 吹了那么多牛,有一个关键问题还没弄清楚:Future到底是干嘛的?io.netty.util.con 阅读全文
摘要:
PooledByteBufAllocator负责初始化PoolArena(PA)和PoolThreadCache(PTC)。它提供了一系列的接口,用来创建使用堆内存或直接内存的PooledByteBuf对象,这些接口只是一张皮,内部完全使用了PA和PTC的能力。初始化过程分两个步骤,首先初始化一系列 阅读全文
摘要:
前面两章分析的PoolChunk和PoolSubpage,从功能上来说已经可以直接拿来用了。但直接使用这个两个类管理内存在高频分配/释放内存场景下会有性能问题,PoolChunk分配内存时算法复杂度最高的是allocateNode方法,释放内存时算法复杂度最高的是free方法。 PoolChunk中 阅读全文
摘要:
PoolChunk用来分配大于或等于一个page的内存,如果需要小于一个page的内存,需要先从PoolChunk中分配一个page,然后再把一个page切割成多个子页-subpage,最后把内存以subpage为单位分配出去。PoolSubpage就是用来管理subpage的。 一个page会被分 阅读全文
摘要:
PoolArena实现了用于高效分配和释放内存,并尽可能减少内存碎片的内存池,这个内存管理实现使用PageRun/PoolSubpage算法。分析代码之前,先熟悉一些重要的概念: page: 页,一个页是可分配的最小的内存块单元,页的大小:pageSize = 1 << n (n <= 12)。 c 阅读全文
摘要:
PooledByteBuf是使用PoolArena内存 阅读全文
摘要:
unpooled类型的ByteBuf内存管理 阅读全文