Neural network 如何在Keras模型中检查每次epoc后的重量

Neural network 如何在Keras模型中检查每次epoc后的重量,neural-network,deep-learning,keras,keras-layer,Neural Network,Deep Learning,Keras,Keras Layer,我在Keras中使用序列模型。我想在每一个纪元之后检查一下模型的重量。你能告诉我怎么做吗 model = Sequential() model.add(Embedding(max_features, 128, dropout=0.2)) model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binar

我在Keras中使用序列模型。我想在每一个纪元之后检查一下模型的重量。你能告诉我怎么做吗

model = Sequential()
model.add(Embedding(max_features, 128, dropout=0.2))
model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2))  
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics['accuracy'])
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=5 validation_data=(X_test, y_test))

提前感谢。

您需要的是一个
回调函数。回调是一个Keras函数,在关键点的训练期间重复调用。它可以是在一批、一个时代或整个训练之后。有关文档和现有回调列表,请参见

您需要的是一个可以使用LambdaCallBack对象创建的自定义回调

from keras.callbacks import LambdaCallback

model = Sequential()
model.add(Embedding(max_features, 128, dropout=0.2))
model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2))  
model.add(Dense(1))
model.add(Activation('sigmoid'))

print_weights = LambdaCallback(on_epoch_end=lambda batch, logs: print(model.layers[0].get_weights()))

model.compile(loss='binary_crossentropy',optimizer='adam',metrics['accuracy'])
model.fit(X_train, 
          y_train, 
          batch_size=batch_size, 
          nb_epoch=5 validation_data=(X_test, y_test), 
          callbacks = [print_weights])
上面的代码应该打印嵌入权重
model.layers[0]。在每个历元结束时获取_weights()
。由您决定在您希望使其可读的位置打印它,将其转储到pickle文件中


希望这有帮助

谢谢你的回答,但是如果我想将所有权重保存到列表中而不是打印出来,我该怎么做呢?我尝试了日志[“权重”].append(model.layers[0]。get_weights(),但它不是work@jimmy15923model.layers[0]。get_weights()仅显示第一层的权重,考虑到它是用于输入的,这将不算什么。您需要迭代所有层。键入:您应该打印历元,而不是批处理:print_weights=LambdaCallback(on_epoch_end=lambda epoch。。。