我不知道add.loss和model.compile()中的传统损失之间有什么区别?
我的代码如下:
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损失,但它计算了middle_layers MSE。 它可以运行,但是我很困惑,用这两种不同的方法增加损失,我的模型可以清楚地知道它们是什么吗?
答案 0 :(得分:0)
是的,您的Model
确实知道它们是什么。
在loss
中指定的model.compile
确保减小MSE
和Y_Pred
之间的Y_Actual
,并且model.add_loss
确保差异d_layer1
和e_layer2
之间的距离减少了。
这等效于在model.compile
中指定两个损失,但loss
和model.compile
中指定的model.add_loss
之间的基本差异是model.compile
中指定的损耗仅限于参数y_true
和y_pred
,而在model.add_loss
中,我们可以针对任意数量的{{ 1}}用于我们的项目。
换句话说,Loss
允许我们编写更多Additional Tensors
,它们依赖于许多其他model.add_loss
,但是它带来的不便是更加依赖complex losses
,而tensors
仅适用于任何模型。
希望这会有所帮助。学习愉快!