在Keras中继续分配具有不同常数张量的变量时会发生什么?

贾伯罗

环境:Keras 2.2.5,TensorFlow 1.12.0后端

我在终端中键入以下代码,注意到分配的变量名称中的数字一直在增加。由于tf 1.x使用静态图,因此我怀疑在此过程中创建的张量是否存在,直到我使用重置默认图为止K.clear_session()我的猜测正确吗?还是垃圾收集器自动破坏了张量?

>>> import keras.backend as K
>>> a = K.constant(1.0)
>>> a = K.constant(2.0)
>>> a
<tf.Tensor 'Const_1:0' shape=() dtype=float32>
>>> b = K.constant(2.2)
>>> b
<tf.Tensor 'Const_2:0' shape=() dtype=float32>
>>> a = K.constant(222.1)
>>> a
<tf.Tensor 'Const_3:0' shape=() dtype=float32>
>>> a = K.constant(222.1)
>>> a
<tf.Tensor 'Const_4:0' shape=() dtype=float32>
霸王龙

您的猜测是正确的;张量是持久的,直到会话被清除。简单的演示:

import tensorflow as tf
import keras.backend as K

a = K.constant(1.0)
print(a)      # Tensor("Const:0", shape=(), dtype=float32)
print(a.name) # Const:0
del a

a = K.constant(1.0)
print(a)      # Tensor("Const_1:0", shape=(), dtype=float32)

尽管如此del a,新张量的名称仍会增加:Const_1:0但是,如果会话仅通过来简单地“存储”(例如,缓存了)第一次创建的会话K.constant,那么即使删除了先前的张量,它也会增加名称吗?不,可以验证:

print(tf.get_default_graph().get_tensor_by_name("Const:0"))
# Tensor("Const:0", shape=(), dtype=float32)

它仍然在那里。与常规Python对象不同(在引用计数达到零后将其删除),Tensor对象会保留(该图会设置自己的引用)。要完全删除张量(和所有其他张量),您将需要两个命令:

K.clear_session()  # clear Keras graph
tf.compat.v1.reset_default_graph()  # clear TF graph

有时第一个就足够了,但最好同时使用两者)。现在尝试访问张量:

print(tf.get_default_graph().get_tensor_by_name("Const:0"))
# KeyError: "The name 'Const:0' refers to a Tensor which does not exist. 
# The operation, 'Const', does not exist in the graph."

创建一个新的:

a = K.constant(1.0)
print(a)  # Tensor("Const:0", shape=(), dtype=float32)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当成为朋友的类具有相同的名称成员变量时会发生什么

来自分类Dev

在现有变量上调用malloc时会发生什么?

来自分类Dev

在SVN中删除中继时会发生什么标记

来自分类Dev

在SVN中删除中继时会发生什么标记

来自分类Dev

合成子类的变量时会发生什么?

来自分类Dev

在c ++中将字符串值分配给整数变量时会发生什么?

来自分类Dev

Parse API:当有多个对象具有相同的对象 id 时会发生什么?

来自分类Dev

当您在JavaScript中分配undefined时会发生什么?

来自分类Dev

当脚本src不同时会发生异常,代码有什么问题?

来自分类常见问题

在Python中将一个变量的值分配给另一个变量时会发生什么?

来自分类Dev

当类和函数具有相同的名称时会发生什么?

来自分类Dev

当您写入具有相同配置的寄存器时会发生什么?

来自分类Dev

当网格类别应用于具有较小断点大小的设备时会发生什么

来自分类Dev

在具有默认键值(0,1,2,...)的数组中使用extract()时会发生什么

来自分类Dev

将具有导航属性的对象添加到Db时会发生什么情况?

来自分类Dev

将变量绑定到某些数据时会发生什么?

来自分类Dev

尝试使用数组变量时会发生什么

来自分类Dev

暂停时会发生什么?

来自分类Dev

当有人拉着我推时会发生什么?

来自分类Dev

当有人拉着我推时会发生什么?

来自分类Dev

当Java中有多个main方法时会发生什么?

来自分类Dev

具有相同方法名称的两个接口,当我重写时会发生什么?

来自分类Dev

Java:具有不同版本的多种语言包,将会发生什么?

来自分类Dev

分配给变量时张量的输出形状会发生变化

来自分类Dev

当我们将 2 个值分配给同一个变量时会发生什么?

来自分类Dev

C alloca函数-尝试分配过多内存时会发生什么

来自分类Dev

Java将数组参数分配给构造函数中的成员时会发生什么?

来自分类Dev

重新分配尚未准备好的未来时会发生什么

来自分类Dev

熊猫:为什么列的dtype在分配给数据框时会发生变化

Related 相关文章

  1. 1

    当成为朋友的类具有相同的名称成员变量时会发生什么

  2. 2

    在现有变量上调用malloc时会发生什么?

  3. 3

    在SVN中删除中继时会发生什么标记

  4. 4

    在SVN中删除中继时会发生什么标记

  5. 5

    合成子类的变量时会发生什么?

  6. 6

    在c ++中将字符串值分配给整数变量时会发生什么?

  7. 7

    Parse API:当有多个对象具有相同的对象 id 时会发生什么?

  8. 8

    当您在JavaScript中分配undefined时会发生什么?

  9. 9

    当脚本src不同时会发生异常,代码有什么问题?

  10. 10

    在Python中将一个变量的值分配给另一个变量时会发生什么?

  11. 11

    当类和函数具有相同的名称时会发生什么?

  12. 12

    当您写入具有相同配置的寄存器时会发生什么?

  13. 13

    当网格类别应用于具有较小断点大小的设备时会发生什么

  14. 14

    在具有默认键值(0,1,2,...)的数组中使用extract()时会发生什么

  15. 15

    将具有导航属性的对象添加到Db时会发生什么情况?

  16. 16

    将变量绑定到某些数据时会发生什么?

  17. 17

    尝试使用数组变量时会发生什么

  18. 18

    暂停时会发生什么?

  19. 19

    当有人拉着我推时会发生什么?

  20. 20

    当有人拉着我推时会发生什么?

  21. 21

    当Java中有多个main方法时会发生什么?

  22. 22

    具有相同方法名称的两个接口,当我重写时会发生什么?

  23. 23

    Java:具有不同版本的多种语言包,将会发生什么?

  24. 24

    分配给变量时张量的输出形状会发生变化

  25. 25

    当我们将 2 个值分配给同一个变量时会发生什么?

  26. 26

    C alloca函数-尝试分配过多内存时会发生什么

  27. 27

    Java将数组参数分配给构造函数中的成员时会发生什么?

  28. 28

    重新分配尚未准备好的未来时会发生什么

  29. 29

    熊猫:为什么列的dtype在分配给数据框时会发生变化

热门标签

归档