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)`
我想知道如何获取Model
中keras
之前的Dense层的权重(例如Dense_2的内核)?
如果我运行:autoencoder = Model(input=input_img,output=decoder)
,然后执行autoencoder.get_layer('dense_2').kernel
,则可以获取内核。但是,我想将内核设置为输出之一。因此,我必须在Model
之前获取内核。
我想获取kernel
,因为它将被设置为损失函数的一部分,例如loss2=tf.square(kernel' * kernel, axis=-1)
。因此,我必须在运行kernel
之前获取Model
。
我该怎么做?
谢谢!
答案 0 :(得分:0)
我认为您的意思是您需要将中间层之一作为输出之一。 就您而言,您可以通过以下方式更改模型创建:
autoencoder = Model(input=input_img,output=[encoder,decoder])
您可以为这两个输出中的每一个定义甚至不同的损耗!