Керасы получают вывод последнего слоя во время тренировки - PullRequest
0 голосов
/ 04 мая 2020

Цель состоит в том, чтобы восстановить выходные данные последнего слоя вариационного автокодера на этапе обучения для использования в качестве данных обучения для другого алгоритма. Прикрепленный код модели автоаэнкера вариации:

encoding_dim=58
input_dim=xtrain.shape[1]
inputArray=Input(shape=(input_dim,))
encoded= Dense(units=encoding_dim,activation="tanh")(inputArray) 
encoded= Dense(units=29,activation="tanh")(encoded)
encoded= Dense(units=15,activation="tanh")(encoded)
encoded= Dense(units=10,activation="tanh")(encoded)
encoded= Dense(units=3,activation="tanh")(encoded)
encoded= Dense(units=10,activation="tanh")(encoded)
decoded= Dense(units=15,activation="tanh")(encoded)
decoded= Dense(units=29,activation="tanh")(decoded)
decoded= Dense(units=encoding_dim,activation="tanh")(decoded)
decoded= Dense(units=input_dim,activation="sigmoid")(decoded) 
autoecoder=Model(inputArray,decoded)
autoecoder.summary()

autoecoder.compile(optimizer=RMSprop(),loss="mean_squared_error",metrics=["mae"])
#hyperparametrs :
batchsize=100
epoch=10
history = autoecoder.fit(xtrain_noise,xtrain,
              batch_size=batchsize,
              epochs=epoch,
              verbose=1,
              shuffle=True,
              validation_data=(xtest_noise,xtest),
              callbacks=[TensorBoard(log_dir="../logs/DenoiseautoencoderHoussem")])

Я обнаружил, что могу получить нужный слой следующим образом:

autoecoder.layers[10].output

, но как сохранить его выходные данные во время тренировки в список? Спасибо.

Редактировать: Я могу сделать это, используя метод прогнозирования модели на данных xtrain, но я думаю, что это не лучший способ сделать это.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Чтобы решить эту проблему, единственным решением, которое можно использовать, является метод .predict модели DL. спасибо @marrco

0 голосов
/ 04 мая 2020

Вы можете обучать новую модель, используя предсказания ранее обученной модели, просто накладывая нужные выходные слои на новые и устанавливая trainable = False на старом слое. Вот фиктивный пример

# after autoencoder fitting

for i,l in enumerate(autoecoder.layers):
    autoecoder.layers[i].trainable = False
    print(l.name, l.trainable)

output_autoecoder = autoecoder.layers[10].output
x_new = Dense(32, activation='relu')(output_autoecoder) # add a new layer for exemple

new_model = Model(autoecoder.input, x_new)
new_model.compile('adam', 'mse')
new_model.summary()

Я использую вывод последнего слоя автоэнкодера в качестве ввода новых блоков. Мы можем объединить все, скомпилировав новую модель, где входные данные совпадают с автоэкодером, таким образом, мы можем использовать обучающие данные для другого алгоритма без вызова метода прогнозирования

...