【问题标题】:Make Keras model output a constant of certain shape使 Keras 模型输出一定形状的常数
【发布时间】:2018-12-18 04:55:06
【问题描述】:

我想要一个 Keras 模型,它始终输出所需输出形状的恒定值。

def build_model(input_shape, output_shape)
    input = tf.keras.layers.Input(shape=(512,512,3))
    x = tf.keras.backend.constant(1, shape=output_shape)
    output = tf.keras.layers.Lambda(lambda x: x)(x)
    model = Model(inputs=input, outputs=output)
    return model

model = build_model((512,512,3), (512,512,32))

我收到以下错误:

模型的输出张量必须是 TensorFlow Layer 的输出(因此保存过去的层元数据)。找到:Tensor("Const_3:0", shape=(512, 512, 32), dtype=float32)

我该如何解决?

更新

输入和输出确实没有连接。我想以尽可能低的 GPU 负载测试我的处理管道的性能。我认为在不进行任何计算的情况下始终输出相同的值不会过多地使用 GPU。但我仍然确保我的数据已正确加载(输入层)。

【问题讨论】:

  • inputoutput 节点未连接。你想要达到的目标也不清楚。
  • 它们确实没有连接。我想用尽可能低的 GPU 工作负载测试我的管道,但仍然使用我的数据作为输入以及我的成本函数(因此输出需要具有一定的形状)。
  • 您是否尝试过输出输入?
  • 我认为如果你输出输入,tensorflow 足够聪明,不会将数据传输到 GPU 并返回(因为地址是相同的)。我认为最简单的方法是在输入上添加线性Activation
  • @Mitiku 你是正确的输出和输入需要连接。我不能使用激活函数,因为输出的形状应该与输入不同。

标签: tensorflow keras


【解决方案1】:

问题确实是需要连接输出和输入。我不能使用激活层,因为输出的形状应该与输入的形状不同。因此,我最终将输入连接 11 次并再次对其进行切片,以获得具有 0 个可训练参数的正确形状的输出。

最终的模型构建函数如下所示:

def build_model(input_shape=(512,512,3)):
    input = tf.keras.layers.Input(shape=input_shape)
    lamb = tf.keras.layers.Lambda(lambda x: tf.slice(tf.concat([x]*11, axis=3), begin=(0,0,0,0), size=(-1,512,512,32)))
    output = lamb(inp)
    model = Model(inputs=input, outputs=output)
    return model

【讨论】:

    猜你喜欢
    • 2022-10-18
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2019-12-12
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多