Tensorflow输出层应该只具有特定范围
问题描述:
之间的值,我正在使用tensorflow并具有以下CNN(以下代码)。我的输入图层是72x72图像,由于有两个maxpool图层,它会输出一个18x18矩阵。Tensorflow输出层应该只具有特定范围
现在我的问题: 是否可以为输出矩阵(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
答
假设在你的地面实况表中的值代表一个概率distribution.You可以使用softmax_cross_entropy_with_logits为你的损失的功能,如在此tutorial解释官方文件。它将基本上从最后一层获得输出,应用softmax来计算概率(从而降低0到1范围内的值),然后根据实际值计算损失。但是,如果地面真值表中的值不代表实际的概率分布,那么您可以尝试对输出值进行归一化,或者在输出层中应用函数sigmoid
。