自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 玩转python(8)图形界面随想

两年没写博客了,这两年自己主导设计和开发了不少项目,收获颇丰,以后的博客中我会逐一介绍(不限于玩转python系列)。我为什么要做图形界面?假设你在负责一个项目,如果你的用户和我们一样是技术人员,显然应该留给用户更多的选择,使自己的产品尽可能灵活。直白一点就是:我提供足够的功能就行,怎么用是你的事。某种意义上说,这其实是把责任抛给了用户(这里没有贬低的意思)。但当你的用户是技术小白,这样做是不行了,此时需要遵循的原则是,尽量屏蔽技术细节,用俗语代替术语,尽可能使用图形界面。最后一点尤为重要,命令行对于

2020-10-26 20:53:02 216

原创 玩转python(7)python多协程,多线程的比较

前段时间在做一个项目,项目本身没什么难度,只是数据存在一个数据接口服务商那儿,这就意味着,前端获取数据需要至少两次http请求,第一次是前端到后端的请求,第二次是后端到数据接口的请求。有时,后端接收到前端的一次请求后,可能需要对多个接口进行请求,按照传统串行执行请求的方法,用户体验肯定是非常糟糕了,而且对计算资源也是极大的浪费,正好前段时间学习了协程和线程的知识,所以我花了一些时间,对几种可行方案...

2018-06-25 20:42:05 1619 4

原创 玩转python(6)协程

多任务系统一般都需要解决一个问题:多个任务如何调度。抢占式调度就是一种很常见的任务调度机制。以单核模式下的进程调度为例,一个进程处于运行状态,其他的处于就绪队列,等到当前运行的进程放弃CPU的使用权,系统将CPU立刻分配给新到达的进程,由于任务的执行顺序是不确定的,看上去就像一堆任务在竞争CPU的使用权,所以这种多任务运行方式叫做“多任务竞争”。与之对应的是非抢占式调度。当前任务会持续执行下去直到...

2018-05-31 16:59:27 295

原创 玩转python(5)生成器的原理

函数的调用满足“后进先出”的原则,也就是说,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子。显然,内存中以“后进先出”方式处理数据的栈段是最适合用于实现函数调用的载体,在编译型程序语言中,函数被调用后,函数的参数,返回地址,寄存器值等数据会被压入栈,待函数体执行完毕,将上述数据弹出栈。这也意味着,一个被调用的函数一旦执行完毕,它的生命周期就结束了。在python这样的解释型语言...

2018-05-19 11:27:52 958

原创 玩转python(4)生成器

生成器是python中一个很有趣的概念,不只是有趣,而且很实用。我们经常需要生成数组,一般来说,数组占据内存的大小和数组的长度有直接关系。数组中的元素越多,长度越长,占据的空间也越大。下面的代码中,我们初始化3个列表,并分别存放10,100,1000个元素:import sysl1 = list()l2 = list()l3 = list()for i in range(10):...

2018-05-18 09:09:45 173

原创 玩转python(3)全局解释器锁学习心得

这几天我在GitHub上读了GIL的实现和python主循环的源码,总算对python的GIL有了大概的理解,现在来分享一下心得。 GIL源码上有这样一段注释: The GIL is just a boolean variable (locked) whose access is protected by a mutex (gil_mutex), and whose changes ar...

2018-05-09 19:47:47 324

原创 玩转python(2)多线程的历史2

线程这个概念早在多核CPU出现之前就提出来了,单核时代的多线程主要是为了让CPU尽量不处于空闲状态,使其计算能力始终能得到利用。但本质上讲,在任意时刻只有一个线程在执行。尽管任意时刻只有一个线程在执行,但是依然有些问题需要解决,其中最重要的就是线程安全。这个问题的来源很简单,我之前说过,CPU对指令是一条一条执行的,不过要注意的是,高级语言中的一行代码在汇编语言层面上,可能由多条汇编指令组成的...

2018-05-08 15:21:09 181

原创 玩转python(1)多线程的历史1

2017年年底,我从老东家离职。离职后我和小伙伴创业,负责确定技术栈以及服务端的开发部署。在进行了综合考虑之后,我决定使用python作为我们的后端语言。虽然只有一年半的工作经验,还是个菜鸟,但是我也明白一个优秀的程序员不应该只满足功能的实现,更要对性能有不懈的追求,这里要提到的多线程就是一种提高性能的手段。 不过,python的多线程和其他的语言的多线程是有所不同的。我上一份工作是java开发...

2018-05-07 17:15:10 131

原创 抽象代数学习笔记(16)子环

定义:设(R,+,∗)(R,+,∗)(R,+,*)是个环,SSS是RRR的一个非空子集。如果+++和∗∗*也是SSS的运算,且(S,+,∗)(S,+,∗)(S,+,*)也是个环,则说(S,+,∗)(S,+,∗)(S,+,*)是(R,+,∗)(R,+,∗)(R,+,*)是的一个子环。在所指运算不混淆时,简称SSS是RRR的一个子环。在介绍环的时候,提到的偶数环是有理数环的子环。 (R,...

2018-04-08 19:23:08 2114

原创 抽象代数学习笔记(15)环

定义:设集合RRR上有两种二元运算,一个叫加法,记为+++;一个叫乘法,记为∗∗*,且(R,+)(R,+)(R,+)是个交换群;乘法∗∗*在RRR上是结合的;对任意a,b,c∈Ra,b,c∈Ra,b,c\in R,都有a∗(b+c)=a∗b+a∗c,(b+c)∗a=b∗a+c∗aa∗(b+c)=a∗b+a∗c,(b+c)∗a=b∗a+c∗aa*(b+c)=a*b+a*c,(b+c)*a=b*...

2018-03-04 18:13:11 3014

原创 卷积神经网络学习笔记与心得(5)全连接层

经过若干层卷积和池化后,图片的维度会越来越小,数量会越来越多,最终进入全连接层并分类输出(传统的神经网络)。由于全连接层会有大量的连接权值,模型过拟合的可能性会增加。对此,研究者提出过稀疏连接和Dropout等方法,降低过拟合的可能性。Dropout是一种简单且有效的防止过拟合的方法。它用于训练阶段的全连接层:每次训练时,随机使全连接层的某些节点不更新,但是将他的权重保留下来。Dropou...

2018-02-27 14:25:27 2948

原创 卷积神经网络学习笔记与心得(4)池化

图片经过卷积、激活后的结果一般带有大量原图信息。上图中卷积核提取的是竖直方向上的连续像素,但是,被增强的像素只占了结果的1/3,对于多层网络,其余重要性较低的信息也被传入了下一层网络,造成了不必要的浪费,因此需要用池化对卷基层得到的结果做聚合统计。池化的理论基础是:图像相邻位置的像素是相关的,即使间隔一段尺寸对图像进行采样,得到的结果依旧能保持大部分信息。常用的池化方式有最大池化和均值池化...

2018-02-25 20:34:35 858

原创 卷积神经网络学习笔记与心得(3)卷积

数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值。从卷积的效果来看,在二维图像上进行卷积时,卷积核对所在区域上符合某种条件的像素赋予较多的权重,其他的像素赋予的权重较少,这可以看作是一种滤波行为,因此卷积神经网络的卷积核有时也被称为滤...

2018-02-11 14:47:14 685

原创 卷积神经网络学习笔记与心得(1)前言

博主是一名刚毕业一年的本科生。去年的这个时候,我有幸参与了一个关于字符识别的实验性项目,对于一个打算致力于数据挖掘和机器学习的本科生而言,这样的机会很是难得。刚接触这个项目的时候我和同事很茫然,不知道应该把重点放在何处,加之我在本科阶段做过一个简单的字符识别系统,误以为识别的实现难度不大,因此我和同事没有过多的关注识别环节,而是将大把的精力和时间花在图像的预处理,纠错等环节上。 经过一段时间的摸...

2018-02-09 10:31:08 310

原创 卷积神经网络学习笔记与心得(2)数据集

机器学习领域有很多现成的数据集,它们由个人或组织制作、整理,且向外界公开下载,比如在字符识别领域有mnist数据集等,数据挖掘领域有Iris,Adult数据集等。这些数据集为相关技术研究者提供了很大的便捷,有了这些资源,研究者就可以把更多的精力放在模型的研究上,可以说这些数据集的制作整理者对推动数据挖掘和机器学习的发展做出了巨大的贡献。不过,在不少情况下,这些数据集未必能满足我们的需求,这时就要...

2018-02-09 10:27:42 416

原创 抽象代数学习笔记(14)商群

上一次提到“商”这个字眼,还是在讲商集的时候。我们将商集看做是以等价关系对集合的一个划分。现在我们更进一步,提出商群的概念。如果 NNN 是不变子群,那么利用 NNN 可以导出 GGG 上的一个等价关系, a ba ba~b 当且仅当 a−1b∈Na−1b∈Na^{-1}b\in N ,也就是 a,ba,ba,b 同属于 NNN 的一个左陪集。(证明: 首先a−1a∈...

2018-02-08 21:15:29 4835

原创 机器学习系列-支持向量机

支持向量机支持向量机(SVM)是基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。给定训练样本集D=(x1,y...

2018-01-03 11:06:40 651

原创 机器学习系列-k均值

K-means原理聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x。 K-means也是聚类算法中最简单的一种。在聚类问题中,给我们的训练样本是x(1),...,x(m)x(1),...,x(m){x^{(1)},...,x^{(m)}},每一个x(i)∈Rnx(i)∈Rnx^{(i)}\in{\...

2018-01-03 10:42:07 295

原创 机器学习系列-Bagging与随机森林

Bagging集成学习算法有两个大类:一个是Boosting,代表算法是AdaBoost;另一个是Bagging,本文介绍的随机森林是它的一个变种。Bagging也叫自举汇聚法(bootstrap aggregating),它在原始数据集上通过有放回抽样重新选出TT个包含mm条数据的新数据集来训练分类器。也就是说这些新数据集是允许重复的。使用训练出来的分类器集合来对新样本进行分类,然后用多数投票或者

2017-11-26 09:49:49 510

原创 机器学习系列-AdaBoost

集成学习在一般经验中,如果把好坏不等的东西掺到一起,那么通常结果会是比最 坏的要好一些,比最好的要坏一些。这就是集成学习的出发点。如果把多个学习器结合起来,是否能获得比最好的单一学习器更好的性能呢?集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。集成学习一般先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来。个体学习器

2017-11-24 17:02:31 335

原创 机器学习系列-最近邻分类器

最近邻分类器消极学习方法一般的分类器,比如决策树和支撑向量机,只要有训练数据可用,它们就开始学习从输入属性到类标号的映射模型,这类学习策略被称为积极学习方法。与之相对的是消极学习算法,它的策略是推迟对训练数据的建模,在需要分类测试样例时再进行。消极学习的一个例子是Rote分类器,它记住整个训练集,只有当测试样例和某个训练样例完全匹配时才进行分类。这个分类算法有个明显的缺陷就是经常会出现测试样例不能被

2017-11-22 15:27:15 1394

原创 机器学习系列-主成分分析

PCA降维一些机器学习算法在处理高维数据时,性能会出现明显下降,这就是所谓的“维度灾难”,为此人们开始对算法进行改进。与此同时,对降维的需求催生了降维算法,比如本文要介绍的主成分分析(Principal Component Analysis,PCA)。在开始本文的主要内容之前,我想先举一个关于降维的例子:有5个点,坐标如下表所示: id x y 1 5.0 1.4 2

2017-11-22 13:34:34 836 2

原创 机器学习系列-朴素贝叶斯分类器

贝叶斯分类器什么是贝叶斯分类器贝叶斯分类器是一类分类器的总称,这些分类器均以贝叶斯定理为基础,故统称为贝叶斯分类器。这些分类器中最简单的是朴素贝叶斯分类器,它几乎完全按照贝叶斯定理进行分类,因此我们从朴素贝叶斯分类器说起。贝叶斯定理:贝叶斯定理是概率论中一个比较重要的定理,在讲解贝叶斯定理之前,首先回顾一下贝叶斯定理的基础:条件概率和全概率公式。条件概率:设A,BA,B是两个事件,且P(A)>0P

2017-11-22 13:16:08 413

原创 抽象代数学习笔记(13)群的同态

抽象代数学习笔记(13)群的同态前面在证明一个映射是否为同构映射的时候,都是先证明映射是一个双射,再证明它是否为同构映射。一个映射为双射是它为同构映射的必要条件。一般来说,条件越多,满足所有条件的可能性就越小,所以人们往往会推而广之,减少条件,使某个概念满足更加普遍的情况(就像矩阵的逆和它的左逆,右逆)。对于同构来说,就有一个更加一般性的概念 — 同态。同态并不要求映射是一个双射,只需要是个满射即可

2017-10-10 16:18:25 5146

原创 抽象代数学习笔记(12)群上的可逆映射

上一篇博客介绍了几种重要的群上的可逆变换,由于篇幅限制,没有写完,剩余的内容将在这一篇中了结。 设 GG 是个群, aa 是 GG 的一个固定元素,通过 aa 可以导出 GG 到 GG 的映射 γ\gamma , γa(x)=axa−1\gamma_a(x)=axa^{-1} 那么, γa\gamma_a 是 GG 到 GG 的同构映射,称为内自同构。这个命题的证明和左乘变换的证明

2017-09-25 17:33:37 1888

原创 抽象代数学习笔记(11) 群上的可逆变换

之前写对称群的时候提到过,任意非空集合 AA 上的所有可逆映射在映射合成下构成群。现在,我们把这种构成群的方式从集合推广到群上,也就是群 GG 上所有可逆变换在映射合成下构成的群 I(G)I(G) 。这里先说一个结论:任意群必然同构于 I(G)I(G) 的一个子群。其意义在于,一般的群因为提出背景不同,在形式上千差万别,有了这个结论,只要研究群上可逆映射构成的群,其他的群也就清楚了。这也是自开始学习

2017-09-18 16:21:01 3712

原创 抽象代数学习笔记(10) 群的同构

历史上,不同的文明发明了他们自己的计数方法。比如 {一,二,三...},{one,two,three...}\{一,二,三...\},\{one,two,three...\} 等等。但是在数学上,我们认为这些计数方法本质是一样的,只是符号不同。或者说这些计数方法之间可以通过某种方式对应起来,当我们说计数方法AA的一个符号aa,就可以对应到计数方法BB的一个符号bb 。于是,就有了同构的概念。 设

2017-09-08 15:40:29 5112

原创 抽象代数学习笔记(9)阶数

在抽象代数中有两个概念可以被称为“阶数”: 群 GG 中元素的个数称为 GG 的阶数,当 GG 中有无限多个元素,称 GG 是无限阶的;当 GG 中元素个数有限,称 GG 是有限阶的。 对于群 GG 的元素 aa,如果有非负整数 nn,使得 an=ea^{n}=e,且 nn 为使上等式成立的最小的非负整数,则说a是有限阶的,阶数为 nn ,如果找不到这样的数,则说 aa 是无限阶的。也

2017-08-19 20:44:13 2361

原创 抽象代数学习笔记(8)循环群

在讲子群的时候,我们提出了生成子群的概念 <S><S>,特别的,如果 S={s},有<S>=<s>S=\{s\},有<S>=<s>。根据这些,我们可以引出循环群的概念: 群GG称为循环群,如果有 g∈Gg\in G使得G=<g>G=<g>。其实之间说过的旋转变换就可以以循环群的形式出现。比如: g=[cos120−sin120sin120cos120]g=\begin{bmatrix} co

2017-07-28 21:09:14 4140

原创 抽象代数学习笔记(7)对称群与置换群

抽象代数学习笔记(7)对称群与置换群我刚接触抽象代数的那段时间,一直在考虑一个问题,抽象代数有什么实际应用。后来听说,群在研究一些具有对称性质的对象时有奇效。于是我试着用群去描述一些简单的几何变换,发现确实如此。这就是我在置换那篇文章的最后让大家思考等边三角形变换的原因。如果大家在看群的定义时,回想一下集合 S={1,2,...n}S=\{1,2,...n\} 上的所有置换,不难发现这些置换也能构

2017-07-22 20:11:21 15612

原创 抽象代数学习笔记(6)群与子群

前面的几篇文章介绍了抽象代数的基础,现在可以接触一种基本的代数结构—群。之前说过,代数结构就是在一个集合上定义一个运算。群也是如此,只是,群需要满足一些要求。 一个集合GG以及定义在这个集合上的运算*满足下列条件: * 运算*满足结合律; * 运算*有一个单位元ee; * 集合GG 中的每一个元素在运算* 有逆元,即GG中任意元素gg,有g−1g^-1使得 g∗g−1=g

2017-07-15 20:07:48 8435

原创 抽象代数学习笔记(5) 运算

“运算”这个名词大家从小学就应该接触了,比如“四则运算”等等。不过在那个时候,运算一直是一个很模糊的概念,究竟什么是运算?我们接触的“加减乘除”为什么都被称作运算,它们在本质上有相同的地方? 设SS是个非空集合,把S×SS×S到SS的映射称之为SS上的二元运算,简称为SS上的运算.和我们之前说的映射一样,运算的定义离不开集合,因此谈论运算一定要说清楚运算是定义在哪个集合上。例如:映射f:x/y

2017-07-15 11:21:16 1502

原创 抽象代数学习笔记(4)置换

这篇文章将要介绍一个重要的概念—置换。 非空有限集A到A本身的一个可逆映射称为A的一个置换。一个含有n个元素的集合可以写成这种形式: {a1,a2,...,an}\{a_1,a_2,...,a_n\} 置换的表达式如下: [a1P(a1)a2P(a2)......anP(an)]\begin{bmatrix} a_1 & a_2 & ... &a_n \\ P(a_1) & P(a_2)

2017-07-04 15:18:03 3737

原创 抽象代数学习笔记(3)映射

抽象代数学习笔记(3)映射映射的概念高中数学中就已经引入了,最近我翻看了一下高中数学教材,书中对映射做了这样的定义: 映射的定义:设A、B是两个非空集合,如果存在一个法则ff,使得对A中的每个元素a,按法则ff,在B中有唯一确定的元素b与之对应,则称ff为从A到B的映射,记作f:A→Bf:A→B。 其中,b称为元素a在映射f下的象,记作: b=fb=f(a); a称为b关于映射f的原象。集合

2017-07-03 15:11:01 2501

原创 抽象代数学习笔记(2)关系

1、关系我在上一篇文章的末章介绍了集合的笛卡儿积,根据定义,我们可以看到两个集合的笛卡儿积也是一个集合。 A×B={(a,b)|a∈A,b∈B}A×B=\{(a,b)|a\in A ,b\in B\} 从定义上看,笛卡儿积可以使两个完全不相干的集合产生联系,而A,B的元素不一定要拘泥于某种形式,比如说,a可以是一个数字,而b可以是一个字符串。 现在我们任取A×BA×B的一个子集RR (不一

2017-07-01 15:44:13 1631

原创 抽象代数学习笔记(1) 集合

抽象代数学习笔记(1) 集合1、定义其实,“集合的定义”这一说法是有些问题的,原因是“集合”这个概念很难给出定义。“集合”被提出不久后,围绕集合的各种悖论也接踵而至,这里给出一个比较有名的悖论: S={s|s∉S}S=\{s|s\notin S\} 如果s是集合S中的元素,那么根据S的定义,它不属于S;如果s不是集合S中的元素,那么根据S的定义,它属于S,于是一个“自相矛盾”的局面产生了

2017-06-29 16:59:25 4023

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除