Python tensorflow:输出层始终显示[1]

Python tensorflow:输出层始终显示[1],python,machine-learning,tensorflow,neural-network,tensorflow-gpu,Python,Machine Learning,Tensorflow,Neural Network,Tensorflow Gpu,这是一个我正在训练的辨别网络,所以我可以在生成网络中使用它。我在一个具有2个特征的数据集上进行了培训,并进行了二进制分类。1=冥想0=不冥想。(数据来源于siraj raval的一段视频) 出于某些原因,输出层(ol)总是在每个测试用例中输出[1] 我的数据集: 主要问题 首先,这是无效的交叉熵损失。您使用的方程式仅适用于2个或更多输出。对于单个sigmoid输出,您必须执行以下操作 -tf.reduce_sum(labels*tf.log(ol) + (1-labels)*tf.log(1-o

这是一个我正在训练的辨别网络,所以我可以在生成网络中使用它。我在一个具有2个特征的数据集上进行了培训,并进行了二进制分类。1=冥想0=不冥想。(数据来源于siraj raval的一段视频)

出于某些原因,输出层(ol)总是在每个测试用例中输出[1]

我的数据集:

主要问题 首先,这是无效的交叉熵损失。您使用的方程式仅适用于2个或更多输出。对于单个sigmoid输出,您必须执行以下操作

-tf.reduce_sum(labels*tf.log(ol) + (1-labels)*tf.log(1-ol), name = 'loss')
否则,最佳解决方案是始终回答“1”(现在正在发生)

为什么?

请注意,标签仅为0或1,您的全部损失是标签和预测对数的乘积。因此,当真标签为0时,无论您的预测如何,您的损失都是0,因为无论x是什么,0*log(x)=0(只要定义了log(x))。因此,您的模型只会因为没有预测“1”而受到惩罚,因此它会一直学习输出1

还有一些奇怪的事情
  • 您正在向正态分布提供负stddev,但不应该(除非这是随机正态的一些未记录的特征,但根据文档,它应该接受一个正的浮点,并且您应该在那里提供一个小数字)

  • 像这样计算交叉熵(以一种简单的方式)在数值上是不稳定的,看看tf.sigmoid\u cross\u entropy\u with_logits

  • 您没有排列您的数据集,因此您总是以相同的顺序处理数据,这可能会产生不良后果(丢失的周期性增加、更难收敛或缺乏收敛)

  • 2017-10-11 00:49:47.453721: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
    2017-10-11 00:49:47.454212: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
    2017-10-11 00:49:49.608862: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:955] Found device 0 with properties: 
    name: GeForce GTX 960M
    major: 5 minor: 0 memoryClockRate (GHz) 1.176
    pciBusID 0000:01:00.0
    Total memory: 4.00GiB
    Free memory: 3.35GiB
    2017-10-11 00:49:49.609281: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:976] DMA: 0 
    2017-10-11 00:49:49.609464: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:986] 0:   Y 
    2017-10-11 00:49:49.609659: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\35\tensorflow\core\common_runtime\gpu\gpu_device.cc:1045] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 960M, pci bus id: 0000:01:00.0)
    Loss @ epoch  0  =  0.000135789
    Loss @ epoch  1  =  4.16049e-05
    Loss @ epoch  2  =  1.84776e-05
    Loss @ epoch  3  =  9.41758e-06
    Loss @ epoch  4  =  5.24522e-06
    Loss @ epoch  5  =  2.98024e-06
    Loss @ epoch  6  =  1.66893e-06
    Loss @ epoch  7  =  1.07288e-06
    Loss @ epoch  8  =  5.96047e-07
    Loss @ epoch  9  =  3.57628e-07
    Loss @ epoch  10  =  2.38419e-07
    Loss @ epoch  11  =  1.19209e-07
    Loss @ epoch  12  =  1.19209e-07
    Loss @ epoch  13  =  1.19209e-07
    Loss @ epoch  14  =  -0.0
    Loss @ epoch  15  =  -0.0
    Loss @ epoch  16  =  -0.0
    Loss @ epoch  17  =  -0.0
    Loss @ epoch  18  =  -0.0
    Loss @ epoch  19  =  -0.0
    Loss @ epoch  20  =  -0.0
    Loss @ epoch  21  =  -0.0
    Loss @ epoch  22  =  -0.0
    Loss @ epoch  23  =  -0.0
    Loss @ epoch  24  =  -0.0
    Loss @ epoch  25  =  -0.0
    Loss @ epoch  26  =  -0.0
    Loss @ epoch  27  =  -0.0
    Loss @ epoch  28  =  -0.0
    Loss @ epoch  29  =  -0.0
    Testing...
    
    [[ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]
     [ 1.]]
    Saving model...
    [Finished in 57.9s]
    
    -tf.reduce_sum(labels*tf.log(ol) + (1-labels)*tf.log(1-ol), name = 'loss')