2016-12-01 7 views
0

Я работаю с тензорным потоком и имею следующий CNN (код ниже). Мой слой ввода представляет собой изображение 72x72 и выводит матрицу 18x18 из-за двух максимальных уровней.Выходной уровень тензометра должен иметь только значения между определенным диапазоном

сейчас мой вопрос: можно определить диапазон значений в выходной матрице (18x18)? так что значения находятся только между [0,1]? потому что на самом деле матрица вывода должна представлять карту плотности. Поэтому мне не нужны значения выше 1.

Моя «метка заземления» представляет собой матрицу 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 

ответ

0

Предполагая, что значения в вашей таблице истинности земли представляют собой вероятность distribution.You может использовать softmax_cross_entropy_with_logits как ваши функции потерь, как описано в этом tutorial в официальная документация. Он по существу берет выход из конечного слоя, применяет softmax для вычисления вероятностей (таким образом, уменьшая значения в диапазоне от 0 до 1), а затем вычисляя потери по фактическим значениям.

Однако, если значения в таблице истинности земли не представляют собой фактическое распределение вероятности, то вы можете либо попытаться нормализовать выходные значения, либо применить функцию sigmoid в выходном слое.