【机器学习】谷歌云基于TensorFlow高级机器学习

简介: 谷歌云基于TensorFlow高级机器学习

 

目录

前言

一、End-to-End Machine Learning with TensorFlow on GCP(基于TensorFlow的机器学习)

1.什么是TensorFlow

2.TensorFlow优点

3.搭建TensorFlow Serving集群

二、Machine learning production environment(机器学习生产环境)

三、Image Understanding with TensorFlow on GCP(通过TensorFlow进行图像处理)

1.神经网络原理

2.卷积层

3.池化层

4.Tensorflow中的最大池化层


图片.png

image.gif

前言

深度学习的框架其实有很多,目前来说最火的还要数Pytorch、TensorFlow以及Keras。其中Pytorch比较适合学术研究,自己搞着玩,如果工业实践就不太适合了。TensorFlow由于时间比较久,学起来比较困难,不过有完整的开发、部署方案,还有大量的github项目可供参考。Keras则是TensorFlow的一个高级API,同类的还有TensorFlow的TFLearn等等。

一、End-to-End Machine Learning with TensorFlow on GCP(基于TensorFlow的机器学习)

1.什么是TensorFlow

TensorFlow是一个基于数据流编程符号数学系统,被广泛应用于各类机器学习算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。

2.TensorFlow优点

    • 易用性:有对应Python的API
    • 可移植性:一套代码就可以适应单个或者多个CPU、GPU、移动设备等
    • 灵活性:可以部署在树莓派、安卓、windows、ios、linux等上
    • 可视化:有tensorboard提供开发的可视化界面,方便跟踪调参
    • 检查点:可以通过检查点记录保存实验数据
    • 自动微积分:自动求解梯度
    • 庞大的社区:一年内拥有10000+的开发者,3000+的项目
    • 大量基于TensorFlow的项目代码

    3.搭建TensorFlow Serving集群

    TensorFlow Serving也提供了Docker的方式来安装或使用,但是目前并没有提供官方镜像或者提供Dockerfile来进行自动构建。现在需要通过手工方式来构建TensorFlow Serving镜像。为了简化部署,我提供了两个预构建的TensorFlow Serving的示例镜像来进行测试。

    registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow-serving : TensorFlow Serving的基础镜像
    registry.cn-hangzhou.aliyuncs.com/denverdino/inception-serving : 基于上述基础镜像添加Inception模型实现的服务镜像

    image.gif

    利用Docker命令启动名为 “inception-serving” 容器作为TF Serving服务器

    docker run -d --name inception-serving registry.cn-hangzhou.aliyuncs.com/denverdino/inception-serving

    image.gif

    利用Docker命令以交互式方式启动 “tensorflow-serving” 镜像作为客户端,并定义容器link,允许在容器内部通过“serving”别名来访问“inception-serving”容器

    docker run -ti --name client --link inception-serving:serving registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow-serving

    image.gif

    在客户端容器,执行下面的脚本,可以方便地利用“inception-serving”服务来进行图像识别

    这里图片自己定义,网上就可以找到

    # persian cat
    curl http://f.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=6268660aafec8a13141a50e6cf38f6b2/32fa828ba61ea8d3c85b36e1910a304e241f58dd.jpg -o 1.jpg
    /serving/bazel-bin/tensorflow_serving/example/inception_client --server=serving:9000 --image=2.jpg
    # garfield cat
    curl http://a2.att.hudong.com/60/11/01300000010387125853110118750_s.jpg -o 1.jpg
    /serving/bazel-bin/tensorflow_serving/example/inception_client --server=serving:9000 --image=2.jpg

    image.gif

    二、Machine learning production environment(机器学习生产环境)

    这里我们利用Anaconda作为生产环境

    Anaconda提供了一个默认的base环境,也可以直接在base环境中开发应用程序。基于课程内容需要,我们创建tensorflow-cpu环境

    conda create -n ENV_NAME python=x.x
    -n表示环境名称参数,
    ENV_NAME为待创建虚拟开发环境的名称,
    x.x表示该环境中python的版本是多少

    image.gif

    启动Windows命令行窗口,在窗口输入下面的命令

    conda create -n tensorflow-cpu python=3.9

    image.gif

    若出现‘conda’不是内部或外部命令,也不是可运行的程序等信息,需要配置Anaconda系统环境变量。命令执行完成,名称为tensorflow-cpu的虚拟开发环境就创建成功了。

    查看当前Anaconda有哪些虚拟环境

    conda env list

    image.gif

    激活命令:命令激活环境后,才能进入该虚拟环境进行编程

    conda activate ENV_NAME

    image.gif

    退出环境命令

    若需要退出当前虚拟开发环境,可以使用下面的命令:
    conda deactivate

    image.gif

    删除环境命令

    该命令需谨慎使用,因为该命令会删除虚拟环境下的所有数据
    conda remove -n ENV_NAME --all

    image.gif

    安装Python依赖包

    在tensorflow-cpu环境下使用pip工具软件安装numpy、matplotlib、pillow、pandas、scikit-learn。
    启动Windows命令行窗口,在命令行窗口输入激活命令,激活tensorflow-cpu环境。
    conda activate tensorflow-cpu
    tensorflow-cpu环境激活后,使用pip工具分别安装上述Python依赖包。安装建议使用清华大学镜像站。如安装numpy命令如下:
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
    pip安装matplotlib时,会自动安装pillow包。

    image.gif

    安装tensorflow-cpu版本

    tensorflow分为两个版本,一个是CPU版本,一个是GPU版本。GPU版本充分应用了图形处理器的计算引擎,缩短模型训练的时间,GPU版本需要独立显卡的支持
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==2.6.0
    上面的命令将在本地安装tensorflow 2.6.0版本,默认安装是cpu模式。
    安装完成,需要验证tensorflow 2.6.0是否安装成功。
    启动Windows命令行窗口,使用conda激活命令激活tensorflow-cpu环境,进入Python环境。
    C:\Users\1>conda activate tensorflow-cpu
    (tensorflow-cpu) C:\Users\1>
    (tensorflow-cpu) C:\Users\1>python
    >>> import tensorflow as tf
    >>> print(tf.__version__)
    2.6.0

    image.gif

    三、Image Understanding with TensorFlow on GCP(通过TensorFlow进行图像处理)

    图片.pngimage.gif


    1.神经网络原理

    这里的神经网络,也指人工神经网络(Artificial Neural Networks,简称ANNs),是一种模仿生物神经网络行为特征的算法数学模型,由神经元、节点与节点之间的连接(突触)所构成。

    图片.pngimage.gif


    2.卷积层

    卷积神经网络中每层卷积层(Convolutional layer)由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。

    图片.pngimage.gif


    图像分析研究的领域一般包括:

    基于内容的图像检索(CBIR-Content Based Image Retrieval)

    人脸识别(face recognition)

    表情识别(emotion recognition)

    光学字符识别(OCR-Optical Character Recognition)

    手写体识别(handwriting recognition)

    医学图像分析(biomedical image analysis)

    视频对象提取(video object extraction)

    3.池化层

    既对数据进行降采样(down-sampling)操作,又可以用p范数(p-norm)作非线性映射的“卷积” p范数:||A||p=(m∑i=1n∑j=1|aij|p)1/p,p>=1p范数:||A||p=(∑i=1m∑j=1n|aij|p)1/p,p>=1
    当 p→∞p→∞ 时即为最大池化

    具体作用为:

      1. 特征不变性--使模型更关注包含一定的自由度,能容忍特征微小的位移
      2. 特征降维--降采样使后续操作的计算量得到减少
      3. 一定程度防止过拟合

      池化层的作用

      池化层用于进一步缩小经卷积层处理过后的节点矩阵,从而进一步减少最后交付给全连接神经网络的参数个数。虽然池化层的作用遭到过质疑,但是在大多数模型中仍然使用了池化层。

      池化层的处理

      池化层中有一个类似于卷积层中过滤器的设置。不过相比卷积层中过滤器的加权求和,池化层中过滤器只是简单地求相应尺寸内子节点矩阵的最大值或者平均值。

      池化层与卷积层的区别

      池化层中的过滤器与卷积层中过滤器最大的区别是:卷积层内的过滤器可以同时处理当前层中整个深度下的子节点矩阵,而池化层内的过滤器只能一层层深度地处理当前层的子节点矩阵。所以池化层过滤器除了像卷积层内一样在二维上从节点矩阵左上角移动至右下角以外,还会在深度上进行移动。

      图片.pngimage.gif


      4.Tensorflow中的最大池化层

      tf.nn.max_pool()最大池化

      函数:

      input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一

      filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维

      strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4

      padding:string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的卷积方式(后面会介绍)

      use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true结果返回一个Tensor,这个输出,就是我们常说的feature map

      实验:

      这里直接附上实验代码

      import tensorflow as tf
      #case 2
      input = tf.Variable(tf.random_normal([1,3,3,5]))
      filter = tf.Variable(tf.random_normal([1,1,5,1]))
      op2 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
      #case 3
      input = tf.Variable(tf.random_normal([1,3,3,5]))
      filter = tf.Variable(tf.random_normal([3,3,5,1]))
      op3 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
      #case 4
      input = tf.Variable(tf.random_normal([1,5,5,5]))
      filter = tf.Variable(tf.random_normal([3,3,5,1]))
      op4 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
      #case 5
      input = tf.Variable(tf.random_normal([1,5,5,5]))
      filter = tf.Variable(tf.random_normal([3,3,5,1]))
      op5 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
      #case 6
      input = tf.Variable(tf.random_normal([1,5,5,5]))
      filter = tf.Variable(tf.random_normal([3,3,5,7]))
      op6 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
      #case 7
      input = tf.Variable(tf.random_normal([1,5,5,5]))
      filter = tf.Variable(tf.random_normal([3,3,5,7]))
      op7 = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding='SAME')
      #case 8
      input = tf.Variable(tf.random_normal([10,5,5,5]))
      filter = tf.Variable(tf.random_normal([3,3,5,7]))
      op8 = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding='SAME')
      init = tf.initialize_all_variables()
      with tf.Session() as sess:
        sess.run(init)
        print("case 2")
        print(sess.run(op2))
        print("case 3")
        print(sess.run(op3))
        print("case 4")
        print(sess.run(op4))
        print("case 5")
        print(sess.run(op5))
        print("case 6")
        print(sess.run(op6))
        print("case 7")
        print(sess.run(op7))
        print("case 8")
        print(sess.run(op8))

      image.gif

      感谢支持

      相关实践学习
      部署Stable Diffusion玩转AI绘画(GPU云服务器)
      本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
      相关文章
      |
      12天前
      |
      机器学习/深度学习 人工智能 算法
      【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
      手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
      44 0
      【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
      |
      22天前
      |
      机器学习/深度学习 TensorFlow API
      机器学习实战:TensorFlow在图像识别中的应用探索
      【10月更文挑战第28天】随着深度学习技术的发展,图像识别取得了显著进步。TensorFlow作为Google开源的机器学习框架,凭借其强大的功能和灵活的API,在图像识别任务中广泛应用。本文通过实战案例,探讨TensorFlow在图像识别中的优势与挑战,展示如何使用TensorFlow构建和训练卷积神经网络(CNN),并评估模型的性能。尽管面临学习曲线和资源消耗等挑战,TensorFlow仍展现出广阔的应用前景。
      49 5
      |
      1月前
      |
      机器学习/深度学习 人工智能 算法
      【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
      玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
      59 0
      【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
      |
      2月前
      |
      机器学习/深度学习 算法 TensorFlow
      交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
      交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
      108 6
      交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
      |
      3月前
      |
      持续交付 测试技术 jenkins
      JSF 邂逅持续集成,紧跟技术热点潮流,开启高效开发之旅,引发开发者强烈情感共鸣
      【8月更文挑战第31天】在快速发展的软件开发领域,JavaServer Faces(JSF)这一强大的Java Web应用框架与持续集成(CI)结合,可显著提升开发效率及软件质量。持续集成通过频繁的代码集成及自动化构建测试,实现快速反馈、高质量代码、加强团队协作及简化部署流程。以Jenkins为例,配合Maven或Gradle,可轻松搭建JSF项目的CI环境,通过JUnit和Selenium编写自动化测试,确保每次构建的稳定性和正确性。
      62 0
      |
      3月前
      |
      缓存 开发者 测试技术
      跨平台应用开发必备秘籍:运用 Uno Platform 打造高性能与优雅设计兼备的多平台应用,全面解析从代码共享到最佳实践的每一个细节
      【8月更文挑战第31天】Uno Platform 是一种强大的工具,允许开发者使用 C# 和 XAML 构建跨平台应用。本文探讨了 Uno Platform 中实现跨平台应用的最佳实践,包括代码共享、平台特定功能、性能优化及测试等方面。通过共享代码、采用 MVVM 模式、使用条件编译指令以及优化性能,开发者可以高效构建高质量应用。Uno Platform 支持多种测试方法,确保应用在各平台上的稳定性和可靠性。这使得 Uno Platform 成为个人项目和企业应用的理想选择。
      66 0
      |
      3月前
      |
      API UED 开发者
      如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
      【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
      83 0
      |
      3月前
      |
      UED 存储 数据管理
      深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
      【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
      94 0
      |
      3月前
      |
      开发者 算法 虚拟化
      惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
      【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
      84 0
      |
      3月前
      |
      前端开发 开发者 设计模式
      揭秘Uno Platform状态管理之道:INotifyPropertyChanged、依赖注入、MVVM大对决,帮你找到最佳策略!
      【8月更文挑战第31天】本文对比分析了 Uno Platform 中的关键状态管理策略,包括内置的 INotifyPropertyChanged、依赖注入及 MVVM 框架。INotifyPropertyChanged 方案简单易用,适合小型项目;依赖注入则更灵活,支持状态共享与持久化,适用于复杂场景;MVVM 框架通过分离视图、视图模型和模型,使状态管理更清晰,适合大型项目。开发者可根据项目需求和技术栈选择合适的状态管理方案,以实现高效管理。
      45 0
      下一篇
      无影云桌面