如何避免在 Tensorflow 2 中为 CTC 损失模型定义目标张量?
How to avoid defining target tensors in Tensorflow 2 for CTC loss model?
我正在尝试在 Tensorflow 2 中使用 tf.distribute.MirroredStrategy() 在具有 CTC 损失的模型上进行多 GPU 训练。
问题是模型需要定义 target_tensors 才能编译。
可能是什么原因造成的?
是否有一些解决方法和不定义 target_tensors 的编译模型?
如果我没有通过目标,我会得到以下信息:
TypeError: Value passed to parameter 'indices' has DataType float32 not in list of allowed values: uint8, int32, int64
该模型是使用 Keras 函数 API 定义的,方法如下:
model = Model(name ='Joined_Model_2',inputs=self.inp, outputs=[self.network.outp, self.network.outp_stt])
模型必须编译为:
self.model_joined.compile(optimizer=optimizer_stt,
loss=losses,
loss_weights= lossWeights,
target_tensors=[target1, target2]
)
该模型有 2 个输出,但在第二个输出上使用的 CTC 损失导致了问题。
这已通过使用 tf-nightly 版本解决。
Tf-nightly 不允许在急切执行模式下使用 target_tensors。
使用夜间版本,我的模型在没有目标张量的情况下成功编译(实现没有变化),所以问题解决了。
我正在尝试在 Tensorflow 2 中使用 tf.distribute.MirroredStrategy() 在具有 CTC 损失的模型上进行多 GPU 训练。
问题是模型需要定义 target_tensors 才能编译。 可能是什么原因造成的? 是否有一些解决方法和不定义 target_tensors 的编译模型?
如果我没有通过目标,我会得到以下信息:
TypeError: Value passed to parameter 'indices' has DataType float32 not in list of allowed values: uint8, int32, int64
该模型是使用 Keras 函数 API 定义的,方法如下:
model = Model(name ='Joined_Model_2',inputs=self.inp, outputs=[self.network.outp, self.network.outp_stt])
模型必须编译为:
self.model_joined.compile(optimizer=optimizer_stt,
loss=losses,
loss_weights= lossWeights,
target_tensors=[target1, target2]
)
该模型有 2 个输出,但在第二个输出上使用的 CTC 损失导致了问题。
这已通过使用 tf-nightly 版本解决。
Tf-nightly 不允许在急切执行模式下使用 target_tensors。 使用夜间版本,我的模型在没有目标张量的情况下成功编译(实现没有变化),所以问题解决了。