Как я могу получить веса (ядра) плотного слоя перед моделью в Керасе? - PullRequest
0 голосов
/ 16 марта 2019
import numpy as np
from keras import backend as K
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Dense, Input
import matplotlib.pyplot as plt

# download the mnist to the path 
# X shape (60,000 28x28), y shape (10,000, )
(x_train, _), (x_test, y_test) = mnist.load_data()

# data pre-processing
x_train = x_train.astype('float32') / 255. - 0.5       # minmax_normalized
x_test = x_test.astype('float32') / 255. - 0.5         # minmax_normalized
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))


# in order to plot in a 2D figure
encoding_dim = 2

# this is our input placeholder
input_img = Input(shape=(784,))


# encoder layers
encoder = Dense(2, activation='relu')(input_img)

# decoder layers
decoder = Dense(784, activation='relu')(encoder)`

Я хочу знать, как я могу получить веса (такие как ядро ​​Dense_2) слоя Dense до Model в keras?

Если я запускаю: autoencoder = Model(input=input_img,output=decoder), затем делаю autoencoder.get_layer('dense_2').kernel, я могу получить ядро. Тем не менее, я хочу установить ядро ​​в качестве одного из выходных данных. Итак, я должен получить ядро ​​до Model.

Я хочу получить kernel, потому что он будет установлен как часть функции потерь, например, loss2=tf.square(kernel' * kernel, axis=-1). Поэтому я должен получить kernel перед запуском Model.

Как я могу это сделать?

Спасибо!

1 Ответ

0 голосов
/ 16 марта 2019

Я думаю, вы имеете в виду, что вам нужно иметь один из ваших средних слоев в качестве одного из выходных. В вашем случае вы можете изменить создание модели следующим образом:

autoencoder = Model(input=input_img,output=[encoder,decoder])

Вы можете определить даже разные потери для каждого из этих двух выходов!

...