我正在实现一个模型,在该模型中,解码器的输出应该复制gru2层的输出,而fc的输出是分类器。损失函数应该是自动编码器误差和分类误差之和。
inputs = keras.Input(shape=(127, 12))
gru1 = keras.layers.GRU(units=256, return_sequences=True)(inputs)
gru2 = keras.layers.GRU(units=256)(gru1)
encoder = keras.layers.Dense(50, activation='relu', activity_regularizer=keras.regularizers.l1(1e-5)(gru2)
decoder = keras.layers.Dense(256, activation='tanh')(encoder)
fc = keras.layers.Dense(20, activation='softmax')(gru2)
我的问题是了解如何访问gru2层的输出,我想这样做:
def custom_loss(y_true, y_pred):
autoencoder_loss = keras.losses.mean_squared_error(decoder, gru2)
crossentropy_loss = keras.losses.categorical_crossentropy(y_true, y_pred, axis=-1)
return autoencoder_loss + crossentropy_loss
model = keras.Model(inputs=inputs, outputs=fc)
model.compile(optimizer='Adam', loss=custom_loss)
哪个自然不起作用。我考虑过将gru2输出和解码器输出作为模型输出发送,但我认为我无法在相同的损失函数中访问它们(我需要为每个输出损失函数)