千家信息网

如何深度学习与 Spark 和 TensorFlow

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,如何深度学习与 Spark 和 TensorFlow,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。深度学习与 Spark
千家信息网最后更新 2024年09月21日如何深度学习与 Spark 和 TensorFlow

如何深度学习与 Spark 和 TensorFlow,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

深度学习与 Spark 和 TensorFlow

在过去几年中,神经网络领域的发展非常迅猛,也是现在图像识别和自动翻译领域中最强者。TensorFlow 是谷歌发布的数值计算和神经网络的新框架。本文中,我们将演示如何使用TensorFlow和Spark一起训练和应用深度学习模型。

你可能会困惑:在最高性能深度学习实现还是单节点的当下, Spark 的用处在哪里?为了回答这个问题,我们将会演示两个例子并解释如何使用 Spark 和机器集群搭配 TensorFlow 来提高深度学习的管道数。

  1. 超参数调整: 使用 Spark 来找到最优的神经网络训练参数集,减少十倍训练时间并降低34%的失误率。

  2. 部署模型规模: 使用 Spark 在大量数据上应用训练完毕的神经网络模型。

超参数调整

深度机器学习(ML)技术的一个典型应用是人工神经网络。它们采取一个复杂的输入,如图像或音频记录,然后对这些信号应用复杂的数学变换。此变换的输出是更易于由其他ML算法处理的数字向量。人工神经网络通过模仿人类大脑的视觉皮层的神经元(以相当简化的形式)执行该转换。

就像人类学会解读他们所看到的,人工神经网络需要通过训练来识别那些"有趣"的具体模式。可以是简单的模式,比如边缘,圆形,但也可以是更复杂的模式。在这里,我们将用NIST提供的经典数据集来训练神经网络以识别这些数字:

TensorFlow 库将会自动创建各种形状和大小的神经网络训练算法。建立一个神经网络的实际过程,比单纯在数据集上跑一些算法要复杂得多。通常会有一些非常重要的超参数(通俗地说,参数配置)需要设置,这将影响该模型是如何训练的。选择正确的参数可以让性能优越,而坏的参数将会导致长时间的训练和糟糕的表现。在实践中,机器学习从业者会多次使用不同的超参数重复运行相同的模型,以期找到最佳的集合。这是一个被称为超参数调整的经典技术。

建立一个神经网络时,有许多需要精心挑选的重要超参数。 例如:

  • 每层的神经元数目:太少的神经元会降低网络的表达能力,但太多会大大增加运行时间,并返回模糊噪音。

  • 学习速度:如果过高,神经网络将只专注于看到过去的几个样例,并忽略之前积累的经验。如果太低,则需要很长时间才能达到一个很好的状态。

这里有趣的是,即使 TensorFlow 本身不予分发,超参数调整过程是"易并行"(embarrassingly parallel),并且可以使用 Spark 来分配的。在这种情况下,我们可以使用 Spark 广播通用的元素,例如数据和模型描述,然后以允许错误的方式安排机器集群中的个体进行独立的重复性计算。

如何使用 Spark 提高精度?用默认的超参数设置精度为99.2%。我们在测试集上的最好结果是99.47%的精确度,这减少了34%的测试误差。分布式计算时间与添加到集群的节点数量成线性关系:使用有13个节点的集群,我们能够并行培养13个模型,这相比于在同一台机器一个接着一个训练速度提升了7倍。这里是相对于该集群上机器的数量的计算时间(以秒计)的曲线图:

最重要的是,我们分析了大量训练过程中的超参数的灵敏度。例如,我们相对于不同数目的神经元所得学习率绘制了最终测试性能图:

这显示了一个典型的神经网络权衡曲线:

  • 学习速度是非常关键的:如果它太低,神经网络没有学到任何东西(高测试误差)。如果它太高,训练过程可能发生随机振荡甚至在某些配置下出现发散。

  • 神经元的数目对于获得良好的性能来说没有那么重要,并且有更多神经元的网络的学习率更加敏感。这是奥卡姆剃刀原则:对大多数目标来说,简单的模型往往已经"足够好"。除非你在训练中投入大量的时间和资源,并找到合适的超参数来除去这缺少的1%测试误差,这才会有所不同。

通过使用参数稀疏样本,我们可以在最优的参数集下取得零失误率。

我该如何使用它?

尽管 TensorFlow 可以使用每一个 worker 上的所有核心,但每个工人同一时间只能运行一个任务,我们可以将它们打包以限制竞争。TensorFlow 库可以按照[instructions on the TensorFlow website](https://www.tensorflow.org/get_started/os_setup.html)上的指示在 Spark 集群上作为一个普通的Python库进行安装。下面的笔记展示了用户如何安装 TensorFlow 库并重复该文章的实验:

  • 使用 TensorFlow 进行图像分布式处理

  • 使用 TensorFlow 进行图像分布式处理测试

大规模部署

TensorFlow 模型可以直接在管道内嵌入对数据集执行的复杂识别任务。作为一个例子,我们将展示我们如何能够使用一个已经训练完成的股票神经网络模型标注一组图片

首先使用 Spark 内置的广播机制将该模型分发到集群中的worker上:

with gfile.FastGFile( 'classify_image_graph_def.pb', 'rb') as f:  model_data = f.read()model_data_bc = sc.broadcast(model_data)

之后,这个模型被加载到每个节点上,并且应用于图片。这是每个节点运行的代码框架:

def apply_batch(image_url):  # Creates a new TensorFlow graph of computation and imports the model  with tf.Graph().as_default() as g:    graph_def = tf.GraphDef()    graph_def.ParseFromString(model_data_bc.value)    tf.import_graph_def(graph_def, name='')         # Loads the image data from the URL:    image_data = urllib.request.urlopen(img_url, timeout=1.0).read()         # Runs a tensor flow session that loads the     with tf.Session() as sess:      softmax_tensor = sess.graph.get_tensor_by_name('softmax:0')      predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data})      return predictions

通过将图片打包在一起,这份代码可以运行地更快。 下面是图片的一个样例:

这是神经网络对于这张图片的解释,相当精确:

   ('coral reef', 0.88503921),   ('scuba diver', 0.025853464),   ('brain coral', 0.0090828091),   ('snorkel', 0.0036010914),   ('promontory, headland, head, foreland', 0.0022605944)])

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

神经 网络 参数 神经网络 训练 学习 模型 集群 深度 时间 机器 神经元 测试 复杂 图片 数据 节点 应用 运行 重要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 浩景种植数据库 滴滴出行的网络技术层 debian开启服务器 软件开发应记入什么费用 中小学网络安全周方案 上海坤坤互联网科技有限公司 如何过计算机三级网络技术 网络安全评估专业知识 网络数据库安全操作 芜湖树袋熊网络技术有限公司 数据库设计学校运动员 客户服务crm软件开发 互联网时代的科技发明 怀旧服部落服务器有什么区别 上杭国际软件开发园一期 重庆市艺叮点网络技术有限公司 海南网络安全非标机箱定制 浦东新区品牌软件开发技术指导 网络安全发言表 请列举五种常用的中文数据库 德阳天气预报软件开发 河北应用软件开发报价技术规范 小红书软件开发薪资 厦门白湾鳄网络技术有限公司 哪些服务器可以启动多个端口 数据库技术与应用英语怎么说 网络安全三级考试是什么 数据是数据库的基本对象 网络安全有奖问答题 软件开发和通信知识
0