当我使用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
是正常的还是应该对其进行标准化?
答案 0 :(得分:1)
初始化嵌入时,我应该设置trainable = True吗?
是的,因为否则权重就是您初始化的随机值。通过设置可训练的True,您可以让网络自己学习嵌入。
是正常的还是应该对其进行标准化?
是的,除非您对此进行限制,否则嵌入权重通常具有指定的值。如果您希望网络的权重较小,则可以使用正则化,例如l2-regularization。