- 博客(75)
- 收藏
- 关注
原创 Representation Learning with Contrastive Predictive Coding 论文阅读笔记
前言这是DeepMind在2019年发的一篇paper,也是无监督学习领域非常经典的一篇论文。它介绍了一种叫做Contrastive Predictive Coding的技术用于对序列形式的数据(e.g. 文本,声音信号等等)进行表征(representation)学习。CPC 模型架构首先我们先来看一下论文里的这张cpc模型架构图。对于一组序列数据x,先通过一个编码器g_enc对序列的每个位置xt进行编码,转化为表征zt。然后这系列表征作为输入,传入一个自回归模型g_ar。该自回归模型在t时刻的
2022-04-26 00:11:10
4806
4
原创 python使用matplotlib库构建动态图表 --基于animation模块
前言熟悉python数据分析的朋友一定对matplotlib库不陌生,这是做数据可视化最常用的包之一。虽然我们经常使用mattplotlib做一些静态的图表,比如折线图,柱状图,饼图等等,但是某些时候,我们需要让我们的图表动起来。最近因为工作上的需要,我尝试构建了动态柱状图,来描述各个数据在时间维度上的变化情况。主要用到的就是matplotlib中的animation模块。下面我就来介绍一下我的基本需求以及如何用该模块来实现需求。需求描述给定4个基本渠道,我希望通过柱状图的形式来描述各个渠道指标随着时
2021-12-25 15:13:49
1453
原创 Pytorch中对tensor进行reshape的两种常用方法 .view() & .reshape()
介绍在使用Pytorch时,我们经常需要对一些tensor进行形状的改变以满足神经网络对输入数据的维度要求,我们最常用的两种方式就是.view() 以及 .reshape(), 除此之外,还有一种方法是.resize_(), 这种方法不仅可以改变数据的形状,同时还可以做到数据的部分截取。在这篇博文中,我会将前两种方式,即.view()和.reshape(),作为主要的介绍对象。1.view()我们通过调用.view()方法返回的结果是原始张量数据的另一个视图,即返回的张量与原始张量共享基础数据(但是
2021-11-17 11:58:26
13456
原创 在Pytorch中使用GPU加速模型训练
CPU->GPU当我们需要训练一个复杂模型的时候,使用CPU来进行训练往往会花费非常多的时间。因此,一般情况下,我们都会选择在GPU (Graphics Process Unit)环境下进行训练,因为其支持高度的并行计算,可以有效地加快数据处理的速度,减少模型训练时间。Pytorch支持CUDA并行计算框架,该框架是由NVIDIA公司推出的基于自家GPU的并行计算框架。CUDA 环境检验如果我们希望在Pytorch实现GPU加速,首先我们需要确认GPU环境是否可用,我们可以使用如下命令来che
2021-11-16 12:22:16
3307
原创 Pytorch 中关于in-place operation的小总结
问题引入有些时候,我们需要对Tensor中的某些部分进行一些重新赋值的操作(即in-place operation),但是如果该步骤涉及到一些需要计算梯度的叶子变量 (即requires_grad=True)时,Pytorch会报如下错误:a leaf Variable that requires grad has been used in an in-place operation, 原因是这种in-place operation是一种原位操作,是无法计算梯度的。比如下面这个简单的例子。import
2021-11-15 21:30:38
1502
原创 Statistics 基础之Hypothesis Tests3---F检验
前言在之前的两篇文章中,我介绍了t检验和卡方检验,在这篇文章中,我会讲述另一种重要的分布F分布以及与其相关的假设检验方法方差分析(ANOVA),首先我们先来看一下如何定义F分布。F分布事实上,F分布与卡方分布有很高的关联性,F统计量可以可以理解为是两个卡方统计量的商,更具体一点,假设随机变量U1符合自由度为v1的卡方分布,随机变量U2符合自由度为v2的卡方分布,那么我们称随机变量F=(U1/v1)/(U2/v2)属于自由度为v1,v2的F分布。这里需要注意的一点是当我们把v1,v2的顺序调换后,得到的
2021-10-12 13:31:00
1481
原创 Statistics基础之Hypothesis Tests2---卡方检验
介绍在之前的一篇文章中,我已经介绍了t分布以及t检验,在这篇文章中,我会来介绍另一种重要的分布–卡方分布(Chi-squared distribution) 和 与之相关的检验,卡方检验。卡方分布首先,我们知道我们可以通过标准化过程将一个满足正态分布的变量x转化为满足N(0,1)的标准正态分布z,自由度为n的卡方分布就是n个独立标准正态分布zi=1,2,3,…n的平方和的分布。对于一个这样的卡方分布,其均值为n,方差为2n。关于具体的推导,推荐这个视频给大家。下面是卡方分布的PDF和CDF的可视化结
2021-10-12 00:34:39
427
原创 Statistics 基础之Hypothesis Tests1---t检验
介绍假设检验是统计学中非常重要的一块内容,在现实生活中也有非常多的实际应用,比如A/B test时需要去评估实验组和对照组之间的差异是否显著。在这篇文章中,我会介绍常见的假设检验方法以及它们的应用场景,OK,我们开始。t分布在介绍t-检验前,我们先来简单介绍一下t分布。t分布主要用于描述样本统计量的分布,比如最典型的样本均值的分布。其分布总体呈现对称的形状,同时也受到sample size(或者说自由度)的影响,sample size越大,t分布越偏向于正态分布。当sample size趋向于无穷大时
2021-10-11 00:38:24
1119
原创 深度学习基础知识点review
前言这篇博客用来记录深度学习的一些基础知识点。问题Q1.当训练神经网络来解决分类问题时,应该选用MSE还是CE作为损失函数?Ans: 在解决分类问题时,网络的最后一层通常会是softmax(多分类)或者是sigmoid(二分类),将各个类别维度的输出结果都压缩到0-1的范围,且和为1。此时如果我们选择的损失函数是MSE,那么极易造成的结果的就是梯度消失问题。我们可以自行推导一下来验证...
2021-10-05 23:03:41
287
原创 记录一道有趣的python笔试题:匿名函数与闭包的综合运用
前言最近做某公司的数据挖掘岗的笔试题,遇到一道python题,让我印象深刻。如下def num(): return [lambda x:x*i for i in range(4)]print([m(?) for m in num()])如果打印的结果为[6,6,6,6],问❓处的数字应该为多少?分析首先,很显然的,num()函数返回的是4个匿名函数组成的列表,那么遍历这4个函数并调用的结果就是我们的打印结果。如果不仔细想清楚,会很自然的认为答案就是[0*❓,1*❓,2*❓,3*❓]。
2021-09-26 14:32:04
164
原创 使用pandas解决一个spam filter问题
前言昨天做了shopee的一个线上测试,其中最后一道问题是使用pandas进行垃圾评论的筛选,因为时间限制,昨天并没有写完,之后又重新做了一遍,这里做个总结。题目大意首先,题目定义,对于对于同一个用户,发送同样的评论次数超过3次,就被定义为垃圾评论。或者超过或等于2个不同用户发送同样的评论,也被定义为垃圾评论。举个例子,我们有如下的一个DataFrame。 name comment comment_id0 frank i am ok 11 frank i am ok
2021-09-26 12:16:06
252
原创 万字长文详解Python数据分析利器Pandas以及其与SQL的对比
前言作为Python中进行数据分析最重要的库之一,Pandas可以帮助我们轻松上手数据分析。在这篇文章中,我会详细总结Pandas的一些基本概念和操作语法,同时我也会将Pandas与SQL做一个简单的对比。话不多说,我们开始。首先我们先导入Pandas库以及与其高度相关的基础库Numpy。import pandas as pdimport numpy as np1.Pandas objects在pandas中,有3种基本的数据结构,分别是Series,DataFrame 以及Index。我们来一
2021-09-25 00:41:22
1114
原创 Spark SQL:基于Spark的结构化数据操作的API
Spark SQL介绍Spark SQL 是Spark中技术最复杂的的组件之一,它提供了在Spark程序中对结构化数据进行操作的功能,即SQL查询。具体来说,Spark SQL 有如下3个重要特点:1.Spark SQL 支持多种结构化数据格式的读取,比如JSON,Parquet或者Hive表。2.Spark SQL 支持从多种外部数据源读取数据,除了本地数据,HDFS以及S3之外,还可以通过JDBC等标准数据库连接器连接外部的关系型数据库系统。3.最后一点就是能够在Spark程序中自由的进行SQ
2021-09-23 12:53:36
581
原创 Leetcode 1501题: Countries You Can Safely Invest In
题目描述这道题,相对来说比较复杂,总共需要用到3张表,以及多次子查询。下面是3张表的信息。Person表±---------------±--------+| Column Name | Type |±---------------±--------+| id | int || name | varchar || phone_number | varchar |±-------
2021-09-17 20:36:03
364
原创 Leetcode 1484题: Group Sold Products By The Date
题目描述原始表有两个column,一个是产品的售卖日期,另一个是具体的产品名称。样例表题目要求:Write an SQL query to find for each date, the number of distinct products sold and their names.预期结果:My Answer其实这道题难度不大,唯一值得一提的就是如何在mysql进行字符串的拼接。我使用的是group_concat()函数,即对分组后的结果进行拼接。在函数中,我们可以自行定义拼接的符
2021-09-15 17:58:17
466
原创 Leetcode 205题:Isomorphic Strings
题目描述给定两个字符串,检查它们是否是结构相似的。对于结构相似的定义如下Two strings s and t are isomorphic if the characters in s can be replaced to get t.All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters m
2021-09-15 17:00:03
166
原创 Spark基础概念三部曲
>>Why use Spark?1.更高效的分布式计算我们知道在spark产生之前,就已经有非常经典的MapReduce计算框架存在了。但是MapReduce的一个很大的问题就是面对迭代计算或者数据的重复使用时效率很低,原因就是MapReduce计算过程中的中间结果都需要存储在HDFS磁盘中,而我们知道磁盘的I/O效率是很低的,这也导致了MapReduce在计算效率上的严重不足。为了解决这个问题,AMP实验室提出了一个新的数据结构,被称为RDD(Resilient Distributed
2021-09-14 01:14:24
172
原创 对于python中赋值操作的小总结
直接赋值赋值操作是一项非常基本但是重要的操作,在python中,最常见的赋值方式就是直接赋值,比如b=a。情况1:不可变对象(比如list/tuple/dict)对于直接赋值而言, 变量b和a都指向同一块内存地址,或者说指向同一个对象。因此对于一个不可变对象而言, 修改a的值等价于修改b。如下a=[1,2,[3,4]] # 不可变对象b=a # 直接赋值a[2].append(5)a.append(6)print(f'a={a}')print(f'b={b}')输出结果a=[1,
2021-09-13 16:37:23
624
原创 Leetcode 203题:Remove Linked List Elements
题目描述这是一道关于链表的题目,原题如下Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.稍微做个说明:给定一个值val,删除链表中值等于该val的所有节点,返回新链表的head节点。对于链表的删除操作,我们需要知道该节点的上一个节点的信息和下一个节点的信息。但是给定
2021-09-13 13:36:54
105
原创 Leetcode 1454题: Active Users (连续5天登录的用户)
题目描述这是一道非常经典的问题,连续n天登录的用户。之前在面试的时候也有被问到过,但是当时答的不好,这里在leetcode里再次碰到,所以做个总结,leetcode中问的是连续5天,但是我们希望将其拓展到连续n天。以下是题目中的原始表第一张是用户表,id列为主键。第二张表为登录信息,因为其中包含重复行,表示一个用户在同一天多次登录,所以这张表无主键。思路说实话,第一次遇到这个问题,我是懵逼的,唯一想到的方法就是创建多张子表,每张表的日期依次向前推一天,然后多表连接。但是这种方法显然低效。同时
2021-09-12 14:11:49
601
原创 Leetcode 202题:Happy Number的2种解法
题目描述确定某个数n是否是happy number。关于happy number的定义如下:Starting with any positive integer, replace the number by the sum of the squares of its digits.Repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does
2021-09-12 12:51:45
400
原创 Leetcode 1468题: Calculate Salaries
题目描述首先这是一张原始表,包含公司id,员工id,员工名字,以及工资。题目要求,将工资调整为税后工资。具体的税收标准为:The tax rate is calculated for each company based on the following criteria:0 If the max salary of any employee in the company is less than 1000 .0.24 If the max salary of any employee in t
2021-09-11 13:05:39
228
原创 Leetcode 191题:Number of 1Bits 的两种解法
题目描述给定一个32位的无符号整数(unsigned integer),求出有几位值为1。貌似这个问题也被称做Hamming weight,anyway,下面来说一下怎么解决这个问题。思路一是我自己的解法,思路很简单,就是通过对每一位依次进行&1运算,如果结果返回1,则当前位也就位1。下面是python代码。def hammingWeight_s1(n): """ :type n: int :rtype: int """
2021-09-11 12:08:15
209
原创 与变分自编码器(Variational Auto-Encoder)的决一死战
前言关于VAE,其实我在第一次自学李宏毅老师的课程时就已经写过一篇文章,之后在学校的Machine Learning2课程中也将原始paper-Auto-Encoding Variational Bayes 作为我的期末报告的对象。最近因为毕业论文又需要用到VAE,因此打算在这里对VAE再做一次复习与总结。回归原文0.问题现在我们有一批数据{x1,x2,…,xn}, 采样自某随机变量x。我们希望构建一个模型来探究x的生成过程。首先作者假设这个生成过程分为2步,其中涉及某个隐变量z。即1)某个随机变
2021-08-09 18:53:15
502
1
原创 基于Ubuntu虚拟机的Spark简单集群搭建(二)
前言在之前的一篇文章中,我介绍了spark集群搭建的第一步,hadoop集群的搭建,在这篇文章中,我会继续讲解Spark集群的搭建过程。OK,假设我们现在已经成功安装并且配置好了hadoop,接下来,我们开始正式进入Spark的安装过程。1.Spark安装首先我们需要在master节点上进行Spark的安装。我选择了2.0.2的版本,这里是下载链接。当然你也可以选择其他的版本,但是需要注意的是,如果你选择的Spark版本过高,可能导致无法与你的hadoop版本适配。OK,完成下载后,..
2021-07-31 23:06:23
981
1
原创 基于Ubuntu虚拟机的Spark简单集群搭建(一)
基本介绍作为一个Big Data领域的小白,最近自己尝试搭建了一个简易的spark集群。因此打算写篇博客记录一下整个过程。但是担心把所有部分放在一篇文章中可能导致文章过长,因此打算写成两篇。在这篇文章中,我会详细地介绍spark集群搭建的第一部分,hadoop集群的搭建。环境介绍虽说是一个集群,但是我总共只使用了两台ubuntu虚拟机,其中一个作为master节点,另一个作为worker节点。如果你想尝试使用更多的机器来搭建集群,也同样可以参考我的搭建过程,因为本质上差别不大。OK,下面我们
2021-07-24 00:57:37
2010
2
原创 二叉树结构的遍历总结以及python实现
前言作为一种经典的非线形数据结构,树的应用十分广泛。在这篇文章中,我会总结一下关于树结构的一个重要问题:遍历。和线形结构不同,树的遍历存在多种方式,最主要的3种就是前序,中序以及后序遍历。当然还有其他方式比如层次遍历等。OK,我们进入正题。前序遍历...
2021-07-13 20:57:24
331
原创 关于Linux Shell 的重定向问题小总结
前言最近在学习MIT 的一门课叫做6.NULL,在exercise部分看到一个>&2表示符,作为小白的我又懵逼了,这是个什么意思呢?在一顿搜索之后,才知道这是一种特别的重定向,下面结合别人的讲述以及自己的理解,来做个总结,有不对的地方也希望读者朋友们积极批评指正。文件描述符0,1,2当我们在linux执行某个程序或者命令时,都会至少打开如下3个文件描述符。0:标准输入(stdin)1:标准输出(stdout)2:标准错误输出(stderr)这里我来主要讨论一下.
2021-07-11 01:00:47
714
1
原创 SSH端口转发(port forwarding)基础知识
1.介绍我们知道SSH的一个重要作用就是连接远程机器(比如一台服务器)来实现对远程机器的操作。但是除此之外,SSH还可以用于构建机器之间的通信中介。举个简单的例子,我们有时会在本地(localhost)运行某些程序或应用,而每个程序或者应用都会运行在一个指定的端口下(port), 我们可以直接通过监听(listen)该端口来查看其他用户向该应用发出的请求(request)并做出响应(response)。但是如果我们希望对本地端口的请求,由远程机器来进行响应,换句话说,我们希望能将发送给本地端口的
2021-07-08 12:31:28
17812
1
原创 对于Transformer的Mask机制的再思考--Decoder部分
前言之前我曾经在一篇博客中有介绍关于Transformer模型的Encoder部分的mask,在这篇文章中,我打算将Decoder部分的mask机制也补充完整。OK,那么我们进入正题。Decoder结构首先我们先来看一下Decoder的结构,下面这张图取自google在2017年发的著名文章:Attention Is All You Need,也就是最初提出Transformer结构的文章。为了专注于Decoder的部分,关于原图中Encoder的部分我并没有截取。如果我们仔细观察D
2021-07-07 18:44:04
4257
3
原创 SSH(Secure Shell)基本介绍以及远程机器的连接方式
SSH介绍SSH是一种网络通信协议,可以让两台计算机之间实现加密通信。SSH采用的是服务器-客户端模式,顾名思义,也就是向服务器发出请求的部分(客户端 client)以及接收客户端请求的部分(服务端 service)。现阶段,我们使用的最流行的ssh主要指openssh。对于linux/unix系统而言,一般都会自带ssh,如果没有就需要自行安装。我们可以通过下面的命令查看ssh的版本。$ ssh -V以下是我的mac电脑的ssh版本信息SSH远程连接作为一种通信方...
2021-07-05 14:48:56
5450
原创 终端(Terminal)常用工具Tmux入门
基本介绍tmux 是一个终端复用器(terminal multiplexer),可以将终端窗口和在窗口中运行的session进行分离。一般情况下,我们需要自行安装该软件。我自己用的是mac电脑,因此采用brew进行的安装。$ brew install tmux如果是linux系统,比如ubtuntu,可以采用下面的命令$ sudo apt-get install tmux对了,这里顺便说一下,我自己在mac上使用brew安装时的一个问题,因为在安装时需要访问raw.Github.
2021-07-02 12:50:57
733
原创 Pytorch 中使用nn.CrossEntropyLoss的注意点(不需要额外的softmax)
起因最近在使用pytorch训练模型时,出现了loss下降非常缓慢的问题,想了很久都没有发现问题出在哪里。
2021-06-27 01:05:13
5646
6
原创 彻底理解confidence interval和credible interval
Confidence Interval也就是我们熟知的置信区间,比如我们常见的95%置信区间。那么究竟该如何理解这个置信区间呢?首先,我们需要明确一点,置信区间的概念是基于频率学派的,他们认为参数的真实值应该是固定的(但是我们不知道)。因此他们的做法就是通过不断的采样来构造参数估计的区间,以期望这个区间能够包含真实的参数值。事实上,置信区间就是这样一个基于采样的概念。具体来说,95%的置信区间就是说,假如我采样100组样本,基于100组不同的样本我可以构建出100个不同的置信区间。假如其中有95个区间都
2021-06-18 18:52:26
5108
1
原创 概率题之黑白球问题
问题题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:1、每次从桶里面拿出来两个球;2、如果是两个同色的球,就再放入一个黑球;3、如果是两个异色的球,就再放入一个白球;问:最后桶里面只剩下一个黑球的概率是多少?思路我开始遇到这道题时是懵逼的,因为用常规的方法比如推导概率公式是很难求解的。合理的思路有两种,下面我来分别介绍一下。1.找规律使用D=(黑球变化数,白球变化数)来记录每一轮拿球放球后两类球的变化情况。情况1.从桶里拿出两个黑球,那么意味着放入一个黑球。
2021-06-15 20:53:55
3983
1
原创 Hidden Markov Model(隐马尔可夫模型)----3.解码最优状态序列
回顾在之前的两篇文章中,我已经介绍了HMM的基本概念以及如何求解模型的参数。但是,还有一个问题仍然没有解决,那就是如何根据得到的模型得到最优的状态序列。在这篇文章中,我会来解决这个遗留的问题。最直接的求解方式采用局部最优的方式。那就是对于t=1,2,3,…T,都去选择那个使Ot发生概率最大的那个状态作为latent state。但是这种方法有一个问题,就是形成序列后发现存在某两个状态的转移概率为0,也就是说这样产生的序列可能是不可能存在的。那么该如何从全局最优的角度出发去思考这个问题呢?答案就是使用基
2021-06-09 21:42:37
231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人