我有一个Keras模型,有很多层
Embedding
,
LSTM
和
Dropout
,以及
CRF
实施
keras_contrib
.
我正试图恢复训练一个部分训练过的模型重量,我之前保存了这个重量。然而,当我尝试通过
save_load_utils.load_all_weights
属于
克拉斯·康特里布
,我收到了以下错误。
第108行,加载所有重量:
模型优化器。设置权重(优化器权重值)
第113行,在集合权重中:
优化器的“+str(len(params))+”)
ValueError:
指定权重列表(36)的长度与优化器(0)模型的权重数不匹配。优化器。设置权重(优化器权重值)
显然,优化器权重列表的长度为0。在里面
keras implementation of the optimizers.py
有人说,设置_权重
“只应在计算梯度后调用(否则优化器没有权重)。”
我想知道如何手动初始化优化器权重,以便我尝试加载的模型权重可以覆盖它们。我想用一个1号的虚拟批次来训练一个单一时代的模型,但是还有其他更优雅的方法来实现这一点吗?
The entire code
是在Github上,但下面是我培训的模型,提供一个简短的参考。
# Initialize vocab_size & embedding_weights
# Initialize C, U, N, M, H
model = Sequential()
embedding_layer = Embedding(vocab_size, N,
weights=[embedding_weights], mask_zero=True,
embeddings_regularizer=regularizers.l2(0.0001))
model.add(TimeDistributed(embedding_layer,
input_shape=(C, U)))
model.add(TimeDistributed(Bidirectional(LSTM(M // 2, return_sequences=True,
kernel_regularizer=regularizers.l2(0.0001)))))
model.add(TimeDistributed(Dropout(0.2)))
model.add(TimeDistributed(GlobalMaxPooling1D()))
model.add(Bidirectional(LSTM(H // 2, return_sequences = True,
kernel_regularizer=regularizers.l2(0.0001))))
model.add(Dropout(0.2))
crf = CRF(num_tags, sparse_target=False, kernel_regularizer=regularizers.l2(0.0001))
model.add(crf)
model.compile(optimizer, loss = crf.loss_function, metrics=[crf.accuracy])