自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spark性能优化

熟悉spark内核之后,深刻体会到了spark开发中存在着大量细节左右着计算性能。趁着刚看过大概的流程,先基于目前的感受和相关资料,总结一下可能存在优化空间的地方。spark优化其实就是将不必要的开销能省就省。创建RDD是昂贵的,从磁盘读取RDD也是昂贵的,需要大量的IO开销,shuffle是与基于内存相违背的,涉及IO、网络通信等昂贵的操作。。。都是能避免就避免。有时候会因为极个别的task运行时

2017-07-24 14:19:49 720

原创 spark源码总结

一、spark组件1、Application用户编写的应用程序代码,包含启动一个Driver,以及在executors上运行的业务逻辑代码。2、Driverdriver负责高层次的任务管理,包括该application中包含的所有的资源和任务运行状态。3、Executorexecutor就是一个进程,负责启动task线程运行task4、Tasktask是线程级的,与partitions对应,一个ta

2017-06-29 17:14:28 591

原创 spark源码之Job执行(2)任务调度taskscheduler

一、submitStage划分stages后提交taskif (tasks.size > 0) {//如果存在tasks,则利用taskScheduler.submitTasks()提交task,否则标记stage已完成" ... taskScheduler.submitTasks(new TaskSet( tasks.toArray, stage.id, s

2017-06-28 22:33:11 939

原创 机器学习算法之K-means-spark

1 聚类简单回顾一下:首先,随机在点群中选取K个点,作为划分聚落的种子点;然后,求点群中所有的点到这K个点的距离;接下来,将离种子点近的点都移动到种子点附近;最后,不断重复第二和第三步,直到没有点需要移动了。以上只是一个概念的解释,我想这种问题还是必须看看公式才能清楚理解:1、随机选取K个种子点,设为μ1......μk\mu_1......\mu_k;2、对点群中的每一个点计算公式:argminj

2017-06-16 11:02:45 1434

原创 spark源码之sparkEnv(2)blockManager

1 sparkEnv中初始化blockManager首先,根据是在驱动还是在executor上,选择端口。 val blockManagerPort = if (isDriver) { conf.get(DRIVER_BLOCK_MANAGER_PORT) } else { conf.get(BLOCK_MANAGER_PORT) }有了端口,就可以建立基

2017-06-14 14:35:02 521

原创 spark源码之Job执行(1)stage划分与提交

以reduce操作为例,看看作业执行的流程def reduce(f: (T, T) => T): T = withScope { val cleanF = sc.clean(f) val reducePartition: Iterator[T] => Option[T] = iter => { if (iter.hasNext) { Some(iter.r

2017-06-12 21:59:56 1187

原创 spark源码之sparkEnv(1)RPC通信

1 SparkConf构造函数Spark Driver用于提交用户应用程序,实际可以看作Spark的客户端。启动./bin/spark-submit时,会产生sparkContext,配置参数则是 SparkConf。sparkContext有多个构造函数使用系统默认参数:def this() = this(new SparkConf())手动配置参数: def this(master: Str

2017-06-11 20:18:58 571

原创 spark源码之RDD(3)checkpoint

一 checkpoint写流程 1 RDD中的checkpoint方法首先调用方法data.checkpoint()该方法会将RDD存入checkpoint directory中,并且将指向他的父RDD的依赖都删除掉。该方法需要在action之前调用 def checkpoint(): Unit = RDDCheckpointData.synchronized { // NOTE: we

2017-06-10 15:51:09 525

原创 spark源码之RDD(2)transformation和action

map def map[U: ClassTag](f: T => U): RDD[U] = withScope { val cleanF = sc.clean(f) new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF)) }1、clean 最终调用ClosureCleaner.cle

2017-06-09 19:54:51 463

原创 spark源码之RDD(1)partition、dependence、persist

An Architecture for Fast and General Data Processing on Large Clusters1 编程模型1.1 RDDResilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster ComputingRDD就是只读的数据分区集合。RDD上的有两种Ope

2017-06-08 20:29:17 1228

原创 scala语法

根据documents记录一些零碎的知识点,学习一定程度后再总结一下。1 basic1.1 Variables and ValuesVariables和Values分别用var和val表示,他们之间的区别是var可以重复赋值,而val赋值后不可改变,相当于const。val x = 1+1var y: Int = 1 + 1y = 3 变量的type类似c++11中auto会自己推断,同时也可以

2017-06-07 16:28:34 1665

原创 机器学习实战(1)信用卡欺诈

The datasets contains transactions made by credit cards in September 2013 by european cardholders. This dataset presents transactions that occurred in two days, where we have 492 frauds out of 284,807

2017-06-06 10:29:59 3177

原创 深度学习之caffe使用小结(1)

1、执行目录 至少在最新的版本中,caffe直接在根目录执行脚本文件会报错,需要先cd caffe-master 然后执行相应的脚本,比如\caffe-master\examples\cifar10中的train_quick.sh,并且需要加sudo2、数据集的制作 就是图片列表,后面带有分类标号的,一般讲jpg格式的图片放在某个目录下,然后执行以下脚本:find -name cat.\*.jp

2017-06-04 18:31:36 711

原创 机器学习算法之随机森林(1)pyspark.mllib中的RF

spark的persist操作可以使得数据常驻内存,而机器学习最主要的工作——迭代,需要频繁地存取数据,这样相比hadoop来说,天然地有利于机器学习。 ———- 单机版。 至于集群的搭建——现在手头最多两台电脑,后面再折腾。 1、安装pysaprk 1.1 下载安装包 下载jdk压缩包,进入链接 http://www.oracle.com/technetwork/j

2017-06-02 22:15:38 5292

原创 C++编程之stable_sort

一、sort()的潜在隐患sort()最坏情况的改进快速排序有着O(NlgN)的平均时间复杂度,如果遇到极端的情况可能会恶化到N^2。 但是在STL中,已经针对快速排序可能出现: (1)pivot选取不当; (2)递归深度过深; 两个问题分别给出了: (1)三中值法:保证pivot选取合适; (2)递归深度判断,过深直接堆排序。 将快速排序基本保持在了O(NlgN),有效地避免了最坏情

2017-05-22 22:00:36 1271

原创 C++编程笔记之sort

1、sort实现 stl中的sort调用了两个函数, __introsort_loop:可以避免最坏情况的快速排序; __final_insertion_sort:插入排序template <class _RandomAccessIter>inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) { __S

2017-05-21 17:04:43 344

原创 C++编程笔记之next_permutation

STL中的next_permutation是得到序列的下一个全排列序列。1、next_permutation首先,从右至左找到第一个左边值n[i]小于右边值n[i+1]; 然后,从右搜索第一个大于n[i]的值n[j],将n[i]与n[j]互换; 最后,将n[i+1]之后的全部reverse。template <class _BidirectionalIter>bool next_permuta

2017-05-20 20:22:56 277

原创 c++编程笔记之阻塞队列

一、基于queue和互斥锁的并发队列。#include<thread>#include<mutex>#include<queue>#include<conditional_variable>using namespace stdtemplate <typename T>class MutexQueue{ public: MutexQueue(){} ~

2017-05-19 11:01:58 849

原创 CAFFE2中C++11实现的线程池

根据之前的总结,可以说用C++11的新特性设计一个线程池已经非常容易了,配合thread、mutex、condition_variable、lock、配以智能指针即安全又便捷,同时bind、functiond等搭配食用更佳。caffe2是基于caffe的升级版,其中大量使用了C++的新特性,所以为了进一步熟悉这些新特性,不妨看看caffe2的一些实现。#ifndef CAFFE2_UTILS_THR

2017-05-17 16:48:16 1106

原创 Spark(1)-初识Pyspark

一、前言 (注:以下操作都是基于python语言,根据官网guide总结。)1、RDDs spark中最重要的抽象是RDDs(Resilient Distributed Datasets弹性分布式数据集),可以简单的把RDDs理解成一个提供了许多操作接口的分布式数据集合,和一般数据集不同的是,其实际数据分布存储于一批机器中(内存或磁盘中)。RDDs可以通过hadoop文件系统或者驱动程序中已经存

2017-05-11 20:24:57 1357

原创 C++笔记之多线程的理解与应用

一、线程与进程进程,拥有资源并且独立运行的基本单位;将CPU比作是是一个工厂,那么进程可以看做是一个可以独立进行工作的车间,车间内有生产必须的资源以及工人,同时工厂内同一时刻只有一个车间在开工,但是工厂内是可以有多个车间的。[1]线程,程序执行的最小单元;线程则是车间内的工人,工人的数量可以有多个,某些工具或者空间只有一个,需要多人分享(共享资源),如果有一个人正在使用,那么其他工人则必须等待此人使

2017-05-10 20:42:09 1578

原创 机器学习算法之SVM(3)核函数

1、映射 想象一下,一个三维空间的立方体,一个顶点与x、y平面接触,其余点z都大于0。现在,想要把立方体的上下各四个点分开,只需要沿着从边的中间画一个超平面即可。但是如果,将这些点直接投影到x、y平面上,那么刚刚还可以分开的两组各四个点就有可能犬牙交错,完全非线性不可分了。把刚刚的过程逆过来,就是非线性不可分情况下的分类方法了: 支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到

2017-05-08 21:40:13 1062

原创 深度学习算法之CNN、RNN、LSTM公式推导

整个推导过程首先一定对网络的结构有清醒的认知,所有变量的下角标都能一一对应到网络结构上;然后就是链式求导了。一、CNN公式推导1、前向传播假设CNN共三层,第一层为输入层,第二层为隐藏层,第三层为输出层。定义:第一层与第二层之间的参数为WihW_{ih},第二层到第三层的参数为WhkW_{hk}t时刻的某一个神经元的输入为bib_i那么隐藏层输入为:∑mi=1Wihbi\sum_{i=1}^mW_{

2017-05-05 17:27:11 6148 1

原创 机器学习算法之SVM(2)松弛变量

离群点 对于(1)中的SVM模型而言,如果在分类的数据集中出现了离群点,必定会造成超平面的移动。如果数据集中出现了离群点,模型应该有一定的容错能力,于是就有了加入松弛变量的新目标函数:minw,b12||w||2+C∑m1ξi,s.t.yi(wTxi+b)≥1−ξi,ξi≥0;i=1,..m;min_{w,b} \frac{1}{2}{||w||^2}+C\sum_1^m\xi_i,s.t.

2017-05-04 21:05:17 1675

原创 机器学习算法之SVM(1)结构风险最小化

一、SVM的策略是结构风险最小化 1、几何间隔线性分类器比如感知机,目的是为了在空间中找出一个超平面,这个超平面使得分类错误率最小。在进行分类的时候,数据集中所有的点都对分界面有影响。而SVM中使用几何间隔,就是点到分界面的距离γi\gamma^i,试想如果在某一类中离分界面最近的那个点与分界面的距离越大,显然分类的确信度就越大。所以SVM中对分界面有影响的就是那些距离分界面最近的支持向量而不是全

2017-05-04 11:23:01 11197

原创 CAFFE源码学习笔记之初始化Filler

一、前言 为什么CNN中的初始化那么重要呢?我想总结的话就是因为他更深一点,相比浅层学习,比如logistics或者SVM,最终问题都转换成了凸优化,函数优化的目标唯一,所以参数初始化随便设置为0都不影响,因为跟着梯度走,总归是会走向最小值的附近的。但是CNN不一样: 1、多层神经网络加上各种非线性变换的激活函数,最终的目标函数是个非凸函数,也就是有多个局部最小值。2、如果使用sigmod类的激

2017-04-25 17:19:26 1288

原创 MPI总结

一、MPI的四个基本函数 1、MPI_InitMPI_Init:初始化MPI执行环境。 在MPI_Init函数中,并不一定都需要设置argc_p和argv_p这两个参数的,不需要的时候,将它们设置为NULL即可MPI_Init( int* argc_p, char*** argv_p );他们的第一个参数都传入通信子作为参数,第二参数都用传出参数分别把正在调用通信子

2017-04-23 13:44:51 2518

原创 深度学习算法之过拟合、局部最小值和梯度弥散·

紧接着上文优化方法总结一下优化方法是从哪些地方入手的。 The Difficulty of Training Deep Architectures and the Effect of Unsupervised Pre-Training 一、局部最小值 求解函数的梯度,当梯度值为0时,可以说该点是该函数的极大值或者极小值。当把定义域内的所有极值点都求出来,进行比较之后,最终可以确定函数在定义域内

2017-04-22 14:15:03 7261

原创 CAFFE源码学习之优化方法solver

一、前言 solver就是来计算损失函数最小化的优化方法,在caffe中,提供了六种不同的优化方法:(1)SGD;(2)AdaGrad;(3)AdaDelta;(4)Adam;(5)RMSProp;(6)Nesterov;优化方法需要优化的目标函数就是针对整个数据集的所有数据的平均loss,如果必要还有正则项:L(w)=1N∑N1fw(x(i))+λr(w)L(w)=\frac{1}{N

2017-04-20 21:58:15 1662

翻译 MPI之Reduce和Allreduce

一、前言 Reduce——规约是来自函数式编程的一个经典概念。数据规约包含通过一个函数将一批数据分成较小的一批数据。比如将一个数组的元素通过加法函数规约为一个数字。二、MPI_Reduce 与MPI_Gather类似,MPI_Reduce在每个进程上都有一组输入元素,并将一个输出元素数组返回给根进程。 输出元素包含被规约的结果。MPI_Reduce( void* send_data,

2017-04-19 19:03:23 18751

原创 机器学习算法之SVM的多分类

一、SVM可以直接进行多分类吗 SVM本身是对付二分类问题的,所以在处理多分类的时候需要进行必要的改造。同样是二分类的情况,logistic回归可以直接拓展为softmax多分类。但是SVM如果直接在目标函数上进行修改的话,就是将多个分类面的参数求解合并到一个最优化问题上,显然难度太大,目前也没有任何实际操作的方法。二、SVM多分类间接实现1、1-V-rest:将某一类归为正类,其余全部是负类

2017-04-18 20:37:56 17708

翻译 MPI之聚合通信-Scatter,Gather,Allgather

MPI 一、 MPI_ScatterMPI_Scatter与MPI_Bcast非常相似,都是一对多的通信方式,不同的是后者的0号进程将相同的信息发送给所有的进程,而前者则是将一段array 的不同部分发送给所有的进程,其区别可以用下图概括: 0号进程分发数据的时候是根据进程的编号进行的,array中的第一个元素发送给0号进程,第二个元素则发送给1号进程,以此类推。MPI_Scatter(

2017-04-18 15:53:23 36582 1

原创 深度学习算法之AlexNet和VGGNet

AlexNet: 1 模型特性该模型主要的特性如下: 1.1 激活函数——ReLU(1)激活函数使用ReLU,解决了梯度弥散问题;什么是梯度弥散?同样还有一个概念叫做梯度爆炸?直观的解释: 可以看出sigmod函数在靠近0的附近的时候梯度变化比较明显,到靠近1的地方梯度逐渐趋近与0,根据梯度下降算法,此时权值等参数变化不明显,函数很难收敛。本质的解释:假设一个简单的结构,输入层节点表示为h1h

2017-04-17 15:42:03 8559 1

原创 深度学习算法之卷积神经网络简介

1、CNN与特征工程 在卷积神经网络之前,一般采用SIFT算法进行特征提取,然后SVM等进行分类,需要对图像进行预处理,还伴随着庞大的特征工程。CNN算法直接将图像的原始像素作为输入,不需要预先进行SIFT进行特征提取,避开了大量的特征工程,另一方面由于图像的空间信息很重要,所以通过卷积核提取局部信息,可以利用图像在空间中的相关性,避免了全连接式的破坏空间信息。2、CNN与全连接神经网络与全连接网

2017-04-15 13:47:46 1082

原创 CAFFE源码学习笔记之batch_norm_layer

一、前言 网络训练的过程中参数不断的变化导致后续的每一层输入的分布也发生变化,而学习的过程使得每一层都需要适应输入的分布。所以就需要谨慎的选择初始化,使用小的学习率,这极大的降低了网络收敛的速度。为了使每层的输入分布大致都在0均值和单位方差,需要对每层的输入进行归一化。 为了使 二、源码分析 1、layersetup函数 batch_norm参数:message BatchNorm

2017-04-13 16:35:48 6638 1

翻译 MPI之聚合通信collective communication-广播

一、前言 点对点的通信学习已经通过一个案例完成了,现在开始新的一节:collective communication。聚合通信是在通信子中的所有的进程都参与的通信方式。 二、聚合与同步 1、同步 对于所有的进程来说,聚合通信必然包含了一个同步点。也就是说所有的进程必须在他们又一次执行新动作之前都到达某个点。这跟GPU中线程同步的概念很相似,很好理解。如果n个线程或者进程不遵守这个规矩,那么就

2017-04-12 21:03:30 3550 1

原创 CAFFE源码学习笔记之softmax_layer

一、前言 在全连接层之后,接着就是softmax层。softmax已经介绍过,是表征分类是该类的概率的大小。具体原理见logistic回归与softmax 所以,softmax layer输出的是原始的输入在每一个分类标签上的概率。 二、源码分析 1、成员变量 为什么设置outer_num_和inner_num_? inner_num_实际该层输入的图像的尺寸,由于正常网络下,其输入为n

2017-04-12 16:15:36 1665 1

原创 CAFFE源码学习笔记之内积层-inner_product_layer

一、前言 内积层实际就是全连接。经过之前的卷积层、池化层和非线性变换层,样本已经被映射到隐藏层的特征空间之中,而全连接层就是将学习到的特征又映射到样本分类空间。虽然已经出现了全局池化可以替代全连接,但是仍然不能说全连接就不能用了。 二、源码分析 1、成员变量全连接的输入时一个M*K的矩阵,权重是K*N的矩阵,所以输出是一个M*N的矩阵 int M_;//num_input int K_;

2017-04-11 15:12:52 4360

原创 CAFFE源码学习笔记之激活层

一、前言 在网络中,经过一级卷积层和池化层的处理后,一般都需要进入激活层,进行一次非线性变化或者线性变换。激活层所用激活函数,最开始使用sigmod和tanh函数。但是这两个函数的梯度在越远离x=0的地方越小,最后基本趋近于0,使得网络收敛的速度变慢,造成所谓的“梯度弥散”问题。 为了解决该问题,ReLu激活函数被提出,其公式就是:out_put=max(0,input)out\_put=m

2017-04-11 14:20:33 845

原创 CAFFE源码学习笔记之池化层pooling_layer

一、前言 池化层的输入来自上一个卷积层的输出,主要作用是提供了平移不变性,并且减少了参数的数量,防止过拟合现象的发生。比如在最大池化中,选择区域内最大的值为采样点,这样在发生平移的时候,采样点不变。 池化层一般没有参数,所以反向传播的时候,只需对输入参数求导,不需要进行权值更新。平均值效果不佳,一般选择最大池化。 二、源码分析 1、LayerSetUp函数 跟卷积层类似,主要是导入池化层的

2017-04-10 21:15:17 4306

空空如也

空空如也

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

TA关注的人

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