我使用张量流来解决非平凡的回归问题。 输入我的网络(具有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]
在培训期间,我也没有在日志文件中看到任何负面输出。所以我的网络不会从负值中学习。有什么想法吗?
答案 0 :(得分:0)
简单回答:
激活函数ReLU是:max(0,x)
其中x
是输入的加权和。所以功能总是积极的。您应该使用其他激活功能(如tanh
)