python - 使用 Python 代码进行深度学习不再有效。“TypeError:函数构建代码之外的操作正在传递一个“图形”张量。”
问题描述
我正在实现一个 Tensorflow 变分自动编码器,完全从“使用 Python 进行深度学习”一书中复制代码。直到几天前,代码运行良好,但截至昨天它已经停止工作(我没有更改代码)。
该代码用于生成模型,该模型可以从 MNIST 数据集中复制图像。
具体报错信息如下:
TypeError:函数构建代码之外的操作正在传递一个“图形”张量。通过在函数构建代码中包含 tf.init_scope ,可以使 Graph 张量从函数构建上下文中泄漏。图张量的名称为:dense_2/BiasAdd:0
我已经在下面的 Google Collaborative 文件中提供了代码,因此您可以尝试自己运行它:
https://colab.research.google.com/drive/1ArmP3Nns2T_i-Yt-yDXoudp6Lhnw-ghu?usp=sharing
解决方案
您定义的用于计算损失的自定义层,即CustomVariationalLayer
,正在访问尚未直接传递给它的模型张量。这是不允许的,因为启用了 Eager 模式,但层中的函数默认以图形模式执行。要解决此问题,您可以使用 完全禁用 Eager 模式tf.compat.v1.disable_eager_execution()
,或者改为使用tf.config.run_functions_eagerly(True)
使所有功能急切运行。
但是,上述两种解决方案可能都不是可取的,因为它们正在修改 TF 的默认行为(尤其是后一种,因为它可能会降低性能)。因此,您可以修改CustomVariationalLayer
to的定义,而不是使用这些解决方案,z_mean
并将z_log_var
其作为其他输入:
class CustomVariationalLayer(keras.layers.Layer):
def vae_loss(self, x, z_decoded, z_mean, z_log_var):
# ...
def call(self, inputs):
x = inputs[0]
z_decoded = inputs[1]
z_mean = inputs[2]
z_log_var = inputs[3]
loss = self.vae_loss(x, z_decoded, z_mean, z_log_var)
# ...
y = CustomVariationalLayer()([input_img, z_decoded, z_mean, z_log_var])
推荐阅读
- typescript - 寻找一起使用 Electron.js 和 Typescript 项目引用的工作示例
- php - 根据分配的分类术语按商店经理过滤 WooCommerce 订单
- prolog - Prolog - bagof - 没有结果的情况
- reactjs - react中从类重构为功能钩子组件
- python - 解析没有类属性的 HTML 表结构
- fuzzing - fuzzer localhost:26000 上的 sulley fuzzing 框架中未显示崩溃
- angular - 无法使用 ngmodel 使选择正常工作
- java - dyld:库未加载:@rpath/libjli.dylib,找不到 java 图像
- r - 无法抑制 R markdown 中的所有库加载消息
- python - 捕获由 Google 搜索更正的单词