使用具有奇怪输出的Softmax的神经网络

时间:2018-03-16 11:54:53

标签: python tensorflow machine-learning neural-network softmax

我正在尝试使用Sigmoid激活隐藏层和具有3个类的softmax输出层来构建张量流神经网络。输出大多非常糟糕,我相信这是因为我在模型构建中犯了一个错误,因为我用Matlab构建了一个类似的模型,结果很好。数据被标准化。这些结果如下所示:

[9.2164397e-01 1.6932052e-03 7.6662831e-02]
[3.4100169e-01 2.2419590e-01 4.3480241e-01]
[2.3466848e-06 1.3276369e-04 9.9986482e-01]
[6.5199631e-01 3.4800139e-01 2.3596617e-06]
[9.9879754e-01 9.0103465e-05 1.1123115e-03]
[6.5749985e-01 2.8860433e-02 3.1363973e-01]

我的nn看起来像这样:

def multilayer_perceptron(x, weights, biases, keep_prob):
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.sigmoid(layer_1)
    layer_1 = tf.nn.dropout(layer_1, keep_prob)
    out_layer = tf.nn.softmax(tf.add(tf.matmul(layer_1,weights['out']),biases['out']))
    return out_layer

使用以下成本函数:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=predictions, labels=y))

我越来越相信我的实施是不正确的,我做的事情非常愚蠢。谷歌上的小时和看其他例子并没有帮助。

更新:当我更改成本函数(如下所示)时,我得到了不错的结果。但这感觉不对。

cost = tf.losses.mean_squared_error(predictions=predictions, labels=y)

1 个答案:

答案 0 :(得分:2)

您的成本函数实现了模型输出的softmax atop,它也具有softmax。您应该删除损失函数中的那个。除此之外,你的代码看起来很好:你确定:你的两个模型的拓扑结构(辍学率,每层神经元层数)是否相同? 你确定你没有遵守课程的顺序。两次培训后的损失和验证损失度量如何?