问题描述
我有一个基于Keras的简单LSTM模型.
I have a simple LSTM model based on Keras.
X_train, X_test, Y_train, Y_test = train_test_split(input, labels, test_size=0.2, random_state=i*10)
X_train = X_train.reshape(80,112,12)
X_test = X_test.reshape(20,112,12)
y_train = np.zeros((80,112),dtype='int')
y_test = np.zeros((20,112),dtype='int')
y_train = np.repeat(Y_train,112, axis=1)
y_test = np.repeat(Y_test,112, axis=1)
np.random.seed(1)
# create the model
model = Sequential()
batch_size = 20
model.add(BatchNormalization(input_shape=(112,12), mode = 0, axis = 2))#4
model.add(LSTM(100, return_sequences=False, input_shape=(112,12))) #7
model.add(Dense(112, activation='hard_sigmoid'))#9
model.compile(loss='binary_crossentropy', optimizer='RMSprop', metrics=['binary_accuracy'])#9
model.fit(X_train, y_train, nb_epoch=30)#9
# Final evaluation of the model
scores = model.evaluate(X_test, y_test, batch_size = batch_size, verbose=0)
我知道如何通过model.get_weights()
获取权重列表,但这就是模型经过全面训练后的价值.我想在每个时期都获得权重矩阵(例如,我的LSTM中的最后一层),而不只是它的最终值.换句话说,我有30个纪元,我需要获得30个权重矩阵值.
I know how to get the weight list by model.get_weights()
, but that's the value after the model is fully trained. I want to get the weight matrix(for example, the last layer in my LSTM) at every epoch rather than only the final value of it. In other words, I have 30 epochs and I need to get 30 weight matrix values.
真的谢谢你,我在keras的wiki上找不到解决方案.
Really thank you, I didn't find the solution on the wiki of keras.
推荐答案
您可以为其编写自定义回调:
You can write a custom callback for it:
from keras.callbacks import Callback
class CollectWeightCallback(Callback):
def __init__(self, layer_index):
super(CollectWeightCallback, self).__init__()
self.layer_index = layer_index
self.weights = []
def on_epoch_end(self, epoch, logs=None):
layer = self.model.layers[self.layer_index]
self.weights.append(layer.get_weights())
回调的属性self.model
是对正在训练的模型的引用.训练开始时通过Callback.set_model()
进行设置.
The attribute self.model
of a callback is a reference to the model being trained. It is set via Callback.set_model()
when training starts.
要获取每个时期最后一层的权重,请与以下项配合使用:
To get the weights of the last layer at each epoch, use it with:
cbk = CollectWeightCallback(layer_index=-1)
model.fit(X_train, y_train, nb_epoch=30, callbacks=[cbk])
然后将权重矩阵收集到cbk.weights
.
The weight matrices will then be collected into cbk.weights
.
这篇关于在基于Keras的LSTM模型中,如何在每个时期获取一层的权重矩阵?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!