【问题标题】:TensorFlow: How to convert DeferredTensor to Tensor during eager execution (to perform group normalization)?TensorFlow:如何在急切执行期间将 DeferredTensor 转换为 Tensor(以执行组规范化)?
【发布时间】:2019-10-28 22:03:49
【问题描述】:

在 TensorFlow 1.10 到 1.12(使用急切执行)中,我有以下 sn-p 代码:

tensor = tf.keras.layers.Conv2D(128, (3, 3), padding='same')(tensor)
tensor = tf.contrib.layers.group_norm(tensor)

但是,对tf.contrib.layers.group_norm(tensor) 的调用给了我以下错误:

ValueError: Attempt to convert a value (<DeferredTensor 'None' shape=(?, 16, 16, 128) dtype=float32>) with an unsupported type (<class 'tensorflow.python.keras.engine.base_layer.DeferredTensor'>) to a Tensor.

是否可以将DeferredTensor 转换为TensorEagerTensor?我可以通过其他方式执行组标准化吗?

【问题讨论】:

    标签: python tensorflow keras tensor


    【解决方案1】:

    您需要从一开始就启用急切执行。看起来你有一个混合的渴望和延迟导致这个问题,所以我怀疑你的一个张量操作是在调用 tf.enable_eager_execution() 之前创建的,而不是关于调用 tf.contrib.layers.group_norm(tensor) 的任何具体内容。

    例如,使用 v 1.12.2,我可以这样做:

    import tensorflow as tf
    
    tf.enable_eager_execution()
    
    tensor = tf.random.normal((1, 3,3, 3))
    tensor = tf.keras.layers.Conv2D(128, (3, 3), padding='same')(tensor)
    tensor = tf.contrib.layers.group_norm(tensor)
    
    print(tf.__version__)
    print(tensor)
    

    并获得预期的输出:

    1.12.2
    tf.Tensor(
    [[[[-0.46789345  0.05536499 -0.06537625 ... -0.612622   -0.80556583
         0.39658052]
       [-1.086592   -0.65128946  1.1523774  ...  0.70371515 -0.19514994
         0.6261743 ]
       [-0.68818045  1.0391753   0.61246586 ...  0.49158555 -0.23147273
        -0.40839535]]
    
      [[-0.27729145 -0.7241349  -0.45006287 ... -1.6836562  -2.0581594
        -0.09571741]
       [-2.7078617   1.6280639   0.29760775 ...  0.48920113 -2.148665
        -0.17309377]
       [ 2.41167    -0.29042014 -0.7241919  ... -0.0780689   1.451448
         2.812067  ]]
    
      [[ 0.04337802  1.5531337   0.838807   ... -0.164665   -0.28958386
        -1.6659214 ]
       [ 0.38814372 -0.1571713   0.16725369 ...  0.93523234 -0.2039619
         0.6319514 ]
       [ 0.09182647  0.19946824 -0.8600142  ... -0.5493502  -0.68655336
         0.45441204]]]], shape=(1, 3, 3, 128), dtype=float32)
    

    【讨论】:

    • 感谢您的回复!我几乎立即启用它,只有from __future__ import absolute_import, division, print_functionimport tensorflow as tf 在我启用急切执行之前,问题仍然存在,不幸的是。
    • 我认为这与我首先定义一个模型,然后我没有一个具体的张量,我试图对它进行分组规范化(我的“输入”是一个 InputLayer()我创建模型)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多