假设我已经训练了以下模型的时代:
model = Sequential([
Dense(32, input_dim=784), # first number is output_dim
Activation('relu'),
Dense(10), # output_dim, input_dim is taken for granted from above
Activation('softmax'),
])
我得到了权重dense1_w
,第一个隐藏图层(名为dense1_b
)的偏差dense1
和单个数据样本sample
。
如何使用这些来获取dense1
sample
中keras
的输出?
谢谢!
答案 0 :(得分:11)
最简单的方法是使用keras后端。使用keras后端,您可以定义一个函数,为您提供此处定义的keras模型的中间输出(https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer)。
所以实质上:
int index = abc.indexOf("def");
if (index == -1) {
index = abc.indexOf("ghi");
} else {
// something else
}
答案 1 :(得分:5)
只需重新创建模型的第一部分,直到您想要输出的图层(在您的情况下只有第一个密集图层)。之后,您可以在新创建的模型中加载第一部分的训练权重并进行编译。
使用这个新模型的预测输出将是图层的输出(在您的情况下是第一个密集图层)。
from keras.models import Sequential
from keras.layers import Dense, Activation
import numpy as np
model = Sequential([
Dense(32, input_dim=784), # first number is output_dim
Activation('relu'),
Dense(10), # output_dim, input_dim is taken for granted from above
Activation('softmax'),
])
model.compile(optimizer='adam', loss='categorical_crossentropy')
#create some random data
n_features = 5
samples = np.random.randint(0, 10, 784*n_features).reshape(-1,784)
labels = np.arange(10*n_features).reshape(-1, 10)
#train your sample model
model.fit(samples, labels)
#create new model
new_model= Sequential([
Dense(32, input_dim=784), # first number is output_dim
Activation('relu')])
#set weights of the first layer
new_model.set_weights(model.layers[0].get_weights())
#compile it after setting the weights
new_model.compile(optimizer='adam', loss='categorical_crossentropy')
#get output of the first dens layer
output = new_model.predict(samples)
答案 2 :(得分:0)
关于权重,我有一个非顺序模型。我所做的是使用model.summary()
获取所需的图层名称,然后使用model.get_layer("layer_name").get_weights()
获取权重。