Tensorflow - 推理时间评估

2023-12-09

我正在使用 Tensorflow 评估不同的图像分类模型,特别是使用不同设备的推理时间。 我想知道是否必须使用预训练模型。 我使用一个脚本生成 1000 个随机输入图像,将它们一一输入到网络,并计算平均推理时间。

谢谢 !


让我首先发出警告:

大多数人以错误的方式完成了神经网络的正确基准测试。对于 GPU,有磁盘 I/O、内存带宽、PCI 带宽、GPU 速度本身。然后还有一些实现错误,比如使用feed_dict在 TensorFlow 中。对于这些模型的有效训练也是如此。

让我们从一个简单的例子开始,考虑 GPU

import tensorflow as tf
import numpy as np

data = np.arange(9 * 1).reshape(1, 9).astype(np.float32)
data = tf.constant(data, name='data')

activation = tf.layers.dense(data, 10, name='fc')

with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    sess.run(tf.global_variables_initializer())
    print sess.run(activation)

它所做的只是创建一个常量张量并应用一个全连接层。 一切运营放置在GPU上:

fc/bias: (VariableV2): /job:localhost/replica:0/task:0/device:GPU:0
2018-01-25 09:55:01.587959: I tensorflow/core/common_runtime/placer.cc:874] fc/bias: (VariableV2)/job:localhost/replica:0/task:0/device:GPU:0
fc/bias/read: (Identity): /job:localhost/replica:0/task:0/device:GPU:0
2018-01-25 09:55:01.587970: I tensorflow/core/common_runtime/placer.cc:874] fc/bias/read: (Identity)/job:localhost/replica:0/task:0/device:GPU:0
fc/bias/Assign: (Assign): /job:localhost/replica:0/task:0/device:GPU:0
2018-01-25 09:55:01.587979: I tensorflow/core/common_runtime/placer.cc:874] fc/bias/Assign: (Assign)/job:localhost/replica:0/task:0/device:GPU:0
fc/kernel: (VariableV2): /job:localhost/replica:0/task:0/device:GPU:0
2018-01-25 09:55:01.587988: I tensorflow/core/common_runtime/placer.cc:874] fc/kernel: (VariableV2)/job:localhost/replica:0/task:0/device:GPU:0
fc/kernel/read: (Identity): /job:localhost/replica:0/task:0/device:GPU:0
...

看起来不错,对吧? 对该图进行基准测试可以粗略估计 TensorFlow 图的执行速度。只需更换tf.layers.dense通过您的网络。如果你接受使用 python 的开销time包,你就完成了。

但不幸的是,这并不是故事的全部。 将结果从张量操作复制回来'fc/BiasAdd:0'访问设备内存(GPU)并复制到主机内存(CPU、RAM)。 因此,在某些时候 PCI 带宽会受到限制。某个地方也有一个 python 解释器,占用 CPU 周期。

此外,运营放置在 GPU 上,不需要values他们自己。不确定您使用的是哪个 TF 版本。但即使是一个tf.const不保证旧版本中会放置在 GPU 上。我只是在编写自己的操作时才注意到这一点。顺便说一句:请参阅我的其他答案TF 如何决定在哪里开展业务.

现在,最困难的部分是:这取决于你的图表。有一个tf.cond/tf.where坐在某个地方会让事情变得更难进行基准测试。现在,您需要经历在有效训练深度网络时需要解决的所有这些困难。这意味着,一个简单的 const 无法解决所有情况。

解决方案首先将/staging一些价值观directly通过运行进入GPU内存

stager = data_flow_ops.StagingArea([tf.float32])
enqeue_op = stager.put([dummy])
dequeue_op = tf.reduce_sum(stager.get())

for i in range(1000):
    sess.run(enqeue_op)

预先。但同样,TF 资源管理器正在决定将值放在哪里(并且不能保证值的排序或删除/保留)。

总而言之:基准测试是一项非常复杂的任务,因为基准测试 CUDA 代码很复杂。现在,您有了 CUDA 和 Python 部件。 这是一项高度主观的任务,具体取决于您对哪些部分感兴趣(只是图形,包括磁盘 I/O,...)

我通常用tf.const按照示例输入并使用profiler看看图表中发生了什么。

有关如何提高运行时性能的一些一般想法,您可能需要阅读 Tensorflow性能指南

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow - 推理时间评估 的相关文章

  • ValueError:请使用“Layer”实例初始化“TimeDistributed”层

    我正在尝试构建一个可以在音频和视频样本上进行训练的模型 但出现此错误ValueError Please initialize TimeDistributed layer with a Layer instance You passed Te
  • 异常:加载数据时 URL 获取失败

    我正在尝试设置我的机器来运行 Tensorflow 2 我从未使用过 Tensorflow 只是下载了 Python 3 7 我不确定这是否是我的机器的问题 我按照上面列出的安装说明进行操作TensorFlow 的网站 https www
  • TensorFlow:在训练时更改变量

    如果我将输入管道从 feed dict 更改为 tf data dataset 如何在每次迭代后的训练期间更改网络内参数的值 澄清一下 旧代码看起来像这样 Define Training Step model is some class t
  • pip:需要将包名称tensorflow-gpu更改为tensorflow

    我正在尝试将具有 GPU 支持的张量流安装到 conda 环境中 我使用命令 pip install ignore installed upgrade https storage googleapis com tensorflow linu
  • 如何将 tf.contrib.seq2seq.Helper 用于非嵌入数据?

    我正在尝试使用 tf contrib seq2seq 模块对某些数据 仅 float32 向量 进行预测 但我使用 TensorFlow 中的 seq2seq 模块找到的所有示例都用于翻译 因此用于嵌入 我正在努力准确理解 tf contr
  • 张量流服务错误:参数无效:JSON 对象:没有命名输入

    我正在尝试使用 Amazon Sagemaker 训练模型 并且希望使用 Tensorflow 服务来为其提供服务 为了实现这一目标 我将模型下载到 Tensorflow 服务 docker 并尝试从那里提供服务 Sagemaker 的训练
  • TensorFlow HVX 加速支持

    我成功构建并运行了测试应用程序https github com tensorflow tensorflow tree master tensorflow contrib hvx https github com tensorflow ten
  • 在 Keras 模型中删除然后插入新的中间层

    给定一个预定义的 Keras 模型 我尝试首先加载预先训练的权重 然后删除一到三个模型内部 非最后几层 层 然后用另一层替换它 我似乎找不到任何有关的文档keras io https keras io 即将做这样的事情或从预定义的模型中删除
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • 在 Tensorflow 中每行选择一个元素的优雅方法

    Given 一个矩阵A形状的 m n 张量I形状的 m 我想要一份清单J的元素来自A where J i A i I i 那是 I保存要从每行中选择的元素的索引A 背景 我已经有了argmax A 1 现在我也想要max 我知道我可以使用r
  • 如何使用tensorFlow C++ API中的fileWrite摘要在Tensorboard中查看它

    无论如何 我是否可以获得与 FileWriter 相对应的张量名称 以便我可以写出我的摘要以在 Tensorboard 中查看它们 我的应用程序是基于C 的 所以我必须使用C 来进行训练 FileWriter 不是张量 import ten
  • 大于 2GB 的 Tensorflow 图

    我正在尝试优化一个大型张量流保存模型 其中包含 10MB saving model pb 和 16GB 变量 我尝试冻结我的图表并进行一些进一步的转换 我已按照步骤操作https medium com google cloud optimi
  • 如何在 Tensorflow 对象检测 API 中查找边界框坐标

    我正在使用 Tensorflow 对象检测 API 代码 我训练了我的模型并获得了很高的检测百分比 我一直在尝试获取边界框坐标 但它不断打印出 100 个奇怪数组的列表 经过在线广泛搜索后 我发现数组中的数字意味着什么 边界框坐标相对于底层
  • 移动设备上的 TensorFlow(Android、iOS、Windows Phone)

    我目前正在寻找不同的深度学习框架 特别是用于训练和部署卷积神经网络 要求是 它可以在带有 GPU 的普通 PC 上进行训练 但训练后的模型必须部署在三个主要的移动操作系统上 即 Android iOS 和 Windows Phone Ten
  • 具有不同尺寸图像的 Tensorflow 输入数据集

    我正在尝试使用不同大小的输入图像来训练完全卷积神经网络 我可以通过循环训练图像并在每次迭代时创建单个 numpy 输入来做到这一点 即 for image input label in zip image data labels train
  • 在c++中的嵌入式python中导入tensorflow时出错

    我的问题是关于在 C 程序中嵌入 Python 3 5 解释器以从 C 接收图像 并将其用作我训练的张量流模型的输入 当我在 python 代码中导入tensorflow库时 出现错误 其他库工作正常 简化后的代码如下 include
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 如何在google colaboratory上使用GPU升级tensorflow

    目前google colaboratory使用tensorflow 1 4 1 我想升级到1 5 0版本 每次当我执行时 pip install upgrade tensorflow命令 notebook实例成功将tensorflow版本升
  • 如何在张量流中使用索引数组?

    如果给定一个矩阵a有形状 5 3 和索引数组b有形状 5 我们很容易得到对应的向量c通过 c a np arange 5 b 但是 我不能用张量流做同样的事情 a tf placeholder tf float32 shape 5 3 b
  • 查找张量流运算所依赖的所有变量

    有没有办法找到给定操作 通常是损失 所依赖的所有变量 我想用它来将该集合传递到optimizer minimize or tf gradients 使用各种set intersection 组合 到目前为止我已经找到了op op input

随机推荐

  • 阿帕奇 POI 和颜色

    我在使用 Apache POI 时遇到一些问题 如果能得到一些帮助就好了 我想删除 Excel 工作表子部分中的颜色 为此 我尝试的第一件事是渲染我想要清理的单元格 假设仅第一行的单元格 并将其颜色设置为白色 cell getCellSty
  • 识别 Sublime Text 3 代码片段源

    有谁知道如何识别 Sublime Text 3 代码片段的来源 有一个用于 Rails 的 我认为它来自某个包 我已经卸载了该软件包 但该代码片段仍然可以使用 这让我发疯 Press Ctrl Backtick to open the co
  • 如何编写迭代器?

    我有一个节点网络 在节点之间传递结构化数据 对于我的子问题 我们有这个分支 节点的线性序列 nodes source n1 n2 n3 n4 第一个节点是生成器 每个其他节点从输入节点获取值并提供输出值 当前的实现是从管道的普通 get 和
  • jQuery onmouseover + onmouseout / 悬停在两个不同的 div 上

    我有一个问题 这是我的 HTML 的一部分 div Here Hover div div Here content to show div 这是我的 jQuery 脚本的一部分 jQuery div 2 hide jQuery div 1
  • 如何使用 vegas.js 插件添加文本动画

    我正在使用 vegas js 插件 http vegas jaysalvat com documentation 对于我的网站 我想用这些图像显示一些文本 我如何添加一些带有图像的动画文本 在 body 中初始化 vegas js
  • Flask url_for 在模板的外部 JavaScript 中不起作用

    在index html 中 我链接到index js 文件 单击一个按钮 js 会向 Flask 后端发送请求 后端返回静态文件路径 data Sharon 4 png 我想使用以下函数以 HTML 形式呈现它 但它不起作用 为了简化它 我
  • 将代码直接放在InitializeComponent 之后是不好的做法吗?

    我只是想知道一件事 我有一个加载页面的框架 当前每个页面都有一个Page Loaded每次访问页面时都会运行的方法 这工作得很好 但如果我使用导航转到以前访问过的页面 我会注意到错误 返回页面后 Page Loaded我不希望再次被呼叫 使
  • 仅选择具有上次修改时间戳的行,不选择具有相同 ID 和旧时间戳的重复行

    我找不到解决我的问题的方法 我有两个表 Order 和 OrderDetail 订单表 简单版 ID modified 1 7 1 2018 2 10 1 2018 3 15 1 2018 4 20 1 2018 5 25 1 2018 订
  • Oracle插入if不存在语句

    insert into OPT email campaign id values email protected 100 where not exists select from OPT where email email protecte
  • LINQ 到实体转换问题

    我正在尝试以通用方式过滤 LINQ to entities 查询 但我不断收到错误 这是一段代码 private IQueryable
  • 将 window tester 与 eclipse 集成以测试 UI

    我们计划使用窗口测试器自动测试我的 Eclipse 应用程序 GUI 日食的版本是氧气 请告诉我如何将窗口测试器与 Eclipse 应用程序集成 我在 eclipse 市场上没有看到任何窗口测试器插件 如果没有 我可以使用哪个 GUI 测试
  • 如何让 JInternalFrame 填充容器并禁用拖动功能?

    我正在做一个项目 大型机中有JInternalFrames 现在 我们需要让它们成为 JFrame 我正在考虑使用 JFrame 来保存 JInternalFrame 问题是Internalframe的标题栏在那里 用户可以拖动它 有没有办
  • 在帐单地址 woocommerce 中添加新字段

    我想在我的网站上编辑我的帐单地址 我需要add and delete我的帐户页面中还有其他一些代码 我应该编辑哪些代码 提前谢谢您 您可以检查下面的代码吗add新的自定义字段示例 add filter woocommerce billing
  • 从 numpy loadtxt() 获取日期列

    我有一个文本文件 其中包含下表 Day Month Year Avg Power 01 01 2000 30 02 01 2000 41 04 01 2000 55 05 01 2000 78 06 01 2000 134 07 01 20
  • 在谷歌云ML中导入librosa

    我正在运行 Google Cloud ML 当我尝试导入 librosa 时 出现错误 ImportError 没有名为 tkinter 的模块 请安装 python tk 包 我确实有一个 setup py 文件 一个空的 init py
  • 保持 UIAlertView 显示

    我有一个 UIAlertView 上面有一个文本字段和两个按钮 保存和取消 点击 保存 按钮时 我会检查文本字段是否不为空 如果为空 我只想将 textFields 占位符更改为 请输入名称 并将警报视图保留在屏幕上 但它会自动被驳回 我该
  • 如何摆脱 pygame 表面?

    在下面的代码中 不仅有one在任何给定时间点屏幕上出现圆圈 我想修复这个问题 使其看起来只有一个圆圈 而不是在鼠标光标所在的地方留下污迹 import pygame sys from pygame locals import pygame
  • HTML 数字输入最小值和最大值无法正常工作

    I have type number输入字段和我已经设置min and max它的值
  • JSON 格式在附加文件时添加 \ 字符,但不添加到输出中的字符串

    我正在使用以下函数来获取json来自 flickrAPI 它返回的字符串是格式正确的 JSON 块 def get photo data photo id para para photo id photo id para method fl
  • Tensorflow - 推理时间评估

    我正在使用 Tensorflow 评估不同的图像分类模型 特别是使用不同设备的推理时间 我想知道是否必须使用预训练模型 我使用一个脚本生成 1000 个随机输入图像 将它们一一输入到网络 并计算平均推理时间 谢谢 让我首先发出警告 大多数人