【发布时间】:2020-05-14 04:00:31
【问题描述】:
我正在对tensorflow.keras.Model 进行子类化以实现某个模型。预期行为:
- 训练(拟合)时间:返回张量列表,包括最终输出和辅助输出;
- 推断(预测)时间:返回单个输出张量。
代码是:
class SomeModel(tensorflow.keras.Model):
# ......
def call(self, x, training=True):
# ......
return [aux1, aux2, net] if training else net
这就是我使用它的方式:
model=SomeModel(...)
model.compile(...,
loss=keras.losses.SparseCategoricalCrossentropy(),
loss_weights=[0.4, 0.4, 1],...)
# ......
model.fit(data, [labels, labels, labels])
得到:
AssertionError:在转换后的代码中:
ipython-input-33-862e679ab098:140 调用 *
`return [aux1, aux2, net] if training else net`...\tensorflow_core\python\autograph\operators\control_flow.py:918 if_stmt
那么问题是if语句被转换为计算图,这当然会导致问题。我发现整个堆栈跟踪很长而且没用,所以这里没有包含。
那么,有没有办法让TensorFlow根据training生成不同的图呢?
【问题讨论】:
标签: python tensorflow keras loss-function