机器学习&深度学习
文章平均质量分 94
multiangle
这个作者很懒,什么都没留下…
展开
-
深度学习笔记(四):循环神经网络的概念,结构和代码注释
深度学习笔记(一):logistic分类 深度学习笔记(二):简单神经网络,后向传播算法及实现 深度学习笔记(三):激活函数和损失函数 深度学习笔记(四):循环神经网络的概念,结构和代码注释本文的概念和结构部分摘自循环神经网络惊人的有效性(上),代码部分来自minimal character-level RNN language model in Python/numpy 我对代码做了详细的注原创 2016-09-18 10:13:28 · 26056 阅读 · 10 评论 -
深度学习笔记(三):激活函数和损失函数
这一部分来探讨下激活函数和损失函数。在之前的logistic和神经网络中,激活函数是sigmoid, 损失函数是平方函数。但是这并不是固定的。事实上,这两部分都有很多其他不错的选项,下面来一一讨论3. 激活函数和损失函数3.1 激活函数关于激活函数,首先要搞清楚的问题是,激活函数是什么,有什么用?不用激活函数可不可以?答案是不可以。激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么原创 2016-09-17 16:30:07 · 123764 阅读 · 10 评论 -
深度学习笔记(二):简单神经网络,后向传播算法及实现
在之前的深度学习笔记(一):logistic分类 中,已经描述了普通logistic回归以及如何将logistic回归用于多类分类。在这一节,我们再进一步,往其中加入隐藏层,构建出最简单的神经网络2.简单神经网络及后向传播算法2.1 大概描述和公式表达神经网络的大概结构如图所示, 从左往右,分别是输入层,隐藏层,输出层,分别记为x\mathbf x,h\mathbf h, y\mathb原创 2016-09-16 22:31:45 · 17118 阅读 · 4 评论 -
深度学习笔记(一):logistic分类
这个系列主要记录我在学习各个深度学习算法时候的笔记,因为之前已经学过大概的概念,所以这轮学习比较着重于公式推导和具体实现,而对概念上的描述不多,因此比较适合对此有一定基础的同学。 在正式开始写深度学习的知识之前,会有两节传统神经网络的内容,因为深度学习中大量运用了以往神经网络的知识。搞懂传统的神经网络如何工作是很有必要的,有助于对之后的学习打下坚实的基础。1. logistic分类几乎所有的教材都是原创 2016-09-16 11:28:49 · 28172 阅读 · 6 评论 -
ubuntu16.04下安装CUDA,cuDNN及tensorflow-gpu版本过程
这篇文章主要依据两篇文章: 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 深度学习主机环境配置: Ubuntu16.04+GeForce GTX 1080+TensorFlow 不过在实际运行的过程中,有一定的不同之处,随着时间的推移,一些组件已经可以更方便的安装,不再需要自己编译了。一些流程也有所更改。因此我在这里把自己在ubuntu16.0原创 2016-12-19 00:52:46 · 57076 阅读 · 7 评论 -
搭建linux下的深度学习开发环境
最近越来越感觉到在win下开发简直浑身难受,各种lib需要逐个下载安装不说,到现在干脆在win下跑不起来了。无奈,只能打算转战linux平台。在搭建环境过程中碰到了各种问题,因此把碰到的一些问题及其解决方法写下来作为备忘。1. ubuntu的安装由于之前ubuntu使用的比较多,所以这次也顺理成章的选择了ubuntu. 关于ubuntu的版本,注意一定要选择新版本。目前(2016.8)的最新版本是原创 2016-08-07 10:55:55 · 13194 阅读 · 1 评论 -
tensorflow笔记:使用tf来实现word2vec
时隔若干个月,又绕到了word2vec。关于word2vec的原理我就不叙述了,具体可见word2vec中的数学,写的非常好。 我后来自己用Python实现了一遍word2vec,过程写在自己动手写word2vec (一):主要概念和流程以及后续的若干文章中我当时使用的是Hierarchical Softmax+CBOW的模型。给我的感觉是比较累,既要费力去写huffman树,还要自己写计算梯度的原创 2017-01-05 14:50:21 · 29448 阅读 · 21 评论 -
tensorflow笔记:模型的保存与训练过程可视化
保存与读取模型在使用tf来训练模型的时候,难免会出现中断的情况。这时候自然就希望能够将辛辛苦苦得到的中间参数保留下来,不然下次又要重新开始。好在tf官方提供了保存和读取模型的方法。保存模型的方法:# 之前是各种构建模型graph的操作(矩阵相乘,sigmoid等等....)saver = tf.train.Saver() # 生成saverwith tf.Session() as sess:原创 2016-12-28 19:47:11 · 26140 阅读 · 4 评论 -
tensorflow笔记:流程,概念和简单代码注释
tensorflow是google在2015年开源的深度学习框架,可以很方便的检验算法效果。这两天看了看官方的tutorial,极客学院的文档,以及综合tensorflow的源码,把自己的心得整理了一下,作为自己的备忘录。tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorfl原创 2016-09-27 08:13:18 · 72081 阅读 · 25 评论 -
tensorflow笔记:多层CNN代码分析
在之前的tensorflow笔记:流程,概念和简单代码注释 文章中,已经大概解释了tensorflow的大概运行流程,并且提供了一个mnist数据集分类器的简单实现。当然,因为结构简单,最后的准确率在91%左右。似乎已经不低了?其实这个成绩是非常不理想的。现在mnist的准确率天梯榜已经被刷到了99.5%以上。为了进一步提高准确率,官网还提供了一个多层的CNN分类器的代码。相比之前的一层神经网络,这原创 2016-10-03 18:05:44 · 48838 阅读 · 12 评论 -
tensorflow笔记:多层LSTM代码分析
tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析之前讲过了tensorflow中CNN的示例代码,现在我们来看RNN的代码。不过好像官方只给了LSTM的代码。那么我们就来看LSTM吧。LSTM的具体原理就不讲了,可以参见深度学习笔记(五):LSTM,讲的非常清楚。坦白说,这份写LSTM的代码有点难,原创 2016-10-08 17:33:34 · 166437 阅读 · 68 评论 -
tensorflow笔记 :常用函数说明
本文章内容比较繁杂,主要是一些比较常用的函数的用法,结合了网上的资料和源码,还有我自己写的示例代码。建议照着目录来看。1.矩阵操作1.1矩阵生成这部分主要将如何生成矩阵,包括全0矩阵,全1矩阵,随机数矩阵,常数矩阵等tf.ones | tf.zerostf.ones(shape,type=tf.float32,name=None) tf.zeros([2, 3], int32) 用法类似,都是产原创 2016-10-13 11:29:57 · 100996 阅读 · 9 评论 -
深度学习笔记(五):LSTM
看到一篇讲LSTM非常清晰的文章,原文来自Understanding LSTM Networks , 译文来自理解LSTM网络Recurrent Neural Networks人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。 传转载 2016-09-21 11:04:46 · 39092 阅读 · 7 评论 -
Jacobian矩阵,Hessian矩阵和牛顿法
转自 : http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/Jacobian矩阵在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式. 雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近. 因此, 雅可比矩阵类似于多元函数的导数.假设F:Rn转载 2017-02-28 11:15:54 · 6171 阅读 · 0 评论 -
CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
本文转自知乎 https://www.zhihu.com/question/34681168 科研君 的回答神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。(扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的转载 2016-05-05 10:43:11 · 6435 阅读 · 3 评论 -
THUCTC源码解读(四)
LiblinearTextClassifier我认为LiblinearTextClassifier是整个分类器中最核心的模块,实现了训练,分类等功能。LiblinearTextClassifier实现的是TextClassifier的接口,实现了TextClassifier中定义的 addTrainingText, train, saveModel, loadModel, classify, sa原创 2016-05-23 21:15:39 · 4111 阅读 · 2 评论 -
深度学习笔记(六):Encoder-Decoder模型和Attention模型
这两天在看attention模型,看了下知乎上的几个回答,很多人都推荐了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感觉非常的不错,里面还大概阐述了encoder-decoder(编码)模型的概念,以及传统的RNN实现。然后还阐述了自己的attention模型。我看了一下,自己做了一些摘原创 2016-10-15 23:09:25 · 122153 阅读 · 17 评论 -
深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
最近在看Google的Deep Learning一书,看到优化方法那一部分,正巧之前用tensorflow也是对那些优化方法一知半解的,所以看完后就整理了下放上来,主要是一阶的梯度法,包括SGD, Momentum, Nesterov Momentum, AdaGrad, RMSProp, Adam。 其中SGD,Momentum,Nesterov Momentum是手动指定学习速率的,而后面的Ad原创 2016-11-01 00:31:23 · 81217 阅读 · 12 评论 -
[Java][机器学习]用决策树分类算法对Iris花数据集进行处理
Iris Data Set是很经典的一个数据集,在很多地方都能看到,一般用于教学分类算法。这个数据集在UCI Machine Learning Repository里可以找到(还是下载量排第一的数据哟)。这个数据集里面,每个数据都包含4个值(sepal length,sepan width,petal length,petal width)以及其种类。而分类算法的目标,就是根据4个值来把花的种类确定原创 2015-03-25 20:16:04 · 5631 阅读 · 1 评论 -
[Java][机器学习]Bayes分类算法
用Java实现Bayes分类算法。与决策树分类法相比,Bayes分类法可以轻松处理有多个分类的情况。它处理2个类和多个类本质上没什么区别。但是它相对于决策树也有一定的缺陷,即该算法是建立在各个属性统计独立的基础上的,如果属性间有关联,就会削弱算法的性能。与之前的决策树分类算法一样,要事先定义好double[][]型的训练集和检测集,格式为 double[i][0]=标号 double[原创 2015-04-12 21:11:51 · 1238 阅读 · 0 评论 -
[Java][机器学习]决策树算法
在之前为了处理Iris花的分类算法,写了一个决策树算法,但这个算法局限性比较大,只能用于那一种情况,所以为了增强代码的复用性,在之前的基础上修改了算法,增强了复用性。略有遗憾的是,由于很多模块,比如快速排序,是为了处理Iris花专门写的,所以现在要进行一些转换才行,一定程度上增加了代码的复杂度和冗余度。这个是以后值得注意的地方,即在设计之初就应该注意到代码的复用问题,尽可能早的定义好通用接口原创 2015-03-30 12:13:11 · 2626 阅读 · 0 评论 -
[Python] Numpy学习笔记(一)
最近开始学习numpy和pandas的一些东西,顺手做了些笔记,跟大家分享,也方便我以后查阅原创 2015-11-06 19:21:51 · 8474 阅读 · 0 评论 -
THUCTC源码解读(一)
THUCTC(THU Chinese Text Classification),是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动实现用户自定义的文本分类语料的训练、评测、分类功能。THUCTC中选取二字串bigram作为特征单元,特征降维方法为Chi-square,权重计算方法为tfidf,分类模型使用的是LibSVM或LibLinear。THUCTC对于开放领域的长文本具有良好的普原创 2016-05-16 23:08:52 · 6999 阅读 · 25 评论 -
语义分析的一些方法(二)
本文转自这里2 文本语义分析前面讲到一些文本基本处理方法。一个文本串,对其进行分词和重要性打分后(当然还有更多的文本处理任务),就可以开始更高层的语义分析任务。2.1 Topic Model首先介绍主题模型。说到主题模型,第一时间会想到pLSA,NMF,LDA。关于这几个目前业界最常用的主题模型,已经有相当多的介绍了,譬如文献[60,64]。在这里,主要想聊一下主题模型的应用以及最新进展(考虑到LD转载 2016-08-04 11:22:13 · 8438 阅读 · 0 评论 -
语义分析的一些方法(一)
原文转自这里语义分析,本文指运用各种机器学习方法,挖掘与学习文本、图片等的深层次概念。 wikipedia上的解释:In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documents(转载 2016-08-03 18:49:56 · 11969 阅读 · 0 评论 -
word2vec 中的数学原理详解-基于 Negative Sampling 的模型
转自:http://blog.csdn.net/itplus/article/details/37998797我之前写的是基于Hierarchical Softmax的模型。而在word2vec中,还有一种基于Negative Sampling的模型。我虽然没写,但是觉得这种方法还是蛮有用的,所以把别人写的资料贴上来,便于复习转载 2016-07-20 17:35:02 · 7967 阅读 · 0 评论 -
自己动手写word2vec (四):CBOW和skip-gram模型
CBOW和skip-gram应该可以说算是word2vec的核心概念之一了。这一节我们就来仔细的阐述这两个模型。其实这两个模型有很多的相通之处,所以这里就以阐述CBOW模型为主,然后再阐述skip-gram与CBOW的不同之处。这一部分的代码放在pyword2vec.py文件中1.CBOW模型之前已经解释过,无论是CBOW模型还是skip-gram模型,都是以Huffman树作为基础的。而Huffm原创 2016-07-18 16:54:20 · 83352 阅读 · 23 评论 -
自己动手写word2vec (三):构建Huffman树
这一部分将解释Huffman树的构造方法,并说明了如何根据Huffman树来产生对应的二进制编码。这部分的代码放在HuffmanTree.py中Huffman树的构造Huffman树的构造方法与Huffman编码密切相关。 具体的做法可以用下列伪码来描述while (单词列表长度>1) { 从单词列表中挑选出出现频率最小的两个单词 ; 创建一个新的中间节点,其左右节点分别是之前的两原创 2016-07-16 17:38:10 · 20878 阅读 · 6 评论 -
THUCTC源码解读(三)
Term类Term也是一个非常简单的类,是文档向量(DocumentVector)的基本组成部分,一个Term表示词典中的一个词。 存储的变量只有id和weight, id表示该Term代表的词在词典中的id,而weight表示该词在文档向量中的权重。此外,Term的内部类TermIdComparator还实现了Comparator接口,使得java能够对Term数组进行排序。public cla原创 2016-05-22 11:53:35 · 3464 阅读 · 2 评论 -
自己动手写word2vec (二):统计词频
在我之前写的word2vec的大概流程中,第一步的分词使用jieba来实现,感觉效果还不错。第二步. 统计词频统计词频,相对来讲比较简单一些,主要在Python自带的Counter类基础上稍作改进。值得注意的是需要去掉停用词。所谓停用词,就是出现频率太高的词,如逗号,句号等等,以至于没有区分度。停用词可以在网上很轻易找到,我事先已经转化成二进制的格式存储下来了。这一部分的代码放在WordCount.原创 2016-07-14 10:55:24 · 20461 阅读 · 0 评论 -
THUCTC源码解读(二)
在通过Demo初步了解了THUCTC的用法以后,开始深入探究THUCTC的结构,了解实现方式。只要了解了代码结构,才能了解背后的原理和优化方法,也方便在此基础上做出自己的改进。THUCTC的主要原理首先,会将训练文本进行分词处理,然后进行词频统计,通过统计词频和包含该词的文档频率,利用卡方(Chi-Square)检验来选择出特征词,并以此为依据构造文档向量(DocumentVector),词向量中的原创 2016-05-18 21:24:45 · 3362 阅读 · 0 评论 -
使用gensim和sklearn搭建一个文本分类器(一):流程概述
总的来讲,一个完整的文本分类器主要由两个阶段,或者说两个部分组成:一是将文本向量化,将一个字符串转化成向量形式;二是传统的分类器,包括线性分类器,SVM, 神经网络分类器等等。之前看的THUCTC的技术栈是使用 tf-idf 来进行文本向量化,使用卡方校验(chi-square)来降低向量维度,使用liblinear(采用线性核的svm) 来进行分类。而这里所述的文本分类器,使用lsi (laten原创 2016-09-04 18:19:21 · 23982 阅读 · 0 评论 -
使用gensim和sklearn搭建一个文本分类器(二):代码和注释
在之前的 使用gensim和sklearn搭建一个文本分类器(一):流程概述 中,叙述了一个使用lsi来对文本进行向量化,再使用线性核svm进行分类的文本分类器。在这篇文章中,沿着之前的思路,提供了该文本分类器的具体实现。该分类器对之前的流程进行了适当的整合,现在有五个主要流程: 生成词典生成tfidf向量生成lsi向量分类器参数训练对新文本进行分类。前4个步骤可以看做是分类器的训练过程原创 2016-09-12 17:49:00 · 9866 阅读 · 5 评论 -
自己动手写word2vec (一):主要概念和流程
word2vec 是 Google 于 2013 年开源推出的一个用于获取词向量(word vector)的工具包,它简单、高效,因此引起了很多人的关注。我在看了@peghoty所写的《word2vec中的数学以后》(个人觉得这是很好的资料,各方面知识很全面,不像网上大部分有残缺),为了加深理解,自己用Python实现了一遍。贴在我的github上系列所有帖子 自己动手写word2vec (一):原创 2016-07-11 22:35:14 · 61397 阅读 · 27 评论 -
Matrix Factorization 学习记录(一):基本原理及实现
Matrix Factorization 学习记录(一):基本原理及实现最近在学习Matrix Factorization,也就是矩阵的分解。 这个技术目前主要应用于推荐系统领域,用于实现隐含语义模型(Latent Factor Model)。通过矩阵分解,一方面可以减少运算量,另一方面可以很好的解决由于用户数目和物品数目过多引起的行为矩阵稀疏化问题。我虽然暂时不去做推荐系统,但是我觉得这...原创 2018-06-05 20:06:38 · 19369 阅读 · 11 评论