Open blueskydavie opened 6 years ago
主要原因是,特征号在预处理统计阶段是从1开始的,而0被设计为padding占位符。 因为padding数据时,使用0表示占位数据,对应的激活的特征号也会为0,所以+1是为了防止shape的错误。
运行crf_tagger.py的时候,发射概率矩阵的行设置为self.feat_size ,而不是self.feat_size+1,程序也是可以跑通的,不知道这种不加一的情况和加一的情况 有什么区别呢? 在训练出来的模型的准确率等方面没有什么区别吧?谢谢
@blueskydavie 不太明白在运行crf_tagger.py时设置发射矩阵时如何进行的。可否详细一些?
我表述的不太清楚,是那个权重矩阵 初始化的时候,把+1去掉了,如下 ,其他代码没有变,这样程序也是可以跑通的。
with tf.name_scope('weights'):
self.W = tf.get_variable(
shape=[self.feat_size, self.nb_classes],
initializer=tf.truncated_normal_initializer(stddev=0.01),
name='weights'
# regularizer=tf.contrib.layers.l2_regularizer(0.001)
)
@blueskydavie 你好,我去查看了以下lib中的相关代码,发现确实特征的编号是从0开始的。而我却忘记了0号特征已经存在于特征表中,所以这里的+1是没有必要的。
具体代码可以查看 ContextFeatureExtractor/src/pretreatment.py中的第一个函数。
这一部分的错误很快会被修复。十分感谢。
请问 with tf.name_scope('weights'): self.W = tf.get_variable( shape=[self.feat_size + 1, self.nb_classes], initializer=tf.truncated_normal_initializer(stddev=0.01), name='weights'
regularizer=tf.contrib.layers.l2_regularizer(0.001)
) 这里为什么是self.feat_size + 1呢?不应该就是self.feat_size吗?非常感谢。