Tensorflow 2.1.0-功能建筑规范之外的op被传递一个;图;张量

Tensorflow 2.1.0-功能建筑规范之外的op被传递一个;图;张量,tensorflow,machine-learning,deep-learning,tf.keras,tensorflow2.x,Tensorflow,Machine Learning,Deep Learning,Tf.keras,Tensorflow2.x,我正在努力实现最近的一篇论文。这个实现的一部分涉及从TF1.14迁移到TF2.1.0。该代码在TF1.14中工作,但不再工作 注意:如果我禁用了eager executiontf.compat.v1.disable_eager_execution(),那么代码将按预期工作。 这就是解决办法吗?我以前在TF 2.x中制作过很多模型,从来没有禁用过急切执行来实现正常功能 我把这个问题提炼成一个非常简短的要点,说明发生了什么 首先是链接和代码,然后是详细的错误消息 链接到要点-- 代码 #版本2

我正在努力实现最近的一篇论文。这个实现的一部分涉及从TF1.14迁移到TF2.1.0。该代码在TF1.14中工作,但不再工作


注意:如果我禁用了eager execution
tf.compat.v1.disable_eager_execution()
,那么代码将按预期工作。

这就是解决办法吗?我以前在TF 2.x中制作过很多模型,从来没有禁用过急切执行来实现正常功能


我把这个问题提炼成一个非常简短的要点,说明发生了什么

首先是链接和代码,然后是详细的错误消息
链接到要点--

代码

#版本2.1.0
导入tensorflow作为tf
#版本1.18.1
将numpy作为np导入
#定义TF LAMBDA层的自定义函数#
def resize_like(输入张量、参考张量):
“”“将图像张量调整为与参考图像张量相同的大小/形状。”
Args:
输入_张量:(图像张量)输入要调整大小的图像张量
ref_tensor:(image tensor)我们想要调整输入张量大小的参考图像张量。
返回:
重塑张量
"""
重塑的张量=tf.image.resize(图像=输入张量,
尺寸=tf.形状(参考张量)[1:3],
方法=tf.image.ResizeMethod.NEAREST_NEIGHBOR,
保留长宽比=假,
反别名=假,
名称=无)
返回整形张量
# ############################################################# #
#使用TF.KERAS FN API定义模型#
#投入
model_input_1=tf.keras.layers.input(shape=(160160,3))
model_input_2=tf.keras.layers.input(shape=(160160,3))
#输出
模型_输出_1=tf.keras.layers.Conv2D(过滤器=64,
内核大小=(1,1),
使用_bias=False,
kernel_initializer='he_normal',
name='conv_name_base')(模型输入1)
model_output_2=tf.keras.layers.Lambda(函数=resize_like,
参数={'ref_张量':模型_输出_1}(模型_输入_2)
#模型
model=tf.keras.models.model(输入=[model\u input\u 1,model\u input\u 2],
输出=型号输出2,
name=“测试模型”)
# ############################################################# #
#试着利用预测和虚拟输入#
虚拟输入=[np.one((1160160,3)),np.zero((1160160,3))]

model.predict(x=dummy\u input)#>>>>此处出现错误model.predict(x=dummy\u input)#>>>>此处出现错误>>>您可以尝试以下步骤:

  • 更改
    resize_like
    ,如下所示:

    def resize_like(inputs):
        input_tensor, ref_tensor = inputs
        reshaped_tensor = tf.image.resize(images=input_tensor,
                                  size=tf.shape(ref_tensor)[1:3],
    
        method=tf.image.ResizeMethod.NEAREST_NEIGHBOR,
                                  preserve_aspect_ratio=False,
                                  antialias=False,
                                  name=None)
        return reshaped_tensor
    
  • 然后,在
    Lambda
    层中:

    model_output_2 = tf.keras.layers.Lambda(function=resize_like)([model_input_2, model_output_1])
    

  • 明亮的谢谢你认为坚持使用lambda图层更好吗?或者如原始文章底部所示,对自定义图层类进行子类化并创建自定义图层类?
    Lambda
    图层有助于快速原型制作,但我更喜欢为具有多个操作的任何对象编写自定义图层。在构建最终模型时,请坚持使用自定义图层。Lambdas只是在后面引起问题。您能解释一下为什么函数的第一行会解决问题吗?Tensorflow将层的第一个参数视为其输入。输入类型与大范围无关-列表、元组、numpy数组或张量。在本例中,我们将输入作为一个列表传递,并在函数中解包。我可以要求@DarienSchettler显示实现了自定义层的代码吗?我有一个类似于你的问题,我不知道如何解决它与我的自定义层。