Tensorflow回归模型不会从负值中学习

时间:2017-02-19 17:12:14

标签: tensorflow

我使用张量流来解决非平凡的回归问题。 输入我的网络(具有192个二进制(0或1)元素的数组),表示扑克牌,扑克投注以及表示此动作获得的动作和输出(具有单个元素的数组)。 网络有3个隐藏层,有100个神经元

    input_layer = tf.placeholder(tf.float32, (None, self.INPUT_LAYER_SIZE))
    layer_1_biases = tf.Variable(tf.truncated_normal(stddev=self.STD_DEV, shape=[self.LAYER_1_SIZE]))
    layer_1_weights = tf.Variable(tf.truncated_normal(stddev=self.STD_DEV, shape=[self.INPUT_LAYER_SIZE, self.LAYER_1_SIZE]))
    layer_2_biases = tf.Variable(tf.truncated_normal(stddev=self.STD_DEV, shape=[self.LAYER_2_SIZE]))
    layer_2_weights = tf.Variable(tf.truncated_normal(stddev=self.STD_DEV, shape=[self.LAYER_1_SIZE, self.LAYER_2_SIZE]))
    layer_3_biases = tf.Variable(tf.truncated_normal(stddev=self.STD_DEV, shape=[self.LAYER_3_SIZE]))
    layer_3_weights = tf.Variable(
        tf.truncated_normal(stddev=self.STD_DEV, shape=[self.LAYER_2_SIZE, self.LAYER_3_SIZE]))

    layer_1 = tf.add(tf.matmul(input_layer, layer_1_weights), layer_1_biases)
    layer_1 = tf.nn.relu(layer_1)
    layer_2 = tf.add(tf.matmul(layer_1, layer_2_weights), layer_2_biases)
    layer_2 = tf.nn.relu(layer_2)
    layer_3 = tf.add(tf.matmul(layer_2, layer_3_weights), layer_3_biases)
    layer_3 = tf.nn.relu(layer_3)

    output_layer_weights = tf.ones(shape=[self.LAYER_2_SIZE,1])
    output_layer = tf.matmul(layer3, output_layer_weights)

    return input_layer, output_layer

我尝试将学习率0.001和GradientDescentOptimizer:

的方差最小化
self._target = tf.placeholder("float", [None])
self.cost = tf.reduce_mean(tf.square(self._target - tf.transpose(self.output_layer)))
self._train_operation = tf.train.GradientDescentOptimizer(self.LEARNING_RATE).minimize(self.cost)

作为训练的结果(100次迭代),我得到了这个目标:

[-10.0, -10.0, -10.0, +10.0, -10.0]

此输出:

[0.08981139, 0.05091755, 0.04566674, 0.06034175, 9.99115811, 0.13543463]

在培训期间,我也没有在日志文件中看到任何负面输出。所以我的网络不会从负值中学习。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

简单回答: 激活函数ReLU是:max(0,x)其中x是输入的加权和。所以功能总是积极的。您应该使用其他激活功能(如tanh