tensorflow - 如何在基于 Keras 的 LSTM 模型的每个时期获得一层的权重矩阵?

标签 tensorflow deep-learning keras lstm

我有一个基于 Keras 的简单 LSTM 模型。

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 个 epoch,需要得到 30 个权重矩阵值。

真的谢谢,在keras的wiki上没找到解决办法。

最佳答案

您可以为其编写自定义回调:

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() 设置的。

要获得每个时期最后一层的权重,请使用它:

cbk = CollectWeightCallback(layer_index=-1)
model.fit(X_train, y_train, nb_epoch=30, callbacks=[cbk])

然后将权重矩阵收集到 cbk.weights

关于tensorflow - 如何在基于 Keras 的 LSTM 模型的每个时期获得一层的权重矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46473823/

相关文章:

android - 在android中找不到TF模型输入节点

machine-learning - tensorflow 分发 seq2seq 永远卡住

python - test_on_batch 和 train_on_batch 的不同损失值

python - 如何在 PyTorch 中对子集使用不同的数据增强

machine-learning - 如何明确机器学习使用哪些模型层?

python - 是否可以在 Keras 中使用不可训练层?

tensorflow - 使用convert_variables_to_constants保存tf.trainable_variables()

tensorflow - 在 TensorFlow 中生成随机整数

python - 如何在多个数据集上正确实现 Keras 的 fit_generator?

machine-learning - 什么是多头模型?模型中的 'head' 到底是什么?