2017-08-11 52 views
1

我有一个香草前馈神经网络(2隐藏层和softmax输出层),做文本分类。它是用tflearn实现的。Tflearn排名文件与神经网络没有softmax输出层

softmax所做的是将输出转换为密度概率分布,以确定输入实例最可能的类别。

而不是分类,我想排名文件(每个类将有一个“分数”,而不是一个概率)。所以我的方法不是标准化输出层,而是仅使用常规图层(使用S形启动函数)。这会给我这个分数(在0和1之间)的每个文件。

我定义的模型是这样的:

tf.reset_default_graph() 
    # Build neural network 
    net = tflearn.input_data(shape=[None, x_size]) 
    net = tflearn.fully_connected(net, self.HIDDEN_LAYER_SIZE) 
    net = tflearn.fully_connected(net, self.HIDDEN_LAYER_SIZE) 
    net = tflearn.fully_connected(net, y_size, activation='sigmoid') 
    net = tflearn.regression(net) 

    # Define model and setup tensorboard 
    model = tflearn.DNN(net) 
    return model 

如果我训练模型与SOFTMAX输出,该模型是相当准确的。但是如果我改变一个S形输出激活函数,我的分数就不如我预期的那么准确(正确的分数是最高的)。在某些情况下,分数完全错误。

我的问题是:这种方法是正确的做文本排名与神经网络?为什么分数不像预期的那样(也许我在训练期间缺少一些东西,或者某些超参数需要一些调整,或者我是否需要使用此方法的更多训练数据?或者是什么与tflearn?)。

在此先感谢! Ivan

回答

1

你试图解决的问题是回归问题。你希望网络的结果是一个连续的值(在你的情况下,从0到1),而不是将它映射到不同的类别(这将被称为分类)。

作为一般规则,对回归量你想使用线性激活(在tflearn 线性)或RELU(RELU在tflearn取值范围从0到∞)为输出层活化。

您的网络在输出层中使用sigmoid激活时性能不佳的原因在于vanishing gradient problem。 当你的输出接近1时,sigmoid变得非常非常平坦,渐变消失到接近零,使得反向传播学习速度非常缓慢。

TL; DR:这是正常的。这是由于消失梯度问题。相反,请使用线性或ReLU进行回归。