使用嵌入时是否应该将trainable = True设置为True?

时间:2018-12-29 06:40:18

标签: tensorflow word embedding

当我使用RNN进行分类时,初始化嵌入时是否应该设置trainable=True

我不确定初始化嵌入时是否应该设置trainable=True。 在正常情况下,如果没有预训练的嵌入文件,我应该初始化单词嵌入矩阵,例如:

bound = -1 # for example
initializer = tf.random_uniform_initializer(minval=-bound, maxval=bound)
embedding = tf.get_variable(name=variable_name,
                        shape=[vocab_size, embedding_size],
                        dtype=tf.float32,
                        initializer=initializer)

,参数trainable默认为True

原始图片如下:     大约-0.2300489,-0.7200954,0.5842655,0.7981529,-0.7432661 ... -0.12576556,0.3133614,-0.78932405,0.38539863,0.5543554 而且我认为它可行,因为所有值都在[-1,1]中。

但是,当经过RNN分类模型训练后,原始嵌入值将变为:     约6.2576456 5.708158 -6.7240534 -7.060843 -6.9045954 ... 0.65268683 6.7722726 5.766225 6.743621 -5.3276224     一个-0.9980886 0.8692293 -0.24473047 0.40041256 -0.8348596 ... -0.9133856 -0.6819365 -0.44985628 -0.43600297 0.51928043     帮助-3.8815696 -6.9417324 -7.086827 -2.7665734 3.8522656 ... 2.8540928 6.841772 2.7118142 7.89535 1.4688607

是正常的还是应该对其进行标准化?

1 个答案:

答案 0 :(得分:1)

  

初始化嵌入时,我应该设置trainable = True吗?

是的,因为否则权重就是您初始化的随机值。通过设置可训练的True,您可以让网络自己学习嵌入。

  

是正常的还是应该对其进行标准化?

是的,除非您对此进行限制,否则嵌入权重通常具有指定的值。如果您希望网络的权重较小,则可以使用正则化,例如l2-regularization