Code For Better 谷歌开发者之声—-谷歌云基于TensorFlow高级机器学习

Code For Better 谷歌开发者之声—-谷歌云基于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中的最大池化层


Code For Better 谷歌开发者之声----谷歌云基于TensorFlow高级机器学习

前言

深度学习的框架其实有很多,目前来说最火的还要数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模型实现的服务镜像 

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

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

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

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

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

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

# persian cat curl http://f.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=aafec8a13141a50e6cf38f6b2/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/0_s.jpg -o 1.jpg /serving/bazel-bin/tensorflow_serving/example/inception_client --server=serving:9000 --image=2.jpg

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

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

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

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

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

conda create -n tensorflow-cpu python=3.9

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

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

conda env list

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

conda activate ENV_NAME

退出环境命令

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

 删除环境命令

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

 安装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包。

 安装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 Understanding with TensorFlow on GCP(通过TensorFlow进行图像处理)

Code For Better 谷歌开发者之声----谷歌云基于TensorFlow高级机器学习

1.神经网络原理

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

Code For Better 谷歌开发者之声----谷歌云基于TensorFlow高级机器学习

2.卷积层

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

Code For Better 谷歌开发者之声----谷歌云基于TensorFlow高级机器学习

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

基于内容的图像检索(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. 一定程度防止过拟合

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

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

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

Code For Better 谷歌开发者之声----谷歌云基于TensorFlow高级机器学习

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)) 

本篇文章作为Google撰稿活动分享,感谢支持

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221977.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:51
下一篇 2026年3月17日 下午4:51


相关推荐

  • windows上mysql安装教程_mysql和oracle的区别

    windows上mysql安装教程_mysql和oracle的区别前期在windows电脑尝试安装mysql,经历诸多不顺,特把安装详细步骤以及遇见的问题记录下来,提供给有需者使用。配置过程主要分为五个步骤,如下所示:(1)确认本地是否安装mysql(2)下载mysql安装包(3)添加配置文件并安装mysql(4)修改mysql密码(5)配置环境变量【确认本地是否安装mysql】(1)按【win+r】快捷键打开运行;(2)输入services.msc,点击【确定】;(3)在打开的服务列表中查找mysql服务,如果没有mysql服务,说明本机没有安装my

    2025年11月15日
    4
  • matlab 三维立体图,(精)MATLAB三维图形绘制.ppt

    matlab 三维立体图,(精)MATLAB三维图形绘制.ppt4 2MATLAB 的三维图形绘制二 绘制三维网格图和曲面图 2 三维网格图 3 三维曲面图三 绘制三维旋转体四 立体图形与图轴的控制五 色彩的控制 2 色图的显示和处理 2 浓淡处理 shading4 3MATLAB 的特殊图形绘制二 直方图 例 4 21 绘制四个季度支出额的饼图 y

    2026年3月18日
    2
  • Lunix 命令_linux常用基本命令实例

    Lunix 命令_linux常用基本命令实例将常用到的Lunix基本命令整理一下。1.文本编辑命令使用:vifilename:对文本可以增删改查操作。viewfilename:可以理解成vi版本的只读操作。catfilename:普通查阅2.vi命令详解(1)退出并保存::ZZ或是:wq退出不保存::q!(2)光标移动:hjkl分别对应←…

    2026年4月15日
    5
  • 浅谈axios和ajax区别

    浅谈axios和ajax区别一 二者区别 1 理论区别 1 axios 是通过 Promise 实现对 ajax 技术的一种封装 就像 jquery 对 ajax 的封装一样 ajax 技术实现了局部数据的刷新 axios 实现了对 ajax 的封装 2 axios 是 ajax ajax 不止 axios axios 有的 ajax 都有 ajax 有的 axios 不一定有 2 代码区别 1 axiosaxios url getName method get responseType

    2026年3月19日
    2
  • IntelliJ IDEA 如何配置git[通俗易懂]

    提示:IntelliJIDEA以下简称IDEA;IntelliJIDEA配置git:需要的材料:一、git.exe二、配置git.exe的环境变量三、IDEA编辑器接下来就是配置了:①你必须去github官网下载一个git.exe,不知道官网的请点击这里,下载完之后安装即可。②安装完之后打开所在目录找到bin这个文件夹,我的是在D:\软件\GitHub\G…

    2022年4月9日
    74
  • Wind发布首个AI投研智能体平台WindClaw

    Wind发布首个AI投研智能体平台WindClaw

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号