Spark-单value算子总结(图解和源码)

星火X2国产大模型全栈解析:MoE架构与全国产算力适配实践 大模型推理与训练正从依赖CUDA生态走向全国产算力底座,其核心挑战在于如何在昇腾、寒武纪等芯片上实现高效稀疏计算与训推一致。MoE(专家混合)架构通过动态路由与专家专业化分工,显著降低实际计算量,而VTP虚拟张量并行、INT8 KVCache、重采样校准等技术则解决了显存墙、通信瓶颈与分布偏移等关键工程难题。这类优化不仅提升推理吞吐与能效比,更支撑教育错因定位、医疗临床路径遵循、车载模糊意图理解等强落地场景。本文聚焦星火X2在293B MoE与全国产算力协同下的真实技术路径,为AI基础设施国产化提供可复用的 阅读详情

Spark-单value算子总结

1. map算子(改变结构就用map)
先看map函数
 /**
   * Return a new RDD by applying a function to all elements of this RDD.
   */
  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))
  }
功能说明

参数f是一个函数,它可以接收一个参数。当某个RDD执行map方法时,会遍历该RDD中的每一个数据项,并依次应用f函数,从而产生一个新的RDD。即,这个新RDD中的每一个元素都是原来RDD中每一个元素依次应用f函数而得到的

代码演示
	// 创建SparkConf
	val conf: SparkConf = new SparkConf()
	// 创建SparkContext,该对象是提交Spark App的入口
 	val sc: SparkContext = new SparkContext(conf)
 	// 参数(数据源,分区数(可选) )
    val rdd: RDD[Int] = sc.makeRDD(1 to 4,2)
    // map操作 元素乘以2
    val mapRdd: RDD[Int] = rdd.map(_*2) 
    mapRdd.collect().foreach(println)
结果:
2 
4 
6 
8
关于分区

分区图片分析
图片中的说明:
先把一个数据拿过来以后进行 *2 操作
例如拿1 过来后 *2 = 2 后,1这个数据就离开这块区域
然后进行第二个数据的处理…

注意:map的分区数和RDD的分区数一致(看下面源码)

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))
  }
往下走
 override def getPartitions: Array[Partition] = firstParent[T].partitions
再往下走firstParent
/** Returns the first parent RDD */
  protected[spark] def firstParent[U: ClassTag]: RDD[U] = {
    dependencies.head.rdd.asInstanceOf[RDD[U]]
  }

主要的是:firstParent[T].partitions 这里
2. mapPartitions() 以分区为单位执行Map
先看mapPartitions函数
def mapPartitions[U: ClassTag](
      f: Iterator[T] => Iterator[U],
      preservesPartitioning: Boolean = false): RDD[U] = withScope {
    val cleanedF = sc.clean(f)
    new MapPartitionsRDD(
      this,
      (context: TaskContext, index: Int, iter: Iterator[T]) => cleanedF(iter),
      preservesPartitioning)
  }
功能说明

f: Iterator[T] => Iterator[U]:f函数把每个分区的数据分别放入到迭代器中(批处理)
preservesPartitioning: Boolean = false :是否保留RDD的分区信息
功能:一次处理一个分区数据

代码演示
	// 前面代码省略,直接从数据源开始
	val rdd: RDD[Int] = sc.makeRDD(1 to 4,2)
    val mapRdd = rdd.mapPartitions(_.map(_*2))
    mapRdd.collect().foreach(println)
结果:
2
4
6
8
关于分区

分区图片描述
分区说明
每一个分区的数据会先到内存空间,然后才进行逻辑操作,整个分区操作完之后,拿到分区的数据才会释放掉。
从性能方面讲:批处理效率高
从内存方面:需要内存空间较大

3. mapPartitionsWithIndex()带分区号
先看mapPartitionsWithIndex函数
def mapPartitionsWithIndex[U: ClassTag](
		// Int表示分区编号
      f: (Int, Iterator[T]) => Iterator[U], 
      preservesPartitioning: Boolean = false): RDD[U]

功能说明

f: (Int, Iterator[T]) => Iterator[U]:f函数把每个分区的数据分别放入到迭代器中(批处理)并且加上分区号
preservesPartitioning: Boolean = false :是否保留RDD的分区信息
功能:比mapPartitions多一个整数参数表示分区号

代码演示
	val rdd: RDD[Int] = sc.makeRDD(1 to 4, 2)
    val mapRdd = rdd.mapPartitionsWithIndex((index, items) => {
      items.map((index, _))
    })
    // 打印修改后的RDD中数据
     mapRdd.collect().foreach(println)
结果:
(0,1)
(0,2)
(1,3)
(1,4)
4. flatMap()扁平化
先看flatMap函数
def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U] = withScope {
    val cleanF = sc.clean(f)
    new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.flatMap(cleanF))
  }

功能说明

与map操作类似,将RDD中的每一个元素通过应用f函数依次转换为新的元素,并封装到RDD中。
区别:在flatMap操作中,f函数的返回值是一个集合,并且会将每一个该集合中的元素拆分出来放到新的RDD中

图片说明

代码演示
	val listRDD=sc.makeRDD(List(List(1,2),List(3,4),List(5,6),List(7)), 2)
    val mapRdd: RDD[Int]= listRDD.flatMap(item=>item)

    // 打印修改后的RDD中数据
     mapRdd.collect().foreach(println)
结果:
1
2
3
4
5
6
7
5. glom()分区转换数组
先看glom函数
 def glom(): RDD[Array[T]] = withScope {
    new MapPartitionsRDD[Array[T], T](this, (context, pid, iter) => Iterator(iter.toArray))
  }

功能说明

该操作将RDD中每一个分区变成一个数组,并放置在新的RDD中,数组中元素的类型与原分区中元素类型一致

图片演示

代码演示(求两个分区中的最大值)
	val sc: SparkContext = new SparkContext(conf)
    val rdd = sc.makeRDD(1 to 4, 2)
    val mapRdd = rdd.glom().map(_.max)
    // 打印修改后的RDD中数据
     mapRdd.collect().foreach(println)
结果:
2
4
5. groupBy()分组
先看groupBy函数
def groupBy[K](f: T => K)(implicit kt: ClassTag[K]): RDD[(K, Iterable[T])] = withScope {
    groupBy[K](f, defaultPartitioner(this))
  }

功能说明

分组,按照传入函数的返回值进行分组。将相同的key对应的值放入一个迭代器。

图片演示

代码演示 (按照元素模以2的值进行分组)
	val rdd = sc.makeRDD(1 to 4,2)
    val mapRdd: RDD[(Int, Iterable[Int])] = rdd.groupBy(_ % 2)
    // 打印修改后的RDD中数据
    mapRdd.collect().foreach(println)
结果:
(0,CompactBuffer(2, 4))
(1,CompactBuffer(1, 3))
6. sample()采样
先看sample函数
def sample(
      withReplacement: Boolean,
      fraction: Double,
      seed: Long = Utils.random.nextLong): RDD[T]

功能说明

withReplacement: true为有放回的抽样,false为无放回的抽样;
fraction表示:以指定的随机种子随机抽样出数量为fraction的数据;
seed表示:指定随机数生成器种子。
两个算法介绍:

 抽取数据不放回(伯努利算法)
 		val sampleRDD: RDD[Int] = dataRDD.sample(false, 0.5)
        伯努利算法:又叫0、1分布。例如扔硬币,要么正面,要么反面。
        具体实现:根据种子和随机算法算出一个数和第二个参数设置几率比较,小于第二个参数要,大于不要
        第一个参数:抽取的数据是否放回,false:不放回
        第二个参数:抽取的几率,范围在[0,1]之间,0:全不取;1:全取;
        第三个参数:随机数种子
 抽取数据放回(泊松算法)
 		val sampleRDD1: RDD[Int] = dataRDD.sample(true, 2)
 		第一个参数:抽取的数据是否放回,true:放回;false:不放回
        第二个参数:重复数据的几率,范围大于等于0.表示每一个元素被期望抽取到的次数
        第三个参数:随机数种子
代码演示
	val dataRDD: RDD[Int] = sc.makeRDD(List(1,2,3,4,5,6))
    val mapRdd: RDD[Int] = dataRDD.sample(false, 0.5)
    // 打印修改后的RDD中数据
     mapRdd.collect().foreach(println)
结果:
3
5
6
	val sc: SparkContext = new SparkContext(conf)
    val dataRDD: RDD[Int] = sc.makeRDD(List(1,2,3,4,5,6))
    val mapRdd: RDD[Int] = dataRDD.sample(true, 2)
结果:
1
1
1
1
1
3
3
3
4
5
5
5
5
5
6
6
7. distinct()去重
先看distinct函数
def distinct(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope {
    map(x => (x, null)).reduceByKey((x, y) => x, numPartitions).map(_._1)
  }

  /**
   * Return a new RDD containing the distinct elements in this RDD.
   */
  def distinct(): RDD[T] = withScope {
    distinct(partitions.length)
  }

功能说明

对内部的元素去重,distinct后会生成与原RDD分区个数不一致的分区数
上面的函数还可以对去重后的修改分区个数

代码演示
	val sc: SparkContext = new SparkContext(conf)
    val distinctRdd: RDD[Int] = sc.makeRDD(List(1,2,1,5,2,9,6,1))
    distinctRdd.distinct(2).collect().foreach(println)
结果
6
2
1
9
5
distinct()实现的源码
def distinct(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope {
    map(x => (x, null)).reduceByKey((x, y) => x, numPartitions).map(_._1)
  }
也就是这个玩意:
 map(x => (x, null)).reduceByKey((x, y) => x, numPartitions).map(_._1)
8. coalesce()合并分区
先看coalesce函数
def coalesce(numPartitions: Int, shuffle: Boolean = false,
               partitionCoalescer: Option[PartitionCoalescer] = Option.empty)
              (implicit ord: Ordering[T] = null)
      : RDD[T]
功能说明

功能说明:缩减分区数,用于大数据集过滤后,提高小数据集的执行效率
默认false不执行shuffle

代码演示
	val rdd: RDD[Int] = sc.makeRDD(Array(1,2,3,4),4)
    val mapRdd: RDD[Int] = rdd.coalesce(2)
    mapRdd.mapPartitionsWithIndex{
      (index,values)=>values.map((index,_))
    }.collect().foreach(println)
结果
(0,1)
(0,2)
(1,3)
(1,4)

总结:无shuffle

设置2个分区后的结果:
(0,1) (0,2) (1,3) (1,4) 
设置3个分区后的结果:
(0,1) (1,2) (2,3) (2,4) 
设置4个或者以上
(0,1) (1,2) (2,3) (3,4) 

设置shuffle

	val rdd: RDD[Int] = sc.makeRDD(Array(1,2,3,4),4)
    val mapRdd: RDD[Int] = rdd.coalesce(2,true)
    mapRdd.mapPartitionsWithIndex{
      (index,values)=>values.map((index,_))
    }.collect().foreach(println)
结果
(0,1)
(0,2)
(0,3)
(0,4)
设置true后开启shuffle
 
设置1 ,2后的结果
(0,1) (0,2) (0,3) (0,4) 
设置3后的结果
(0,1) (1,2) (1,3) (2,4) 
设置4后的结果
(3,1) (3,2) (3,3) (3,4) 
....

源码:

for (i <- 0 until maxPartitions) {
  val rangeStart = ((i.toLong * prev.partitions.length) / maxPartitions).toInt
  val rangeEnd = (((i.toLong + 1) * prev.partitions.length) / maxPartitions).toInt
  (rangeStart until rangeEnd).foreach{ j => groupArr(i).partitions += prev.partitions(j) }
}
解释说明:
    maxPartitions:传进来的新分区数
    prev.partitions:之前RDD的分区数
 
分区i
    开始 = 分区号*前一个分区数 / 新的分区数
    结束 =( 分区号+1)*前一个分区数 / 新的分区数
9. repartition()重新分区(执行Shuffle)
先看repartition函数
def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope {
    coalesce(numPartitions, shuffle = true)
  }
功能说明

该操作内部其实执行的是coalesce操作,参数shuffle的默认值为true。无论是将分区数多的RDD转换为分区数少的RDD,还是将分区数少的RDD转换为分区数多的RDD,repartition操作都可以完成,因为无论如何都会经shuffle过程。

代码演示
	val rdd: RDD[Int] = sc.makeRDD(Array(1,2,3,4,5,6,7,8),4)
    val mapRdd: RDD[Int] = rdd.repartition(8)
    mapRdd.mapPartitionsWithIndex{
      (index,values) =>values.map((index,_))
    }.collect().foreach(println)
结果
(6,1)
(6,3)
(6,5)
(6,7)
(7,2)
(7,4)
(7,6)
(7,8)
coalesce和repartition对比与区别
  1. coalesce重新分区,可以选择是否进行shuffle过程。由参数shuffle: Boolean = false/true决定。
  2. repartition实际上是调用的coalesce,进行shuffle。源码如下:
    def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope {
    coalesce(numPartitions, shuffle = true)
    }
  3. coalesce一般为缩减分区,如果扩大分区,也不会增加分区总数,意义不大。
  4. repartition扩大分区执行shuffle,可以达到扩大分区的效果。
10. sortBy()排序
先看sortBy函数
def sortBy[K](
      f: (T) => K,
      ascending: Boolean = true,
      numPartitions: Int = this.partitions.length)
功能说明

该操作用于排序数据。在排序之前,可以将数据通过f函数进行处理,之后按照f函数处理的结果进行排序,默认为正序排列。排序后新产生的RDD的分区数与原RDD的分区数一致。

代码演示
	val rdd: RDD[Int] = sc.makeRDD(Array(1,2,5,3,6,2))
    val mapRdd = rdd.sortBy(item=>item) // 默认为true为正序,false为倒序
    // 打印修改后的RDD中数据
    mapRdd.collect().foreach(println)
结果
1
2
2
3
5
6
	val rdd: RDD[(Int,Int)] = sc.makeRDD(Array((5,2),(5,3),(6,2)))
    val mapRdd = rdd.sortBy(item=>item) // 默认为true为正序,false为倒序
    // 打印修改后的RDD中数据
    mapRdd.collect().foreach(println)
结果
(5,2)
(5,3)
(6,2)

单value看完了,点击下面看key-value类型的算子
Spark key-value类型算子总结(图解和源码)

ML模型上线后失效?构建持续可观测性闭环的实战指南 机器学习模型部署不是终点,而是数据漂移、特征失准与服务退化的起点。从基础概念看,ML系统本质是状态敏感的数据流转化,其稳定性依赖数据契约、特征可复现性与反馈闭环;技术价值在于通过Wasserstein距离、特征SLA、分层告警等机制实现早感知、准诊断、快响应;典型应用场景覆盖金融风控、电商推荐与工业质检等高敏业务线;本文聚焦真实落地中的可观测性闭环设计,深入解析数据层校验、特征版本绑定、模型输入/输出稳定性监控等关键实践,尤其强调Wasserstein距离在分布漂移检测中的工程优化与特征生命周期管理。 阅读详情

相关推荐

Spark 算子之map使用

Spark 算子之map使用

congge_study的博客 4059

Spark 单Value类型算子案例详解

1. import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDD //测试Distinct函数 object _01DistinctDemo { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local").setAppName("getRDD") val...

Dream_aju的博客 331

七个pdf理解spark系列_6-CacheAndCheckpoint

GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第六个pdf,讲述了cache、checkpoint的实现、使用等常见问题

一天一个RDD函数-1:map

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33872660的博客 467

华为防火墙双ISP出口实战:如何用策略路由实现电信联通流量自动切换(附配置截图)

本文详细解析了华为防火墙在双ISP环境下的智能选路技术,通过策略路由与健康检测的深度应用,实现电信联通流量的自动切换。文章包含实战配置截图,帮助企业解决切换延迟、路径劣化等核心挑战,提升业务连续性。

backprop5master的博客 646

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 405

Spark编程模型(三):Spark算子(1)-单值型Transformation算子

5.1 rdd.map map(f,preservesPartitioning=False) 作用:返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成 >>> rdd = sc.parallelize(["b", "a", "c"]) >>> sorted(rdd.map(lambda x: (x, 1)).collect()) [('a', 1), ('b', 1), ('c', 1)] 5.2 rdd.mapPartitions..

duguwanglong的博客 268

【CVPR 2025】低光增强HVI论文精读与源码复现---part1 论文网络精读

【CVPR 2025】本文参考论文HVI: A New Color Space for Low-light Image Enhancement part1 在文章中对论文核心网络与原理展开详细解释 part2 对论文公开代码的arch网络与其他核心部分展开详细解释

BOB_BOB_BOB_的博客 3270

spark的rdd的含义_关于Spark中RDD的设计的一些分析

RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念。这篇文章用来记录一部分Spark对RDD实现的细节。首先翻译一下RDD这个虚类的注释RDD是一个分布式弹性数据集, RDD是Spark的基本抽象,代表了一个不可变的、分区的、可以用于并行计算的数据集。这个类包括了所有RDD共有的基本操作,比如map,filter, persist。另外...

weixin_42298415的博客 315

如何在SpringBoot中实现AI 流式输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1484

【AI编程】Trae 环境搭建与配置从使用到项目实战详解

Trae 环境搭建与配置从使用到项目实战详解

congge 5652

Spark key-value类型算子总结(图解和源码)

Spark key-value类型算子总结(图解和源码)

悦上心灵的博客 1017

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的危险物品检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

随着公共安全需求的日益增长,危险物品检测技术在社会安防、交通安检等领域发挥着重要作用。本文介绍了一个基于YOLO系列深度学习框架的危险物品检测系统,集成了YOLOv8、YOLOv7、YOLOv6和YOLOv5四种先进的物体检测算法。系统采用PySide6开发了用户友好的图形界面,提供了完整的训练代码、预训练模型和数据集构建方案。实验结果表明,该系统在危险物品检测任务上实现了高精度和高实时性,为实际应用提供了可靠的技术支持。

YOLO 158

Spark RDD概念学习系列之Spark的算子的分类(十一)

Spark的算子的分类        从大方向来说,Spark 算子大致可以分为以下两类:      1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理。      Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会

清晨随笔 655

信息传输仿真:卫星通信系统仿真_(12).基于SystemVue的卫星通信仿真

SystemVue是Cadence公司开发的一款用于系统级设计和仿真的软件工具。它主要用于无线通信系统的设计和验证,特别是在卫星通信、雷达、射频和微波通信等领域。SystemVue提供了一个集成的环境,用户可以通过拖拽和连接各种预定义的模块来构建复杂的通信系统模型,从而进行性能分析和优化。

2401_87715305的博客 1370

医学图像的对抗攻击:模型安全性与鲁棒性分析

医学图像的对抗攻击:模型安全性与鲁棒性分析 ,人工智能,计算机视觉,大模型,AI,本文围绕医学图像的对抗攻击展开,分析了其对AI模型的威胁。介绍了对抗样本定义、攻击原理,以及FGSM、BIM、PGD等常见攻击方法,还给出了相关代码示例。阐述了攻击对模型诊断准确性和可信度的影响,提出对抗训练、输入预处理、模型集成等提升模型安全性与鲁棒性的方法,探讨了评估指标、数据集和流程,分析了实际应用中的挑战与应对策略,最后展望了未来发展趋势。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

SparkCore

一、RDD概述 在介绍RDD之前先介绍一下java中的IO: 缓冲流(缓冲流提高效率): 装饰者设计模式表示一种功能的扩展,在这里真正读文件的是in而不是buggerIn,javaIO强大的原因就是他可以动态的扩展他的功能 字符流: 使用BufferedReader可以一行一行的读取数据,但要注意并不是所有的字符流都可以一行一行的读数据。 前面的步骤只是转换包装并没有真正的读取,只有用的时候即...

LALALA3_3的博客 379

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

二、弹性分布式数据集RDD

一、RDD概述 1、概念 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 2、RDD属性: 1)一...

murphyZ的博客 510

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

网络算法:从图论基础到深度学习应用(万字长文)

摘要 本文系统介绍了网络算法的知识体系,从基础图论到前沿图神经网络。首先讲解了图的基本概念、表示方法和度量指标。然后详细阐述了经典算法:图的遍历(BFS/DFS)、最短路径(Dijkstra/Bellman-Ford)、最小生成树(Kruskal/Prim)、网络流和社区发现。接着分析了传统方法的局限性,引出深度学习在图数据上的应用,重点介绍了图表示学习(如Node2Vec)和图神经网络(GCN)的核心原理——消息传递机制。全文构建了从理论基础到实践应用的完整框架,为处理各类网络数据问题提供了方法论指导。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 268

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spark基础【RDD单Value类型转换算子】

一个分区的数据被打乱,和其他分区的数据组合在一起,这个操作称为shuffle,现在想进行两分区数据相加,但第一个RDD中有很多分区,分区内有很多数据,shuffle如何做计算呢,在内存中是否等待所有数据到来之后再进行运算,即使等待,内存不够怎么办?第二类是执行逻辑,将封装好的逻辑进行执行,让整个作业运行起来,称之为行动算子。java克隆浅复制存在引用问题,mapPartitions处理完的数据不会释放,那么引用也不会被释放,当全部处理完成时,才会释放,意味着数据越多,持续时间越长,占用内存空间越大。....

weixin_43923463的博客 1120

spark源码之RDD源码分析

RDD的五大特性: 1.partitions_:partition数组 2.dependencies_:Dependency序列 3. compute:计算函数 4. Partitioner:分区器 5. Preferred Locations:存储存取每个Partition的优先位置 一、dependency 在RDD中dependencies_是专门用来存储当前RDD的父dependency序列。 dependencies方法,用于获取当前RDD的所有依赖的序列,源码如下: pack

daxuddaai的博客 618

Spark取出(Key,Value)型数据中Value值为前n条数据

Spark对(Key,Value)型数据进行排序,并取出Value值为前n的数据

dai451954706的专栏 1万+

Spark学习总结(一)

RDD及其特点1、RDD是Spark的核心数据模型,但是个抽象类,全称为Resillient Distributed Dataset,即弹性分布式数据集。2、RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(分布式数据集)3、RDD通常通过Hadoop上的文件,即HDFS文件或者Hive表,来进行创建;...

hellozhxy的博客 7万+

Spark Working with Key/Value Pairs

Chapter 4. Working with Key/Value PairsKey/Value RDDs are commonly used to perform aggregations(聚合),and often we will do some initial ETL(extract, transform, and load 提取,转换和加载) to get our data into a k

power0405hf的专栏 2575

【Spark学习笔记】3、Java版-算子系列之map(f:T => U) : RDD[T] => RDD[U]

map算子源码 /** * Return a new RDD by applying a function to all elements of this RDD. */ def map[U: ClassTag](f: T =&gt; U): RDD[U] = withScope { val cleanF = sc.clean(f) new MapPartitionsRDD[U, ...

hellboy0621的博客 736

8.函数式编程

1.函数说明: def map[U : ClassTag](f : T => U)  : RDD[U] = withScope{ 1.1 其中f 表示函数名称;T表示输入参数;U表示返回值类型 1.2 map是一个函数,其参数为(f : T => U)函数,只不过,函数名为f, 函数类型为 T => U 2.函数要点概述: 2.1 函数可以直接赋值给变量 2.2 函数更常用的方

geeksu的博客 362
上一篇: 数据结构——单向链表(java实现)
下一篇: Spark key-value类型算子总结(图解和源码)
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值