Tensorflow 在基于Keras的LSTM模型中,如何得到每个历元一层的权重矩阵?

Tensorflow 在基于Keras的LSTM模型中,如何得到每个历元一层的权重矩阵?,tensorflow,deep-learning,keras,lstm,Tensorflow,Deep Learning,Keras,Lstm,我有一个基于Keras的简单LSTM模型 X\u序列,X\u测试,Y\u序列,Y\u测试=序列测试分割(输入,标签,测试大小=0.2,随机状态=i*10) X_列=X_列重塑(80112,12) X_检验=X_检验。重塑(20112,12) y_train=np.zero((80112),dtype='int') y_检验=np.零((20112),dtype='int') y_列=np。重复(y_列,112,轴=1) y_检验=np。重复(y_检验,112,轴=1) np.随机种子(1) #创

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

X\u序列,X\u测试,Y\u序列,Y\u测试=序列测试分割(输入,标签,测试大小=0.2,随机状态=i*10)
X_列=X_列重塑(80112,12)
X_检验=X_检验。重塑(20112,12)
y_train=np.zero((80112),dtype='int')
y_检验=np.零((20112),dtype='int')
y_列=np。重复(y_列,112,轴=1)
y_检验=np。重复(y_检验,112,轴=1)
np.随机种子(1)
#创建模型
模型=顺序()
批量大小=20
添加(BatchNormalization(输入_形状=(112,12),模式=0,轴=2))#4
添加(LSTM(100,返回_序列=False,输入_形状=(112,12)))#7
模型.添加(密集型(112,激活='hard_sigmoid'))#9
编译(loss='binary\u crossentropy',optimizer='RMSprop',metrics=['binary\u accurity'])9
模型拟合(X_列,y_列,nb_历元=30)#9
#模型的最终评估
分数=模型。评估(X_测试、y_测试、批次大小=批次大小、详细程度=0)
我知道如何通过
模型获取权重列表。获取权重()
,但这是模型完全训练后的值。我想得到每个历元的权重矩阵(例如,我的LSTM中的最后一层),而不仅仅是它的最终值。换句话说,我有30个纪元,我需要得到30个权重矩阵值


非常感谢,我没有在keras的wiki上找到解决方案。

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

从keras.callbacks导入回调
类CollectWeightCallback(回调):
定义初始(自,层索引):
super(CollectWeightCallback,self)。\uuuuu init\uuuuu()
self.layer\u index=layer\u index
自重=[]
def on_epoch_end(self、epoch、logs=None):
图层=自.模型.图层[自.图层索引]
self.weights.append(layer.get_weights())
回调的属性
self.model
是对正在训练的模型的引用。它是通过
回调设置的。在培训开始时设置_model()

要获得每个历元最后一层的权重,请将其与以下各项一起使用:

cbk = CollectWeightCallback(layer_index=-1)
model.fit(X_train, y_train, nb_epoch=30, callbacks=[cbk])
然后将权重矩阵收集到
cbk.weights