Keras: использовать два промежуточных слоя в функции потерь. - PullRequest
0 голосов
/ 05 мая 2020

Я реализую модель, в которой выходной сигнал декодера должен копировать выходные данные уровня gru2, а выходной сигнал f c является классификатором. Функция потерь должна быть суммой ошибки автокодировщика и ошибки классификации.

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 и вывода декодера в качестве выходных данных модели, но я не думаю, что могу получить доступ к ним обоим в одной и той же функции потерь (мне нужна функция потерь для каждого выхода)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...