我正在尝试使用tf.distribute.MirroredStrategy((在Tensorflow 2中对CTC丢失的模型进行多GPU训练。
问题是模型需要定义target_tensor才能编译。造成这种情况的原因是什么?是否有一些变通方法,在不定义target_tensor的情况下编译模型?
如果我没有通过目标,我会得到以下信息:
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夜间版本来解决。
Tfnight不允许在急切执行模式下使用target_tensors。使用夜间版本,我的模型在没有目标张量的情况下成功编译(在实现中没有更改(,因此问题得到了解决。