带有SoftMax的张量流中神经网络收敛的奇异行为

时间:2018-02-20 05:46:25

标签: python tensorflow neural-network deep-learning reinforcement-learning

所以我在神经网络中遇到了一个非常奇怪的问题。我本质上是训练神经网络从头开始玩Pong游戏。现在我已经设法使它收敛,并且它运行得相当好,但后来我将一个tf调用改为另一个,我认为这是相同的,我不能为我的生活弄清楚为什么后一个最终可怕地发散(乒乓球球拍最终在顶部没有移动)。

我唯一的区别就是一条线。这是我收敛的神经网络结构:

    h = tf.layers.dense(
        self.observations,
        units=hidden_layer_size,
        activation=tf.nn.relu,
        kernel_initializer=tf.contrib.layers.xavier_initializer())

    self.probability = tf.layers.dense(
        h,
        units=2,
        activation = tf.nn.softmax,
        kernel_initializer=tf.contrib.layers.xavier_initializer())

然后我定义了自我概率上的日志损失,并优化了丢失函数,非常标准的东西。但是如果我将self.probability改为:

    self.probability = tf.nn.softmax(tf.layers.dense(
        h,
        units=2,
        kernel_initializer=tf.contrib.layers.xavier_initializer()))

然后由于某种原因,所有的地狱都破裂了,我的分歧非常糟糕。是不是将激活函数作为tf.nn.softmax传递,基本上将输出张量包装到softmax函数中,就像后面的例子一样?!我在这里错过了什么吗?任何帮助,将不胜感激。

0 个答案:

没有答案