Keras中model.compile()和model.add_loss()中损失的区别

问题描述 投票:1回答:1

我很困惑,model.compile()中的add_loss和传统的loss有什么区别?

我的代码如下。

from time import time
import numpy as np
import random
from keras.models import Model
import keras.backend as K
from keras.engine.topology import Layer, InputSpec
from keras.layers import Dense, Input, GaussianNoise, Layer, Activation
from keras.models import Model
from keras.optimizers import SGD, Adam
from keras.utils.vis_utils import plot_model
from keras.callbacks import EarlyStopping


input_place = Input(shape=(128,))

e_layer1 = Dense(64,activation='relu')(input_place)
e_layer2 = Dense(32,activation='relu')(e_layer1)
hidden = Dense(16,activation='relu')(e_layer2)

d_layer1 = Dense(32,activation='relu')(hidden)
d_layer2 = Dense(64,activation='relu')(d_layer1)

output_place = Dense(128,activation='sigmoid')(d_layer2)

model = Model(inputs=input_place,outputs=output_place)

loss = K.mean(K.square(d_layer1 - e_layer2),axis = -1)

model.add_loss(loss)

model.compile(optimizer = 'adam',
              loss=['mse'],
              metrics=['accuracy'])

input_data = np.random.randn(1,128)

model.fit(input_data,
          input_data,
          epochs=5)

如上所述,我做了两个损失函数,一个是在model.compile()中用传统的MSE损失来计算输入和输出的MSE_loss,另一个损失也像MSE损失,但它计算的是中间层的MSE,可以运行,但我很疑惑,这两种不同的加损失方式,我的模型能清楚地知道它们是什么吗?

python tensorflow keras loss
1个回答
0
投票

是的,你的 Model 知道它们是什么,确实。

loss 中指定的 model.compile 确保 MSE 之间 Y_PredY_Actual 减少了,而 model.add_loss 的差异,确保 d_layer1e_layer2 是减少。

这相当于在 model.compile根本区别 之间 loss 所述 model.compilemodel.add_loss 中所述的损失。model.compile 被限制在参数上。y_truey_pred 而在 model.add_loss,我们可以指定 Loss 对于任何数量的 Additional Tensors 在我们的项目中使用。

换句话说: model.add_loss 让我们可以写出更多的 complex losses 决于许多其他 tensors但它的不便之处在于更多的依赖性。modelstandard loss functions (those used inside model.compile) 任何型号都可以使用。

希望能帮到你。学习愉快!

© www.soinside.com 2019 - 2024. All rights reserved.