- 博客(20)
- 收藏
- 关注
原创 读写锁 ReentrantReadWriteLock 源码分析
本文内容:读写锁 ReentrantReadWriteLock 的源码分析,基于 Java7/Java8。阅读建议:虽然我这里会介绍一些 AQS 的知识,不过如果你完全不了解 AQS,看本文就有点吃力了。目录使用示例下面这个例子非常实用,我是 javadoc 的搬运工:// 这是一个关于缓存操作的故事class CachedData { Object data; vo...
2020-03-09 15:42:51
212
原创 并发基础之内存模型
本文将介绍一些比较基础的内容,注意,阅读本文需要一定的并发基础。本文的主要目的是让大家对于并发程序中的重排序、内存可见性以及原子性有一定的了解,同时要能准确理解 synchronized、volatile、final 几个关键字的作用。另外,本文还对双重检查形式的单例模式为什么需要使用 volatile 做了深入的解释。并发三问题这节将介绍重排序、内存可见性以及原子性相关的知识,这些也是...
2020-03-09 15:41:58
227
原创 Java7、8中的HashMap和ConcurrentHashMap全解析
网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚。终归是希望能降低大家学习的成本,不希望大家到处找各种不是很靠谱的文章,看完一篇又一篇,可是还是模模糊糊。阅读建议:四节基本上可以进行独立阅读,建议初学者可按照 Jav...
2020-03-09 15:39:50
234
原创 Spring IOC 容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。本文采用的源码版本是 4.3.11.RELEASE,算是 5...
2020-03-09 15:37:36
256
原创 Spring AOP 源码解析
文章目录前言本文使用的调试代码IOC 容器管理 AOP 实例ProxyFactory 详解基于注解的 Spring AOP 源码分析闲聊 InstantiationAwareBeanPostProcessor前言我们先来"猜猜" Spring 是怎么实现 AOP 的。在 Spring 的容器中,我们面向的对象是一个个的 bean 实例,bean 是什么?我们可以简单理解为是 BeanDefi...
2020-03-09 15:34:54
176
原创 【kaggle】Airbnb新用户的民宿预定结果预测
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport sklearn as sk%matplotlib inlineimport datetimeimport osimport seaborn as sns#数据可视化from datetime import datefrom skle...
2020-03-02 16:00:32
1865
原创 动手深度学习PyTorch(十三)GloVe
全局向量的词嵌入(GloVe)让我们先回顾一下word2vec中的跳字模型。将跳字模型中使用softmax运算表达的条件概率P(wj∣wi)P(w_j\mid w_i)P(wj∣wi)记作qijq_{ij}qij,即qij=exp(uj⊤vi)∑k∈Vexp(uk⊤vi),q_{ij}=\frac{\exp(\boldsymbol{u}_j^\top \boldsymbol{v}_i...
2020-02-22 14:06:34
618
原创 动手深度学习PyTorch(十二)word2vec
独热编码独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。举个例子,假设我们有四个样本(行),每个样本有三个特征(列),如图:我们的feature_1有两种可能的取值,比如是男/女,这里男用1表示,女用2表示。feature_2 和feature_3各有4种取值(状态)。one-...
2020-02-22 14:05:20
743
原创 动手深度学习PyTorch(十一)机器翻译
机器翻译机器翻译是指将一段文本从一种语言自动翻译到另一种语言。因为一段文本序列在不同语言中的长度不一定相同,所以我们使用机器翻译为例来介绍编码器—解码器和注意力机制的应用。1. 读取和预处理数据我们先定义一些特殊符号。其中“<pad>”(padding)符号用来添加在较短序列后,直到每个序列等长,而“<bos>”和“<eos>”符号分别表示序列的开始和结束...
2020-02-18 10:05:57
2059
1
原创 动手深度学习PyTorch(十)Seq2Seq、Attention
1. 编码器—解码器(seq2seq)我们已经在前两节中表征并变换了不定长的输入序列。但在自然语言处理的很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如英语输入:“They”、“are”、“watching”、“.”法语输出:“Ils”、“regardent”、“.”当输入和输出都是不定长序列时,...
2020-02-18 09:59:14
635
原创 动手深度学习PyTorch(九)GRU、LSTM、Bi-RNN
GRU上一篇介绍了循环神经网络中的梯度计算方法。我们发现,当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。通常由于这个原因,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。门控循环神经网络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较...
2020-02-15 16:25:34
1601
原创 动手深度学习PyTorch(八)RNN
RNNRNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系。RNN它并非刚性地记忆所有固定长...
2020-02-15 16:15:16
488
原创 图文解读机器学习十大常用算法
通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题。每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普。以后有时间再对单个算法做深入地解析。今天的算法如下:决策树随机森林算法逻辑回归SVM朴素贝叶斯K最近邻算法K均值算法Adaboost 算法神经网络马尔可夫...
2020-02-13 17:46:23
394
原创 动手深度学习PyTorch(七)pytorch实现线性回归
随着深度学习框架的发展,开发深度学习应用变得越来越便利。我们将介绍如何使用PyTorch实现线性回归的训练。生成数据集我们生成数据集。其中features是训练数据特征,labels是标签。num_inputs = 2num_examples = 1000true_w = [2, -3.4]true_b = 4.2features = torch.tensor(np.random.n...
2020-02-13 13:57:37
646
1
原创 动手深度学习PyTorch(六)线性回归
通过前面几篇文章的铺垫,接下来我们正式进入模型算法的学习中。线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图像分类、垃圾邮件识别、疾病检测等输出为离散值的问题都属于分类问题的范畴。softmax回归则适用于分类问题。由于线性回归和softmax回归都是单层神经网络...
2020-02-13 13:56:54
679
原创 动手深度学习PyTorch(四)权重衰减
动手深度学习PyTorch(二)模型选择、欠拟合和过拟合中我们观察了过拟合现象,即模型的训练误差远小于它在测试集上的误差。虽然增大训练数据集可能会减轻过拟合,但是获取额外的训练数据往往代价高昂。本节介绍应对过拟合问题的常用方法:权重衰减(weight decay)。方法权重衰减等价于 L2L_2L2 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参...
2020-02-13 13:55:19
1008
原创 动手深度学习PyTorch(三)模型选择、欠拟合和过拟合
训练误差和泛化误差在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛化误差可以使用之前介绍过的损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵...
2020-02-13 13:54:46
1108
原创 动手深度学习PyTorch(二)自动求梯度
在深度学习中,我们经常需要对函数求梯度(gradient)。PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。本节将介绍如何使用autograd包来进行自动求梯度的有关操作。概念上一节介绍的Tensor是这个包的核心类,如果将其属性.requires_grad设置为True,它将开始追踪(track)在其上的所有操作(这样就可以利用链式法则进行梯度...
2020-02-13 13:54:23
745
原创 HashMap和currentHashMap的知识总结
一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,...
2020-02-12 17:21:22
352
原创 动手深度学习PyTorch(一)PyTorch基础
引言疫情正当时,在家办公的时候对自己也不能太放松,正好年前学习了很多大数据生态以及机器学习相关的内容,感觉自己达到了一个瓶颈,正需要动手来慢慢消化。接下来就使用pytorch来一步步的实践自己的学习。首先第一篇文章用来持续记录在进行深度学习开发过程中常用的PyTorch常用方法,方便后期遗忘时翻阅。点乘使用torch.mul方法实现,也可直接使用*。当维度不同时,会触发广播机制。>...
2020-02-12 16:44:54
401
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人