Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 实施';无用损失';和凯拉斯?_Tensorflow_Keras - Fatal编程技术网

Tensorflow 实施';无用损失';和凯拉斯?

Tensorflow 实施';无用损失';和凯拉斯?,tensorflow,keras,Tensorflow,Keras,我有一个Keras模型,它有两个输出: output是要计算损耗的网络的真实输出 附加用于在推理过程中执行外部任务(不应使用此输出计算损失) 当我建立模型时,我写了这样的东西: model = Model(inputs=inp, outputs=[output, additional]) 由于我的模型有两个输出,因此在编译模型时我需要提供两个损失,因此我创建了一个无用的损失,如下所示: class NoopLoss(object): def __call__(self, y_tr

我有一个Keras模型,它有两个输出:

  • output
    是要计算损耗的网络的真实输出

  • 附加
    用于在推理过程中执行外部任务(不应使用此输出计算损失)

当我建立模型时,我写了这样的东西:

model = Model(inputs=inp, outputs=[output, additional])
由于我的
模型
有两个输出,因此在编译模型时我需要提供两个损失,因此我创建了一个无用的损失,如下所示:

class NoopLoss(object):

    def __call__(self, y_true, y_pred, **kwargs):
        return self.compute_loss(y_true, y_pred)

    def compute_loss(self, y_true, y_pred):
        return tf.math.square(0.0)

loss = UsefulLoss()  # the real loss I'm using
noop_loss = NoopLoss()

model.compile(loss=[loss, noop_loss], optimizer=optimizer, metrics=['binary_accuracy'])
我将其集成到编译步骤中,如下所示:

class NoopLoss(object):

    def __call__(self, y_true, y_pred, **kwargs):
        return self.compute_loss(y_true, y_pred)

    def compute_loss(self, y_true, y_pred):
        return tf.math.square(0.0)

loss = UsefulLoss()  # the real loss I'm using
noop_loss = NoopLoss()

model.compile(loss=[loss, noop_loss], optimizer=optimizer, metrics=['binary_accuracy'])

这是可行的,但我觉得有点不成熟,有没有正确的方法来实现这种行为?我在KARAS文档中没有发现任何官方无用的损失。

< P>我认为,Keras并没有考虑过这样的事情。 我自己也经常使用这些黑客

但是,不确定这是不是一个更好的解决方案,实际上可能不是,您可以创建一个培训模型和一个推理模型,两者都共享可培训部分:

inputs = Input(...)
trainable_out = SomeLayer(...)(inputs)
....
trainable_out = ....

extra_output = SomeLayer(...)(something)    

training_model = Model(inputs, trainable_out)
inference_model = Model(inputs, [trainable_out, extra_output])   
您可以训练
training\u model
,并自动训练其他模型