Tensorflow 与 Numpy 数学函数

2023-12-24

numpy 和tensorflow 执行的数学函数之间有什么真正的区别吗?例如,指数函数,还是最大值函数?

我注意到的唯一区别是张量流接受张量的输入,而不是 numpy 数组。 这是函数结果中唯一的区别,并且按值没有区别吗?


正如已经提到的,存在性能差异。 TensorFlow 的优势在于它被设计为可以在 CPU 或 GPU 上运行,因此如果您有支持 CUDA 的 GPU,TensorFlow 的速度可能会快得多。您可以在网上找到多个具有不同比较的基准测试,也可以与其他软件包(例如 Numba 或 Theano)进行比较。

但是,我认为您正在谈论 NumPy 和 TensorFlow 操作是否完全相同。答案是基本上是的,即运算的意义是相同的。然而,由于它们是完全独立的库,对所有内容都有不同的实现,因此您会发现结果存在细微差别。以此代码为例(TensorFlow 1.2.0,NumPy 1.13.1):

# Force TensorFlow to run on CPU only
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

import numpy as np
import tensorflow as tf

# float32 NumPy array
a = np.arange(100, dtype=np.float32)
# The same array with the same dtype in TensorFlow
a_tf = tf.constant(a, dtype=tf.float32)
# Square root with NumPy
sqrt = np.sqrt(a)
# Square root with TensorFlow
with tf.Session() as sess:
    sqrt_tf = sess.run(tf.sqrt(a_tf))

您会期望从两者获得几乎相同的输出,我的意思是,平方根毕竟听起来不像是一个极其复杂的运算。但是,在我的计算机中打印这些数组时,我得到:

print(sqrt)
>>> array([ 0.        ,  1.        ,  1.41421354,  1.73205078,  2.        ,
            2.23606801,  2.44948983,  2.64575124,  2.82842708,  3.        ,
            3.1622777 ,  3.31662488,  3.46410155,  3.60555124,  3.7416575 ,
            3.87298346,  4.        ,  4.12310553,  4.2426405 ,  4.35889912,
            4.47213602,  4.5825758 ,  4.69041586,  4.79583168,  4.89897966,
            5.        ,  5.09901953,  5.19615221,  5.29150248,  5.38516474,
            5.47722578,  5.56776428,  5.65685415,  5.74456263,  5.83095169,
            5.91608   ,  6.        ,  6.08276272,  6.16441393,  6.24499798,
            6.3245554 ,  6.40312433,  6.48074055,  6.55743837,  6.63324976,
            6.70820379,  6.78233004,  6.85565472,  6.92820311,  7.        ,
            7.07106781,  7.14142847,  7.21110249,  7.28010988,  7.34846926,
            7.41619825,  7.48331499,  7.54983425,  7.6157732 ,  7.68114567,
            7.74596691,  7.81024981,  7.8740077 ,  7.93725395,  8.        ,
            8.06225777,  8.1240387 ,  8.18535233,  8.24621105,  8.30662346,
            8.36660004,  8.42614937,  8.48528099,  8.54400349,  8.60232544,
            8.66025448,  8.71779823,  8.77496433,  8.83176041,  8.88819408,
            8.94427204,  9.        ,  9.05538559,  9.11043358,  9.1651516 ,
            9.21954441,  9.2736187 ,  9.32737923,  9.38083172,  9.43398094,
            9.48683262,  9.53939247,  9.59166336,  9.64365101,  9.69536018,
            9.7467947 ,  9.79795933,  9.84885788,  9.89949512,  9.94987392], dtype=float32)

print(sqrt_tf)
>>> array([ 0.        ,  0.99999994,  1.41421342,  1.73205078,  1.99999988,
            2.23606801,  2.44948959,  2.64575124,  2.82842684,  2.99999976,
            3.1622777 ,  3.31662488,  3.46410155,  3.60555077,  3.74165726,
            3.87298322,  3.99999976,  4.12310553,  4.2426405 ,  4.35889864,
            4.47213602,  4.58257532,  4.69041538,  4.79583073,  4.89897919,
            5.        ,  5.09901857,  5.19615221,  5.29150248,  5.38516474,
            5.47722483,  5.56776428,  5.65685368,  5.74456215,  5.83095121,
            5.91607952,  5.99999952,  6.08276224,  6.16441393,  6.24499846,
            6.3245554 ,  6.40312433,  6.48074055,  6.5574379 ,  6.63324976,
            6.70820427,  6.78233004,  6.85565472,  6.92820311,  6.99999952,
            7.07106733,  7.14142799,  7.21110153,  7.28010893,  7.34846973,
            7.41619825,  7.48331451,  7.54983425,  7.61577368,  7.68114567,
            7.74596643,  7.81025028,  7.8740077 ,  7.93725395,  7.99999952,
            8.06225681,  8.12403774,  8.18535233,  8.24621105,  8.30662346,
            8.36660004,  8.42614937,  8.48528099,  8.54400253,  8.60232449,
            8.66025352,  8.71779728,  8.77496433,  8.83176041,  8.88819408,
            8.94427204,  8.99999905,  9.05538464,  9.11043262,  9.16515064,
            9.21954441,  9.27361774,  9.32737923,  9.38083076,  9.43398094,
            9.48683357,  9.53939152,  9.59166145,  9.64365005,  9.69535923,
            9.7467947 ,  9.79795837,  9.84885788,  9.89949417,  9.94987392], dtype=float32)

所以,好吧,它很相似,但也有明显的区别。例如,TensorFlow 甚至无法计算 1、4 或 9 的平方根。如果你在 GPU 上运行它,你可能会得到不同的结果(因为 GPU 内核与 CPU 内核不同)and对 NVIDIA(该领域的另一个参与者)实施的 CUDA 例程的依赖)。

我的印象(尽管我可能是错的)是 TensorFlow 更愿意牺牲一点精度来换取性能(考虑到其典型用例,这是有道理的)。我什至看到一些更复杂的操作只需运行两次(在同一硬件上)即可产生(非常轻微)不同的结果,可能是由于聚合和平均操作中未指定的顺序导致舍入错误(我通常使用 float32,所以这是一个因素我也猜想)。

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

Tensorflow 与 Numpy 数学函数 的相关文章

  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • Xcode 3.1.4 中添加 -Wall 和 -Wextra 的位置

    我试图找出在 Xcode 中添加额外警告标志的位置 例如 Wall 和 Wextra 我在 Leopard 上使用版本 3 1 4 苹果的文档适用于旧版本 如果我按照他们的说明进行操作 它会将我带到与他们显示的完全不同的窗口 他们还提供了特
  • Highcharts - 指定堆叠时间序列的顺序

    Highcharts 有没有办法指定时间序列的堆叠顺序 我发现的唯一方法是在系列出现时订购它们 因此 如果我有 A B 和 C 系列 并且希望通过以下方式订购 B C A然后我将系列添加到B C A顺序使得系列 0 B 系列 1 C 系列
  • 如何从 scala/sbt/slf4j 项目中排除公共日志记录?

    我的 scala sbt 项目使用 grizzled slf4j 和 logback 第三方依赖项使用 Apache Commons Logging 对于 Java Maven 我将使用 jcl over slf4j 和 logback c
  • Android XML:投影被截断

    我有一个带有边距的相对布局和一个嵌套在该布局内的浮动操作按钮
  • 如何正确处理 ASP.Net Core 3 Web API 中的多个端点

    我有 2 种方法来处理 HTTP GET 请求 第一个方法用于int键入输入 另一个用于string类型输入 GET api Fighters 5 HttpGet id public async Task
  • 如果我在 MySQL 中存储 int(255) ,最大数量是多少?

    我在mysql中使用int 255 作为我的id 这够长吗 如果我有大约 1 000 000 条记录 谢谢 有些东西可能只是将其转换为int 11 为你 因为你不能在一个字符中包含 255 个可见数字int 最大值将为2147483647
  • 在 asp.net mvc 2.0 中使用 Html.DropDownListFor 助手时如何更改 id 值?

    我有这样的部分观点 现在您可以创建新产品并编辑现有产品 编辑和创建都使用相同的形式 加载时创建位于主页上 编辑会在 jQuery UI 模型对话框中弹出并呈现新的部分视图 因此 就页面而言 我有两个具有相同 id 的下拉框 这很糟糕 因为它
  • 向下滚动到页面图像时是否能够部分加载页面图像,或者只是效果?

    我在一些网站上注意到 例如http mashable com http mashable com当您打开页面并尝试滚动它时 它似乎在您到达它时加载图像 我不知道这是否只是闪烁效果 或者它确实是为了减少滚动到它之前的图像负载 这是一个帮助您入
  • Hbase-hadoop集成中datanode、regionserver的作用

    根据我的理解 行被插入到 HBase 表中 并作为区域存储在不同的区域服务器中 因此 区域服务器存储数据 类似地 就 Hadoop 而言 数据存储在 hadoop 集群中的数据节点中 假设我在 Hadoop 1 1 1 之上配置了 HBas
  • 仅当安装支持 Android 应用程序时 HTML 重定向到自定义协议

    我想让所有用于我的应用程序的 URI 启动我的应用程序 如果已安装 如果未安装 我想显示有关我的应用程序的网页 看了下面两个问题 还是找不到靠谱的解决办法 意图过滤器适用于 Google 但不适用于 Chrome 和 Facebook ht
  • Flask jsonify 在新行上打印结果

    第一次使用 Flask 我创建了一个非常基本的应用程序 我正在尝试打印推荐系统的结果 第一组代码来自我的 python 函数 print most similar 正在创建一个格式化字符串 希望在新行上打印每个 REC 代码的第二部分显然是
  • 如何将不同的输入放入 sklearn Pipeline 中?

    我正在使用 sklearn 的 Pipeline 对文本进行分类 在此示例管道中 我有一个 TfIDF 矢量器和一些用 FeatureUnion 包装的自定义功能和分类器作为管道步骤 然后我拟合训练数据并进行预测 from sklearn
  • LUA_MULTRET 未按预期工作

    This is almost的副本这个问题 https stackoverflow com questions 12528820 lual dostring puts nothing on the stack 但是 答案表明并不能解决我的问
  • 如何在单元测试中模拟JPA存储库的find方法

    我正在尝试 UT 我的小项目 但遇到了问题 我的应用程序使用简单的分层架构 我不能碰巧UT服务层 事实上我想嘲笑班级Crud存储库 https docs spring io spring data commons docs current
  • 错误参考错误:“ng build”时“缓冲区未定义”

    我正在尝试在我的角度组件 ts 中使用 Buffer 来编码授权字符串 它没有编译ng build 我试过npm i types node并将 node 添加到 tsconfig json 中的 types 字段 但错误仍然存 在 以下是错
  • 带参数的 Scala 传递函数

    将一个函数传递给另一个函数的 Scala 示例缺少传递的函数 timeFlies 采用参数 x 的情况 object Timer def oncePerSecond callback Int gt Unit while true callb
  • 如何在 Java 中实例化一组映射?

    我可以使用泛型声明映射数组来指定映射类型 private Map
  • 如何在 SQLPLUS 中执行 SQL 脚本期间回显文本

    我有一个批处理文件 它在 sqlplus 中运行 SQL 脚本并将输出发送到日志文件 sqlplus user pw RowCount log 我的日志文件包含以下内容 Connected to Oracle Database 11g Ex
  • 将数据写入plist

    我想从 plist 读取数据 添加一些元素并将数据写入 plist 更新 plist 我想让 plist 保存一个字典数组 将该数组读入我的应用程序 添加字典 然后将数组写回 plist 这是怎么做到的 我也不确定在应用程序首次启动时在哪里
  • Tensorflow 与 Numpy 数学函数

    numpy 和tensorflow 执行的数学函数之间有什么真正的区别吗 例如 指数函数 还是最大值函数 我注意到的唯一区别是张量流接受张量的输入 而不是 numpy 数组 这是函数结果中唯一的区别 并且按值没有区别吗 正如已经提到的 存在