所以我在神经网络中遇到了一个非常奇怪的问题。我本质上是训练神经网络从头开始玩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函数中,就像后面的例子一样?!我在这里错过了什么吗?任何帮助,将不胜感激。