【问题标题】:Saving layer outputs in keras funtional API在 keras 功能 API 中保存层输出
【发布时间】:2022-01-23 23:55:44
【问题描述】:

我正在使用 keras 功能 API 实现 U-net。 U-net 的一个方面是具有“水平”上下文连接(类似于残差)。我使用 for 循环创建下采样和上采样层。例如:

for filters in [32, 64, 128]:
        x = inverted_residual_block(x, expand=filters*2, squeeze=filters)
        x = inverted_residual_block(x, expand=filters*2, squeeze=filters)
        
        x = down_sampling_block(x,filters=filters)

我可以在一个简单的列表中收集中间输入吗,比如

horizontal_connection.append(x)

在我的循环中上采样期间调用?我在 keras 或 TF 中找不到任何关于此方法导致问题的注释。我担心这会在图形生成过程中导致错误。如果有人有经验或见解分享,将不胜感激!

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    我认为这只能在急切执行中起作用,因为列表是 python 构造。在图执行中,python 结构只被评估一次,那是在 tensorflow 图的实际执行之前。如果需要在循环中的图形执行中创建数组,可以使用 tf.TensorArray (https://www.tensorflow.org/api_docs/python/tf/TensorArray)。

    Eager execution 与 python 代码一起评估张量操作;因此,可以一起使用 python 列表和 tensorfow 的张量。 Eager execution 有利于调试,但如果您希望它运行得更快,则必须使用图形执行。

    【讨论】:

      【解决方案2】:

      我已经完成并实现了数组的这些用途,并且我没有看到性能有重大下降。我对功能 API 的理解是不完整的,但我相信这是有道理的,因为您只是在引用不同的层而不是在图中添加问题。由于图表贯穿模型的各个层,因此不应被您构建模型的方式所破坏。此外,即使该假设是错误的,AutoGraph 也会负责将基本 Python 代码转换为图形代码。例如,将 while 循环转换为 tf.while_loop()。

      感谢您对我的问题发表评论!

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2020-03-12
      • 2018-07-06
      • 2021-02-22
      • 2020-07-22
      • 2017-11-26
      • 2018-08-18
      相关资源
      最近更新 更多