问题标签 [eager-execution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
261 浏览

python - 了解 tensorflow 中的设备分配、并行性(tf.while_loop)和 tf.function

我正在尝试理解 tensorflow 中 GPU 上的并行性,因为我需要将它应用到更丑陋的图表上。

在上面的代码中,var 是一个长度为 100000 的张量,其元素如上所示更新。当我将 parallel_iterations 值从 10、100、1000、10000 更改时。即使明确提到了 parallel_iterations 变量,也几乎没有任何时间差(全部为 9.8 秒)。

我希望这些在 GPU 上并行发生。我该如何实施?

0 投票
1 回答
563 浏览

python - 急切执行 tf.dataset 实例

tf.data.Dataset.from_tensor_slices()我用 2.0 版构建了一个。我的输入是一个一维数组,其中包含用于裁剪大型 numpy 数组(60 GB)的索引。

到目前为止,我的管道读取数组,np.memmap然后应该剪辑这个数组。因此,我在维度中创建了一个数组(n, 4),其中 n 是样本数。提示此(n, 4)数组tf.data.Dataset.from_tensor_slices()

之后我想调用dataset.map(),如果数组的输入是一行(n, 4),其形状为[4,]。但是,我不能评估这个张量的单个值,而我可以在.map()调用之前评估张量。

这是我得到的错误的最小工作示例:

错误:

0 投票
0 回答
639 浏览

python - 变分自编码器回归类型的重构损失

我目前正在研究顺序设置中变分自动编码器的变体,其中任务是拟合/恢复一系列实值观察数据(因此这是一个回归问题)。

我已经使用tf.keras启用了急切执行和 tensorflow_probability (tfp) 来构建我的模型。遵循 VAE 概念,生成网络发出观察数据的分布参数,我将其建模为多元正态。因此,输出是预测分布的均值和 logvar。

关于训练过程,损失的第一部分是重建误差。这是真实观察的对数似然,给定来自生成网络的预测(参数)分布。在这里,我使用tfp.distributions,因为它既快速又方便。

然而,在训练完成后,以相当低的损失值为标志,事实证明我的模型似乎没有学到任何东西。模型的预测值在时间维度上几乎没有变化(回想一下,问题是连续的)。

尽管如此,为了进行完整性检查,当我用 MSE 损失替换对数似然度(在 VAE 上工作时这是不合理的)时,它会产生非常好的数据拟合。所以我得出结论,这个对数似然项一定有问题。有没有人对此有一些线索和/或解决方案?

我曾考虑用交叉熵损失替换对数似然,但我认为这不适用于我的情况,因为我的问题是回归并且数据无法归一化为 [0,1] 范围。

当使用对数似然作为重建损失时,我还尝试实现退火 KL 项(即用常数 < 1 加权 KL 项)。但它也没有奏效。

这是我的原始损失函数的代码片段(使用对数似然作为重建错误):

0 投票
0 回答
96 浏览

tensorflow - tensorflow 急切执行仅输出相同的值

我正在尝试将我的 tensorflow 代码转换为 tensorflow 渴望。问题是前向传递在急切模式下只预测不同输入值的相同动作。带有图形的普通张量流代码可以正常工作。我只是改变了网络。该代理与我用于普通张量流的代理相同。网络可能有什么问题?forward pass 在函数中的get_probs() 另一个问题是 Eager 网络非常慢。我认为图形执行速度要快 2-3 倍。

急切中一集的示例问题

带有张量流图的一集的示例问题

网络

0 投票
1 回答
2638 浏览

tensorflow - 如何在 TensorFlow 2.0 中调试 Keras?

实际上,我在 TensorFlow 1.13.0 中已经发现了问题。(tensorflow1.12.0 运行良好)。

我的代码被列为一个简单的例子:

在我的 Keras 模型中用作 lambda 层。在 tensorflow1.12.0 中,print(temp)可以输出如下的详细数据

这是因为我使用 1024 作为 batch_size。但是当我更新到 tensorflow1.13.0 或 TensorFlow 2.0 时,相同的代码输出

这很糟糕,因为我不知道确切的错误。那么,关于如何解决它的任何想法?

0 投票
1 回答
64 浏览

python - 有和没有@tf.function 的不同行为

i当 的值为3 的倍数时,以下代码不会产生“Fizz” :

但是如果有人评论了@tf.function装饰器,它可以正常工作为 3 的倍数。为什么?

0 投票
0 回答
310 浏览

python - 如何在 TensorFlow 中使用 Eager Execution 进行保存和恢复?

我们总是使用tf.train.Saver()来保存和恢复权重,就像在这个例子中一样。

但是如何使用 Eager Execution 来保存呢?如何更改以下示例?

另一个问题,使用 Eager 是个好主意吗?

我在tf.contrib.eager.Saver 这里找到了,但它说,

“Saver 的基于名称的检查点策略很脆弱”。

这是什么意思?

0 投票
1 回答
4474 浏览

python - 在open cv2 python中使用Tensor flow 2.0对象的方法是什么,为什么这么迂回?

我使用张量流api(2.0)加载图像,如下所示:

现在我有了这个对象,我想展示这个图像,我可以简单地使用 matplotlib.pyplot,这很有效。

但是,从一开始就尝试使用 OpenCV2 进行此操作是有问题的,大多数示例来自 1.0,并带有基于 .eval() 会话的 numpy 转换建议。一种方法是首先将张量流对象转换为 numpy,这是 API 文档中执行此操作的函数:

我不明白为什么这不起作用,我得到了一些错误,而我只想做一些简单的事情,然后使用一些开放的 cv2 函数,如重新映射、调整大小等:

文件“C:\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py”,第 426 行,调用中 self._initialize(args, kwds, add_initializers_to=initializer_map) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py”,第 370 行,在 _initialize *args, **kwds) ) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py”,第 1313 行,在 _get_concrete_function_internal_garbage_collected graph_function, _, _ = self._maybe_define_function(args, kwargs) 文件“C: \Python\Python37\lib\site-packages\tensorflow\python\eager\function.py”,第 1580 行,在 _maybe_define_function graph_function = self._create_graph_function(args, kwargs) 文件“C:\Python\Python37\lib\site- packages\tensorflow\python\eager\function.py”,第 1512 行,在 _create_graph_function capture_by_value=self._capture_by_value),文件“C:\Python\Python37\lib\site-packages\tensorflow\python\framework\func_graph.py”,第 694 行,在 func_graph_from_py_func func_outputs = python_func(*func_args, **func_kwargs) 文件“C:\Python\Python37\lib\site -packages\tensorflow\python\eager\def_function.py",第 317 行,在 Wrapped_fn 返回weak_wrapped_fn()。包裹(*args, **kwds) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\framework\func_graph.py”,第 686 行,在 wrapper 中)、args、kwargs) 文件“C:\ Python\Python37\lib\site-packages\tensorflow\python\autograph\impl\api.py”,第 392 行,converted_call 结果 = convert_f(*effective_args, **kwargs) 文件“C:\Users\syeda\AppData\ Local\Temp\tmpnahp3og4.py",第 32 行,在 tf__random_deform im2 = ag__.converted_call('make_ndarray', tf, ag__.ConversionOptions(recursive=True, verbose=0, strip_decorators=(tf.function, defun_9, ag__.convert , ag__.do_not_convert, ag__.converted_call), force_conversion=False, optional_features=(), internal_convert_user_code=True), (real_image,), {}) 文件 "C:\Python\Python37\lib\site-packages\tensorflow\python \autograph\impl\api.py",第 267 行,在 convert_call 返回 _call_unconverted(f, args, kwargs) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\autograph\impl\api.py”,第 188 行,在 _call_unconverted 返回 f( *args, **kwargs) 文件“C:\Python\Python37\lib\site-packages\tensorflow\python\framework\tensor_util.py”,第 596 行,MakeNdarray shape = [d.size for d in tensor.tensor_shape .dim] AttributeError:“张量”对象没有属性“张量形状”在 MakeNdarray shape = [d.size for d in tensor.tensor_shape.dim] AttributeError: 'Tensor' object has no attribute 'tensor_shape'在 MakeNdarray shape = [d.size for d in tensor.tensor_shape.dim] AttributeError: 'Tensor' object has no attribute 'tensor_shape'

2018 年5 月 5 日更新:搜索更多后,我发现这与 Tensorflow 图执行有关。我有一个功能

这在使用 .numpy() 属性急切调用时效果很好,但是当像下面的代码那样调用时以及当您尝试检查 real_image 是什么并且它的类型返回时

类'tensorflow.python.framework.ops.Tensor'(无,无,无)

请指教。

2018 年 5 月 5 日更新:我决定对数据进行预处理,这样我就不必担心在数据加载期间使用任何 opencv 功能。但是在训练期间,我仍然想做一些 openCV 操作。现在根据@giser_yugang 的建议,我尝试使用py_function,我将opencv 操作包装在py_function 中,并在包装​​器tf.function 中调用该函数。这个包装器 tf.function 我在训练步骤中调用。但是我从这个包装函数得到的输出是这样的:

然后,如果我尝试在下一个训练步骤操作中消耗这个张量,我会得到一个

如果我不在我的训练步骤中使用这个 py_function 包装器并直接尝试使用 opencv 的 numpy 操作,我会得到另一个错误

我想这两种方式你都赢不了!

0 投票
2 回答
10498 浏览

python - 使用 .fit() 修复未在 Eager 模式下运行的 Tensorflow 模型很热门?

我正在尝试在 Eager Execution 中运行基本的 CNN keras 模型,但 Tensorflow 拒绝将该模型视为急切。我最初在稳定的 1.13 分支(最新)中尝试过这个,确保启用急切执行而没有结果。我升级到 2.0(最新)但又没有。

模型

参数设置

检查 Eager 是否开启和版本

运行模型

这会导致错误 AttributeError: 'Tensor' object has no attribute 'numpy'

当我删除有问题的行时x.numpy(),我得到了这个错误 TypeError: Tensor objects are only iterable when eager execution is enabled. To iterate over this tensor use tf.map_fn.

它还为模型方法中的print(tf.executing_eagerly())位置打印 False。def call()


如何强制它进入渴望模式而不是图形?我再次在最新的 1.13 和 2.0 中尝试了这个。这是一个错误吗?

0 投票
1 回答
1102 浏览

python - 如何使用 TensorFlow 的渴望执行检查我的张量的内容?

我使用 TensorFlow 1.12 急切执行,我有以下(不完整的)函数,我想在其中检查一些中间张量:

但是,print(mask)仅返回Tensor("mask:0", shape=(?, 1000, 1200), dtype=uint8),而我想查看实际值。正如TensorFlow 的急切执行指南中所展示的,这应该是可能的。我也试过tf.print(mask, output_stream=sys.stdout)了,但只打印了一个空行。mask.dtypeuint8,所以我猜它应该包含整数,因为它有一个形状。我还觉得奇怪的是mask.device空字符串。它应该存储在某些设备上,对吧?

如何打印mask张量的内容?