【问题标题】:Tensorflow output layer should only have values between a specific rangeTensorflow 输出层应该只具有特定范围之间的值
【发布时间】:2016-12-01 15:49:26
【问题描述】:

我正在使用 tensorflow 并拥有以下 CNN(代码如下)。我的输入层是一个 72x72 的图像,由于有两个 maxpool 层,它输出一个 18x18 的矩阵。

现在我的问题: 是否可以为输出矩阵(18x18)中的值定义一个范围?使值仅在 [0,1] 之间?因为实际上输出矩阵应该代表一个密度图。所以我不需要高于 1 的值。

我的“groundtruth 标签”是一个 18x18 矩阵,其值仅在 [0,1] 之间。 因为我的网络还没有经过训练,所以损失非常高,因为输出矩阵中的值非常高,例如。 2379922。如果我可以提供输出值的范围,那么一开始的损失不会那么高。

感谢您的帮助:-)

weights = {'W_conv1': tf.Variable(tf.random_normal([7, 7, 1, 32])),
           'W_conv2': tf.Variable(tf.random_normal([7, 7, 32, 32])),
           'W_conv3': tf.Variable(tf.random_normal([5, 5, 32, 64])),
           'W_conv4': tf.Variable(tf.random_normal([1, 1, 64, 1000])),
           'W_conv5': tf.Variable(tf.random_normal([1, 1, 1000, 400])),
           'W_conv6': tf.Variable(tf.random_normal([1, 1, 400, 1]))}

biases = {'b_conv1': tf.Variable(tf.random_normal([32])),
          'b_conv2': tf.Variable(tf.random_normal([32])),
          'b_conv3': tf.Variable(tf.random_normal([64])),
          'b_conv4': tf.Variable(tf.random_normal([1000])),
          'b_conv5': tf.Variable(tf.random_normal([400])),
          'b_conv6': tf.Variable(tf.random_normal([1]))}

#x = tf.reshape(x, shape=[-1, 28, 28, 1])
#x = tf.reshape(x, shape=[-1, 72, 72, 1])

conv1 = tf.nn.relu(conv2d(x, weights['W_conv1']) + biases['b_conv1'])
conv1 = maxpool2d(conv1)

conv2 = tf.nn.relu(conv2d(conv1, weights['W_conv2']) + biases['b_conv2'])
conv2 = maxpool2d(conv2)

conv3 = tf.nn.relu(conv2d(conv2, weights['W_conv3']) + biases['b_conv3'])

conv4 = tf.nn.relu(conv2d(conv3, weights['W_conv4']) + biases['b_conv4'])

conv5 = tf.nn.relu(conv2d(conv4, weights['W_conv5']) + biases['b_conv5'])

conv6 = conv2d(conv5, weights['W_conv6']) + biases['b_conv6']

return conv6

【问题讨论】:

    标签: python range tensorflow output layer


    【解决方案1】:

    假设你的真实值表中的值代表一个概率分布。你可以使用softmax_cross_entropy_with_logits作为你的损失函数,正如官方文档中的tutorial中所解释的那样。它基本上会从最后一层获取输出,应用 softmax 来计算概率(从而降低 0 到 1 范围内的值),然后根据实际值计算损失。

    但是,如果地面真值表中的值不代表实际的概率分布,那么您可以尝试对输出值进行归一化,或者在输出层中应用 sigmoid 函数。

    【讨论】:

    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多