Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >教程 | 从零开始:TensorFlow机器学习模型快速部署指南

教程 | 从零开始:TensorFlow机器学习模型快速部署指南

作者头像
机器之心
发布于 2018-05-10 03:56:09
发布于 2018-05-10 03:56:09
91600
代码可运行
举报
文章被收录于专栏:机器之心机器之心
运行总次数:0
代码可运行

选自Hive Blog

作者:Bowei

机器之心编译

参与:李亚洲、李泽南

本文将介绍一种将训练后的机器学习模型快速部署到生产种的方式。如果你已使用 TensorFlow 或 Caffe 等深度学习框架训练好了 ML 模型,该模型可以作为 demo。如果你更喜欢轻量级的解决方案,请阅读本文。

GitHub 地址:https://github.com/hiveml/simple-ml-serving

其中包含的条目有:

  • 检查 TensorFlow 安装:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_tensorflow.sh
  • 利用 stdin 运行在线分类:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_label_image.sh
  • 在本地主机上运行在线分类:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_tf_classify_server.sh
  • 将分类器放在硬编码代理器后面:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_basic_proxy.sh
  • 将分类器放在可实现服务发现的代理器后面:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_seaport_proxy.sh
  • 利用伪 DN 启用分类器:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_p2p_proxy.sh

生产环境中的机器学习

第一次进入 Hive 的机器学习空间,我们就已经拥有数百万个真值标注图像,这可以让我们在一周时间内从头训练(即随机权重)适用于特定使用案例的顶尖深度卷积图像分类模型。更典型的 ML 用例通常基于数百个图像,这种情况我推荐大家对现有模型进行微调。例如,https://www.tensorflow.org/tutorials/image_retraining 页面上有如何微调 ImageNet 模型对花样本数据集(3647 张图像,5 个类别)进行分类的教程。

安装 Bazel 和 TensorFlow 后,你需要运行以下代码,构建大约需要 30 分钟,训练需要 5 分钟:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(
cd "$HOME" && \
curl -O http://download.tensorflow.org/example_images/flower_photos.tgz && \
tar xzf flower_photos.tgz ;
) && \
bazel build tensorflow/examples/image_retraining:retrain \
          tensorflow/examples/image_retraining:label_image \
&& \
bazel-bin/tensorflow/examples/image_retraining/retrain \
  --image_dir "$HOME"/flower_photos \
  --how_many_training_steps=200
&& \
bazel-bin/tensorflow/examples/image_retraining/label_image \
  --graph=/tmp/output_graph.pb \
  --labels=/tmp/output_labels.txt \
  --output_layer=final_result:0 \
  --image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg

或者,如果你有 Docker,可以使用预制 Docker 图像,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker run -it --net=host liubowei/simple-ml-serving:latest /bin/bash

>>> cat test.sh && bash test.sh

进入容器中的交互式 shell,运行以上命令。你也可以阅读下文,在容器中按照下文说明进行操作。

现在,TensorFlow 将模型信息保存至/tmp/output_graph.pb 和 /tmp/output_labels.txt,二者作为命令行参数被输入至 label_image.py (https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/examples/image_retraining/label_image.py) 脚本。谷歌的图像识别教程也与另一个脚本(https://github.com/tensorflow/models/blob/master/tutorials/image/imagenet/classify_image.py#L130)有关,但是在这个例子中,我们将继续使用 label_image.py。

将单点推断转换成在线推断(TensorFlow)

如果我们只想接受标准输入的文件名,一行一个,则我们可以轻松实现「在线」推断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while read line ; do
bazel-bin/tensorflow/examples/image_retraining/label_image \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--output_layer=final_result:0 \
--image="$line" ;
done

如果以性能为出发点来看,这太糟糕了:我们需要为每个输入样本重新加载神经网络、权重、整个 TensorFlow 架构和 Python

我们当然可以做得更好。让我们从编辑 label_image.py script 开始。它的地址为 bazel-bin/tensorflow/examples/image_retraining/label_image.runfiles/org_tensorflow/tensorflow/examples/image_retraining/label_image.py。

我们将以下行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
141:  run_graph(image_data, labels, FLAGS.input_layer, FLAGS.output_layer,
142:        FLAGS.num_top_predictions)

改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
141:  for line in sys.stdin:
142:    run_graph(load_image(line), labels, FLAGS.input_layer, FLAGS.output_layer,
142:        FLAGS.num_top_predictions)

这样速度快多了,但是仍然不是最好!

原因在于第 100 行的 with tf.Session() as sess 构造。本质上,TensorFlow 在每次启用 run_graph 时,将所有计算加载至内存中。如果你试着在 GPU 上执行推断时就会明显发现这一现象,你会看到 GPU 内存随着 TensorFlow 在 GPU 上加载和卸载模型参数而升降。据我所知,该构造在其他 ML 框架如 Caffe 或 PyTorch 中不存在。

解决方案是去掉 with 语句,向 run_graph 添加 sess 变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def run_graph(image_data, labels, input_layer_name, output_layer_name,
              num_top_predictions, sess):
    # Feed the image_data as input to the graph.
    #   predictions will contain a two-dimensional array, where one
    #   dimension represents the input image count, and the other has
    #   predictions per class
    softmax_tensor = sess.graph.get_tensor_by_name(output_layer_name)
    predictions, = sess.run(softmax_tensor, {input_layer_name: image_data})
    # Sort to show labels in order of confidence
    top_k = predictions.argsort()[-num_top_predictions:][::-1]
    for node_id in top_k:
      human_string = labels[node_id]
      score = predictions[node_id]
      print('%s (score = %.5f)' % (human_string, score))
    return [ (labels[node_id], predictions[node_id].item()) for node_id in top_k ] # numpy floats are not json serializable, have to run item

...

  with tf.Session() as sess:
    for line in sys.stdin:
      run_graph(load_image(line), labels, FLAGS.input_layer, FLAGS.output_layer,
          FLAGS.num_top_predictions, sess)

代码地址:https://github.com/hiveml/simple-ml-serving/blob/master/label_image.py

运行后,你会发现每张图像花费时间约为 0.1 秒,这样的速度快到可以在线使用了。

将单点推断转换成在线推断(其他 ML 框架)

  • Caffe 使用其 net.forward 代码,详见:http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb。
  • Mxnet 也很独特:它实际上已开源可用的推断服务器代码:https://github.com/awslabs/mxnet-model-server。

部署

计划是将代码封装进 Flask app。Flask 是一个轻量级 Python 网页框架,允许用极少的工作运行 http api 服务器。

作为快速推断,下列 Flask app 接受 multipart/form-data 的 POST 请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# usage: python echo.py to launch the server ; and then in another session, do
# curl -v -XPOST 127.0.0.1:12480 -F "data=@./image.jpg"
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def classify():
    try:
        data = request.files.get('data').read()
        print repr(data)[:1000]
        return data, 200
    except Exception as e:
        return repr(e), 500
app.run(host='127.0.0.1',port=12480)

下面是对应的 Flask app,可连接上文提到的 run_graph:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
And here is the corresponding flask app hooked up to run_graph above:

#!/usr/bin/env python
# usage: bash tf_classify_server.sh
from flask import Flask, request
import tensorflow as tf
import label_image as tf_classify
import json
app = Flask(__name__)
FLAGS, unparsed = tf_classify.parser.parse_known_args()
labels = tf_classify.load_labels(FLAGS.labels)
tf_classify.load_graph(FLAGS.graph)
sess = tf.Session()
@app.route('/', methods=['POST'])
def classify():
    try:
        data = request.files.get('data').read()
        result = tf_classify.run_graph(data, labels, FLAGS.input_layer, FLAGS.output_layer, FLAGS.num_top_predictions, sess)
        return json.dumps(result), 200
    except Exception as e:
        return repr(e), 500
app.run(host='127.0.0.1',port=12480)

看起来还不错,除了 Flask 和 TensorFlow 完全同步以外:执行图像分类时,Flask 按照接收请求的顺序一次处理一个请求,而 TensorFlow 完全占用线程。

如上所述,速度的瓶颈可能仍然在于实际计算量,因此升级 Flask 封装器代码没有太大意义。或许该代码足以处理加载。有两个明显的方式可以扩大请求吞吐量:通过增加工作线程的数量来水平扩大请求吞吐量(下一节将讲述),或利用 GPU 和批逻辑(batching logic)垂直扩大请求吞吐量。后者的实现要求网页服务器一次处理多个挂起请求,并决定是否等待较大批次还是将其发送至 TensorFlow 图线程进行分类,对此 Flask app 完全不适合。两种方式使用 Twisted + Klein 用 Python 写代码;如果你偏好第一类事件循环支持,并希望能够连接到非 Python ML 框架如 Torch,则需要使用 Node.js + ZeroMQ。

扩展:负载平衡和服务发现

现在我们已经有一个模型可用的服务器,但是它可能太慢,或我们的负载太高。我们想运行更多此类服务器,那么我们应该怎样在多个服务器上对其进行分布呢?普通方法是添加一个代理层,可以是 haproxy 或 nginx,可以平衡后端服务器之间的负载,同时向用户呈现一个统一的界面。下面是运行初级 Node.js 负载平衡器 http proxy 的示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Usage : node basic_proxy.js WORKER_PORT_0,WORKER_PORT_1,...
const worker_ports = process.argv[2].split(',')
if (worker_ports.length === 0) { console.err('missing worker ports') ; process.exit(1) }

const proxy = require('http-proxy').createProxyServer({})
proxy.on('error', () => console.log('proxy error'))

let i = 0
require('http').createServer((req, res) => {
  proxy.web(req,res, {target: 'http://localhost:' + worker_ports[ (i++) % worker_ports.length ]})
}).listen(12480)
console.log(`Proxying localhost:${12480} to [${worker_ports.toString()}]`)

// spin up the ML workers
const { exec } = require('child_process')
worker_ports.map(port => exec(`/bin/bash ./tf_classify_server.sh ${port}`))

为了自动检测后端服务器的数量和地址,人们通常使用一个「服务发现」工具,它可能和负载平衡器捆绑在一起,也可能分开。一些有名的工具,如 Consul 和 Zookeeper。设置并学习如何使用此类工具超出了本文范畴,因此,我使用 node.js 服务发现包 seaport 推断了一个非常初级的代理。代理代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Usage : node seaport_proxy.js
const seaportServer = require('seaport').createServer()
seaportServer.listen(12481)
const proxy = require('http-proxy').createProxyServer({})
proxy.on('error', () => console.log('proxy error'))

let i = 0
require('http').createServer((req, res) => {
  seaportServer.get('tf_classify_server', worker_ports => {
    const this_port = worker_ports[ (i++) % worker_ports.length ].port
    proxy.web(req,res, {target: 'http://localhost:' + this_port })
  })
}).listen(12480)
console.log(`Seaport proxy listening on ${12480} to '${'tf_classify_server'}' servers registered to ${12481}`)

工作线程代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Usage : node tf_classify_server.js
const port = require('seaport').connect(12481).register('tf_classify_server')
console.log(`Launching tf classify worker on ${port}`)
require('child_process').exec(`/bin/bash ./tf_classify_server.sh ${port}`)

但是,在应用到机器学习时,这个配置会遇到带宽问题。

系统如果每秒钟处理数十、数百张图片,它就会卡在系统带宽上。在目前的装配上,所有的数据需要通过我们的单个 seaport 主机,也是面向客户端的单个端点。

为了解决这个问题,我们需要客户不点击单个端点:http://127.0.0.1:12480,而是在后端服务器间自动旋转来点击。如果你懂网络架构,这听起来更像是 DNS 的活。

但是,配置定制的 DNS 服务器不在本文的讨论范围。把客户端代码改编遵循成 2 阶「手动 DNS」协议就行,我们能重复使用基本的 seaport proxy 来实现「端对端的」协议,其中客户能直接连接到服务器:

代理代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Usage : node p2p_proxy.js
const seaportServer = require('seaport').createServer()
seaportServer.listen(12481)

let i = 0
require('http').createServer((req, res) => {
  seaportServer.get('tf_classify_server', worker_ports => {
    const this_port = worker_ports[ (i++) % worker_ports.length ].port
    res.end(`${this_port}
`)
  })
}).listen(12480)
console.log(`P2P seaport proxy listening on ${12480} to 'tf_classify_server' servers registered to ${12481}`)

(worker code 和上面一样)

客户端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -v -XPOST localhost:`curl localhost:12480` -F"data=@$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg"

结论与拓展阅读

这个时候,你应该上手做点什么,但这肯定也不是不会过时的技术。在此文章中,还有很多重要的主题没被覆盖到:

  • 在新硬件上的自动开发与装配
  • 在自己的硬件上,值得关注的工具包括 Openstack/VMware,还有安装 Docker、管理网络路径的 Chef/Puppet,安装 TensorFlow、Python 等等的 Docker。
  • 在云端,Kubernetes 或者 Marathon/Mesos 都非常棒
  • 模型版本管理
  • 一开始手动管理模型不是很难
  • TensorFlow Serving 是处理这个问题的不错工具,还有批处理和整体部署,非常彻底。缺点是有点难以配置,也难以编写客户端代码,此外还不支持 Caffe/PyTorch。
  • 如何从 Matlab 迁移机器学习代码?
  • 在开发产品中不要用 Matlab(译者注:仅代表作者观点)。
  • GPU 驱动、Cuda、CUDNN
  • 使用英伟达容器并尝试寻找一些在线 Dorckerfiles
  • 后处理层。一旦你在开发产品过程中找到一些不同的机器学习模型,你可能想要混合这些模型,并为不同的使用案例匹配不同的模型——也就是模型 B 没结果跑模型 A,在 Caffe 上跑模型 C,并把结果传送到 TensorFlow 上跑的模型 D,等等。

原文链接:https://thehive.ai/blog/simple-ml-serving

本文为机器之心编译,转载请联系本公众号获得授权。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从零开始:TensorFlow机器学习模型快速部署指南
选自Hive Blog 作者:Bowei 机器之心编译 参与:李亚洲、李泽南 本文将介绍一种将训练后的机器学习模型快速部署到生产种的方式。如果你已使用 TensorFlow 或 Caffe 等深度学习框架训练好了 ML 模型,该模型可以作为 demo。如果你更喜欢轻量级的解决方案,请阅读本文。 GitHub 地址:https://github.com/hiveml/simple-ml-serving 其中包含的条目有: 检查 TensorFlow 安装:https://github.com/hiveml/s
企鹅号小编
2018/02/02
1.5K0
手把手:我的深度学习模型训练好了,然后要做啥?
大数据文摘作品 编译:姜范波、云舟 本文讲的是如何快速而不求完美地部署一个训练好的机器学习模型并应用到实际中。如果你已经成功地使用诸如Tensorflow或Caffe这样的框架训练好了一个机器学习模型,现在你正在试图让这个模型能够快速的演示,那么读这篇文章就对了。 阅读时长: 10-15分钟 使用前检查清单 检查tensorflow的安装 从 stdin 运行在线分类 在本地运行分类 把分类器放到硬编码(hardcoded)的代理 把分类器放到有服务发现(service discovery)的代理 用一
大数据文摘
2018/05/24
1.7K0
深度学习Tensorflow生产环境部署(下·模型部署篇)
部署完docker后,如果是cpu环境,可以直接拉取tensorflow/serving,如果是GPU环境则麻烦点,具体参考前一篇,这里就不再赘述了。
用户1154259
2019/01/07
1.8K0
MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
王瀚宸 编译自 Hackernoon 量子位 报道 | 公众号 QbitAI 上周末,量子位翻译了一份MobileNet教程,其中讲述了怎样在一个新的数据集上重新训练MobileNet,那篇文章的成果
量子位
2018/03/28
1.7K0
MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
TensorFlow实战——图像分类神经网络模型
Learn how to classify images with TensorFlow 使用TensorFlow创建一个简单而强大的图像分类神经网络模型 by Adam Monsen ▌引言 由于深度学习算法和硬件性能的快速发展,研究人员和各大公司在图像识别,语音识别,推荐引擎和机器翻译等领域取得了长足的进步。六年前,在计算机视觉领域首先出现重大突破,这其中以CNN模型在ImageNet数据集上的成功为代表。两年前,Google Brain团队开源TensorFlow,使得我们可以灵巧快速地开发自己的
企鹅号小编
2018/01/25
1.5K0
如何用TF Serving部署TensorFlow模型
如何将机器学习(ML)模型部署上线至生产环境已成为经常性的热门话题。为此许多公司和框架提出了各种不同的解决方案。
AI研习社
2019/05/08
3K0
如何用TF Serving部署TensorFlow模型
十分钟搞定 Tensorflow 服务
Tensorflow 服务是谷歌推荐用来部署 Tensorflow 模型的方法。如果你不具备一定的计算机工程知识背景,即使你对 Tensorflow 本身感觉很顺手,但是我觉得想要搞定 Tensorflow 服务也不是辣么容易的。以下三点是我总结的难点: (谷歌官方)教程含有 C++ 代码(我不会 C++) 教程里含有 kubernetes,gRPG,Bezel(其中一些我也是第一次见) 需要被编译出来。那个过程时间太长了,恐怕要用一个世纪吧! 这里介绍一种可能是最简单的方式——用 tensorflow 服
AI研习社
2018/03/19
1.5K0
十分钟搞定 Tensorflow 服务
TensorFlow-3: 用 feed-forward neural network 识别数字
本文介绍了如何使用 TensorFlow-3.0 和 Keras 在 Python 中构建一个简单的全连接神经网络,用于 MNIST 手写数字识别任务。首先,作者介绍了如何下载和安装 TensorFlow-3.0 和 Keras,然后描述了如何使用两个隐藏层实现一个具有 128 个神经元和 10 个输出节点的全连接神经网络。接下来,作者演示了如何将训练数据集划分为训练、验证和测试数据集,并使用交叉熵损失函数和梯度下降优化器进行训练。最后,作者使用测试数据集评估了模型的准确率。整个代码的 GitHub 地址为 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials/mnist。
杨熹
2017/08/01
1.4K0
C-SATS工程副总裁教你如何用TensorFlow分类图像 part1
最近在深度学习算法和硬件性能方面的最新进展使研究人员和公司在图像识别,语音识别,推荐引擎和机器翻译等领域取得了巨大的进步。六年前,首次机器在视觉模式识别方面的表现首次超过人类。两年前,Google Brain团队发布了TensorFlow,让深度学习可以应用于大众。TensorFlow超越了许多用于深度学习的复杂工具。 有了TensorFlow,你可以访问具有强大功能的复杂特征。它之所以如此强大,是因为TensorFlow的易用性非常好。 本文由两部分组成,我将介绍如何快速创建用于实际图像识别的卷积神经网络
AiTechYun
2018/03/06
7300
C-SATS工程副总裁教你如何用TensorFlow分类图像 part1
使用 TensorFlow 构建机器学习项目:6~10
卷积神经网络是当前使用的许多最高级模型的一部分。 它们被用于许多领域,但是主要的应用领域是图像分类和特征检测领域。
ApacheCN_飞龙
2023/04/23
2.3K0
机器学习入门之HelloWorld(Tensorflow)
1 环境搭建 (Windows) 安装虚拟环境 Anaconda,方便python包管理和环境隔离。 Anaconda3 4.2 http://mirrors.oa.com/anaconda/archive/Anaconda3-4.2.0-Windows-x86_64.exe,自带python 3.5。 创建tensorflow隔离环境。打开Anaconda安装后的终端Anaconda Prompt,执行下面命令 conda create -n tensorflow python=3.5 #创建名为ten
腾讯Bugly
2018/04/27
1.2K0
机器学习入门之HelloWorld(Tensorflow)
tf43:tensorflow Serving gRPC 部署实例
版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 https://blog.csdn.net/u014365862/article/details/81009551
MachineLP
2019/05/26
2.6K1
【TensorFlow】使用迁移学习训练自己的模型
最近在研究tensorflow的迁移学习,网上看了不少文章,奈何不是文章写得不清楚就是代码有细节不对无法运行,下面给出使用迁移学习训练自己的图像分类及预测问题全部操作和代码,希望能帮到刚入门的同学。
刘早起
2020/04/23
2.2K0
tensorflow机器学习模型的跨平台上线
    在用PMML实现机器学习模型的跨平台上线中,我们讨论了使用PMML文件来实现跨平台模型上线的方法,这个方法当然也适用于tensorflow生成的模型,但是由于tensorflow模型往往较大,使用无法优化的PMML文件大多数时候很笨拙,因此本文我们专门讨论下tensorflow机器学习模型的跨平台上线的方法。
刘建平Pinard
2018/08/07
1.3K0
学习笔记TF063:TensorFlow Debugger
本文介绍了TensorFlow的发展历史、版本、安装、基础教程、高级教程、模型和调优、性能测试、C++部署、Java部署、Python部署、量化、预测、推理、可视化、TensorFlow Hub、TensorFlow Lite、TensorFlow.js、TensorFlow.Python、TensorFlow.Java、TensorFlow.C++等相关内容。
利炳根
2017/11/13
1.7K0
tensorflow学习笔记(十九):分布式Tensorflow
最近在学习怎么分布式Tensorflow训练深度学习模型,看官网教程看的云里雾里,最终结合着其它资料,终于对分布式Tensorflow有了些初步了解.
ke1th
2019/05/26
5730
机器之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络
机器之心原创 参与:蒋思源 机器之心基于 Ahmet Taspinar 的博文使用 TensorFlow 手动搭建卷积神经网络,并提供所有代码和注释的 Jupyter Notebook 文档。我们将不仅描述训练情况,同时还将提供各种背景知识和分析。所有的代码和运行结果都已上传至 Github,机器之心希望通过我们的试验提供精确的代码和运行经验,我们将持续试验这一类高质量的教程和代码。 机器之心项目地址:https://github.com/jiqizhixin/ML-Tutorial-Experiment
机器之心
2018/05/08
1.5K0
机器之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络
TensorFlow 机器学习秘籍第二版:9~11
在本章中,我们将介绍循环神经网络(RNN)以及如何在 TensorFlow 中实现它们。我们将首先演示如何使用 RNN 来预测垃圾邮件。然后,我们将介绍一种用于创建莎士比亚文本的 RNN 变体。我们将通过创建 RNN 序列到序列模型来完成从英语到德语的翻译:
ApacheCN_飞龙
2023/04/23
9910
CNN模型 int8量化实现方式(二)
python 版本切换 sudo update-alternatives --list python
用户1148525
2019/05/26
1.7K0
TensorFlow-Slim图像分类库
本文介绍了如何使用深度学习模型进行图像分类,并探讨了在训练和评估模型时出现的问题及解决方案。
chaibubble
2018/01/02
2.5K0
TensorFlow-Slim图像分类库
推荐阅读
相关推荐
从零开始:TensorFlow机器学习模型快速部署指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验