手把手带你玩转Spark机器学习-深度学习在Spark上的应用
创始人
2024-01-17 04:05:00
0

系列文章目录

  1. 手把手带你玩转Spark机器学习-专栏介绍
  2. 手把手带你玩转Spark机器学习-问题汇总
  3. 手把手带你玩转Spark机器学习-Spark的安装及使用
  4. 手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换
  5. 手把手带你玩转Spark机器学习-使用Spark构建分类模型
  6. 手把手带你玩转Spark机器学习-使用Spark构建回归模型
  7. 手把手带你玩转Spark机器学习-使用Spark构建聚类模型
  8. 手把手带你玩转Spark机器学习-使用Spark进行数据降维
  9. 手把手带你玩转Spark机器学习-使用Spark进行文本处理
  10. 手把手带你玩转Spark机器学习-深度学习在Spark上的应用

文章目录

  • 系列文章目录
  • 前言
  • 一、Apache Spark Timeline
  • 二、开发步骤
    • 1.在jupyter中启动SparkSession 和 SparkContext
    • 2.下载数据
    • 3.用Spark读取图片
    • 3. Transfer Learning
  • 总结


前言

本文将介绍深度学习在Spark上的应用,我们将聚焦于深度学习Pipelines库,并讲解使用DL Pipelines的方式。 我们将讲解如何通过Pipelines实现Transfer Learning,同时通过预训练模型实现来处理少量数据并实现预测。

在这里插入图片描述


一、Apache Spark Timeline

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
如上图所示,Deep Learning Pipelines在2017年开始被Apache支持。Deep Learning Pipelines 是一个由 Databricks 创建的开源库,使用 Apache Spark 的 Python 中的可扩展深度学习提供高级 API。
在这里插入图片描述
Deep Learning Pipelines 基于 Apache Spark 的 ML Pipelines 进行训练,并使用 Spark DataFrames 和 SQL 来部署模型。 它包括用于深度学习常见方面的高级 API,因此可以在几行代码中有效地完成它们:

  • 数据导入
  • 在spark ml pipeline中应用预训练模型作为转换器
  • 迁移学习
  • 大规模应用深度学习模型
  • 分布式超参数调优

二、开发步骤

1.在jupyter中启动SparkSession 和 SparkContext

from pyspark.sql import SparkSessionspark = SparkSession.builder.appName("Deep Learning").getOrCreate()
sc = spark.sparkContext
sc

在这里插入图片描述

2.下载数据

在图像上应用深度学习的第一步是加载图像的能力。 Deep Learning Pipelines 创建了实用函数,可以将数百万张图像加载到 DataFrame 中,并以分布式方式自动解码,从而实现大规模操作。

我们将使用由 TensorFlow 的测试花卉照片(存在共享许可)来测试。我们先运行以下命令(我们还将创建一个示例文件夹), 来获取一组花卉照片:

!curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
!tar xzf flower_photos.tgz
!mkdir flower_photos/sample

我们把部分图片名称改的简单些:

!cp flower_photos/daisy/100080576_f52e8ee070_n.jpg flower_photos/sample/
!cp flower_photos/daisy/10140303196_b88d3d6cec.jpg flower_photos/sample/
!cp flower_photos/tulips/100930342_92e8746431_n.jpg flower_photos/sample/

打印部分图片:

# collect all .png files in working dir
fs = !ls flower_photos/sample/*.jpgimport IPython.display as dp# create list of image objects
images = []
for ea in fs:images.append(dp.Image(filename=ea, format='png'))# display all images
for ea in images:dp.display_png(ea)

在这里插入图片描述

3.用Spark读取图片

现在让我们使用 Spark 将这些图像加载为 DataFrame。 spark.readImage 方法将常见格式(jpg、png 等)的图像从 HDFS 存储读取到 DataFrame。 每个图像都以 imageSchema 格式存储为一行。 recursive选项允许从子文件夹中读取图像,例如正负标记样本。 sampleRatio 参数允许您在使用完整数据训练模型之前尝试使用较小的图像样本。

from pyspark.ml.image import ImageSchema
# Read images using Spark
image_df = ImageSchema.readImages("flower_photos/sample/")

如果我们看一下这个dataframe,我们会看到它创建了一个名为“image”的列。

image_df.show()

在这里插入图片描述
image 列包含一个字符串列包含一个带有 schema == ImageSchema 的图像结构。

3. Transfer Learning

在这里插入图片描述
Deep Learning Pipelines 提供了对图像执行迁移学习的实用程序,这是开始使用深度学习的最快(代码和运行时)方法之一。 使用 Deep Learning Pipelines,只需几行代码即可完成。

Deep Learning Pipelines通过Featurizer的概念实现了快速迁移学习。 以下示例结合了 Spark 中的 InceptionV3 模型和逻辑回归,以使 InceptionV3 适应我们的特定领域。 DeepImageFeaturizer 自动剥离预训练神经网络的最后一层,并使用所有先前层的输出作为逻辑回归算法的特征。 由于逻辑回归是一种简单而快速的算法,因此这种迁移学习训练可以使用比从头开始训练深度学习模型通常所需的图像少得多的图像快速收敛。

首先,我们需要为迁移学习创建训练和测试数据帧。

from pyspark.ml.image import ImageSchema
from pyspark.sql.functions import lit
from sparkdl.image import imageIOtulips_df = ImageSchema.readImages("flower_photos/tulips").withColumn("label", lit(1))
daisy_df = imageIO.readImagesWithCustomFn("flower_photos/daisy", decode_f=imageIO.PIL_decode).withColumn("label", lit(0))
tulips_train, tulips_test, _ = tulips_df.randomSplit([0.1, 0.05, 0.85])  # use larger training sets (e.g. [0.6, 0.4] for getting more images)
daisy_train, daisy_test, _ = daisy_df.randomSplit([0.1, 0.05, 0.85])     # use larger training sets (e.g. [0.6, 0.4] for getting more images)
train_df = tulips_train.unionAll(daisy_train)
test_df = tulips_test.unionAll(daisy_test)# Under the hood, each of the partitions is fully loaded in memory, which may be expensive.
# This ensure that each of the paritions has a small size.
train_df = train_df.repartition(100)
test_df = test_df.repartition(100)

开始训练模型

from pyspark.ml.classification import LogisticRegression
from pyspark.ml import Pipeline
from sparkdl import DeepImageFeaturizer featurizer = DeepImageFeaturizer(inputCol="image", outputCol="features", modelName="InceptionV3")
lr = LogisticRegression(maxIter=10, regParam=0.05, elasticNetParam=0.3, labelCol="label")
p = Pipeline(stages=[featurizer, lr])p_model = p.fit(train_df)

接下来评估下模型性能

from pyspark.ml.evaluation import MulticlassClassificationEvaluatortested_df = p_model.transform(test_df)
evaluator = MulticlassClassificationEvaluator(metricName="accuracy")
print("Test set accuracy = " + str(evaluator.evaluate(tested_df.select("prediction", "label"))))

在这里插入图片描述

大规模应用深度学习模型
Deep Learning Pipelines 支持使用 Spark 以分布式方式运行预训练模型,可用于批处理和流数据处理。
它包含一些最受欢迎的模型,使用户能够开始使用深度学习,而无需昂贵的模型训练步骤。 当然,模型的预测是与 Spark 带来的所有好处同时进行的。
除了使用内置模型外,用户还可以在 Spark 预测管道中插入 Keras 模型和 TensorFlow Graphs。 这将单节点工具上的任何单节点模型转换为可以以分布式方式应用于大量数据的模型。
以下代码使用 InceptionV3 创建 Spark 预测管道,InceptionV3 是用于图像分类的最先进的卷积神经网络 (CNN) 模型,并预测我们刚刚加载的图像中的对象。

from sparkdl import DeepImagePredictor
# Read images using Spark
image_df = ImageSchema.readImages("flower_photos/sample/")predictor = DeepImagePredictor(inputCol="image", outputCol="predicted_labels", modelName="InceptionV3", decodePredictions=True, topK=10)
predictions_df = predictor.transform(image_df)
predictions_df.select("predicted_labels").show(truncate=False,n=3)

请注意,predicted_labels 列将“daisy”显示为使用此基本模型的所有样本花的高概率类别,由于某种原因,郁金香更接近栅栏而不是花朵(可能是因为照片的背景)。
然而,从概率值的差异可以看出,神经网络具有辨别两种花型的信息。 因此,我们上面的迁移学习示例能够从基本模型开始正确地学习雏菊和郁金香之间的差异。
让我们看看我们的模型如何识别花朵的类型:

df = p_model.transform(image_df)
def _p1(v):return float(v.array[1])
take_one = udf(_p1, DoubleType())
df.select("image.origin",(1-take_one(df.probability)).alias("p_daisy")).show(truncate=False)

在这里插入图片描述


总结

本文主要介绍深度学习在Spark上的应用,以花卉图片为例,使用 Deep Learning Pipelines,并讲解使用DL Pipelines的方式。 我们还通过Pipelines实现Transfer Learning,同时通过预训练模型实现来处理少量数据并实现预测。

相关内容

热门资讯

同学会联欢会主持词 同学会联欢会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在一步步向前发展的社会中,越来越多的活...
搞笑脱口秀台词脱口秀台词 搞笑脱口秀台词脱口秀台词1100字校园脱口秀台词每天,当我的双脚迈入合肥七中的大门,强相互作用会把我...
学生会换届大会主持词 学生会换届大会主持词  主持词的内容  主持词一般由开场白、中间部分与结束语组成。  开场白 演出或...
教研活动公开课主持稿   教研活动公开课主持稿  篇一:数学教研活动主持词  各位领导、各位老师,大家好!  在这样一个春...
《花木兰》感人台词 《花木兰》感人台词  壹 孝,替父从军父女情  感人段落:军令如山,花弧爱国心切,无奈年老气衰,百病...
红歌赛主持词 红歌赛主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和集会中,主持人往往成了...
联欢晚会主持词 联欢晚会主持词3篇  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。在如今这个时...
金榜题名主持词 金榜题名主持词(精选23篇)  主持词要根据活动对象的不同去设置不同的主持词。随着社会一步步向前发展...
光荣退休领导致辞 光荣退休领导致辞范文(通用5篇)  在学习、工作或生活中,要用到致辞的情况还是蛮多的,致辞是指在仪式...
大学迎新晚会主持词 大学迎新晚会主持词  迎新,全称迎接新春,又叫迎接新年。迎新是中国的传统节日形式。或者欢迎、迎接新来...
教师节校长简短致辞 教师节校长简短致辞(通用10篇)  在日常学习、工作抑或是生活中,大家或多或少都用到过致辞吧,在各种...
张国荣经典台词 关于张国荣经典台词  1、哭,我为了感动谁,笑,又为了碰着谁。  ——《路过蜻蜓》  2、虽然我很喜...
新郎婚礼简短致辞 新郎婚礼简短致辞(精选10篇)  在平平淡淡的学习、工作、生活中,大家都经常接触到致辞吧,致辞是指在...
美剧经典台词截图 美剧经典台词截图  在社会发展不断提速的今天,用到台词的地方越来越多,台词是一种特殊的文学语言,必须...
女朋友撒娇的经典台词 女朋友撒娇的经典台词  1、这种被朋友的情况让我很失落,因为我喜欢他。  2、“她就是躲着我我该怎么...
会主持词开场白 会主持词开场白  篇一  尊敬的各位领导、各位来宾  各位公司同仁:  大家下午好!  非常高兴和大...
中国人寿保险公司晨会主持词 中国人寿保险公司晨会主持词  主持词由主持人于节目进行过程中串联节目的串联词。以下是小编整理的中国人...
公司中秋晚会主持词 关于公司中秋晚会主持词  主持词分为会议主持词、晚会主持词、活动主持词、婚庆主持词等。在当今不断发展...
小学生职位竞选词 小学生职位竞选词  个人觉得竞选中队长,你已经很清楚中队长需要做的事情了,那么就从每一个任务来发展一...
在结婚典礼上的精彩幽默主持词 在结婚典礼上的精彩幽默主持词各位来宾:大家好!奉新郎新娘之命,我来主持今天的婚礼。为什么新郎新娘一定...