如何冻结keras模型并使用tensorflow进行训练?

时间:2019-10-02 13:24:57

标签: tensorflow keras

我使用Keras构建模型,并尝试冻结Embedding层(设置Trainable = False),然后使用Tensorflow训练模型。但是,嵌入层仍然是可训练的。完整的代码如下:

sen_input = Input(shape=(maxlen,), name='sen_input')
emb = Embedding(embedding.shape[0], embedding.shape[1], weights=[embedding], trainable=False, name='emb')

x = emb(sen_input)
pred = Dense(num_classes, activation='softmax', name='pred')(x)


loss = -K.sum(x * K.log(pred + K.epsilon()), axis=-1)
train_step = tf.train.AdamOptimizer(0.001).minimize(loss)

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
init = tf.global_variables_initializer()
sess.run(init)

有什么帮助的想法吗?

1 个答案:

答案 0 :(得分:0)

您可以显式控制要优化的变量,从而控制哪些变量。因此,您可以从该列表中删除嵌入层。将其命名为emb后,您可以将代码编写为(仅发布代码的相关部分)

var_list = [v for v in tf.all_variables() if not v.name.startswith('emb')]
train_step = tf.train.AdamOptimizer(0.001).minimize(loss, var_list=var_list)