【问题标题】:How to check the weights after every epoc in Keras model如何在 Keras 模型中检查每个 epoc 后的权重
【发布时间】:2017-06-21 17:28:23
【问题描述】:

我在 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))

提前致谢。

【问题讨论】:

    标签: neural-network deep-learning keras keras-layer


    【解决方案1】:

    您正在寻找的是CallBack 函数。回调是一个 Keras 函数,在训练过程中在关键点重复调用。它可以是在一批、一个时期或整个训练之后。有关文档和现有回调列表,请参见 here

    您想要的是可以使用 LambdaCallBack 对象创建的自定义 CallBack。

    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])
    

    上面的代码应该在每个 epoch 结束时打印你的嵌入权重model.layers[0].get_weights()。由您决定将其打印到您想要使其可读的位置,将其转​​储到 pickle 文件中,...

    希望对你有帮助

    【讨论】:

    • 感谢您的回答,但如果我想将所有权重保存到列表中而不是打印出来,我该怎么做?我已经尝试过 logs["weights"].append(model.layers[0].get_weights() 但它不起作用
    • @jimmy15923 model.layers[0].get_weights() 只显示第一层的权重,考虑到它是用于输入的,这没什么。您需要遍历所有层。
    • 错字:你应该打印时代,而不是批次:print_weights = LambdaCallback(on_epoch_end=lambda epoch, ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2017-12-22
    • 2019-05-20
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多