我使用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)
有什么帮助的想法吗?
答案 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)