tf.nn.softmax не работает должным образом, почему? - PullRequest
0 голосов
/ 23 июня 2019

Я построил двухслойную сеть ConvLSTM кодер-декодер, и поверх этого я использую слой свертки (количество фильтров = 1). Я подаю вывод сверточного слоя в softmax, но softmax выдает все, что удивительно, потому что, когда я вручную вычисляю softmax, я получаю числа около 0,5.

Мой слой свертки:

def new_weights(shape, name):
    return tf.get_variable(name, shape, initializer=tf.truncated_normal_initializer(mean=0.0, stddev=0.05))

def conv_layer(input,              # The previous layer.
               num_input_channels, # Num. channels in prev. layer.
               filter_size,        # Width and height of each filter.
               num_filters):        # Number of filters.
    filter_shape = [filter_size, filter_size, num_input_channels, num_filters]
    w = new_weights(shape=filter_shape, name='ConvLayer_Weights')
    conv_output = tf.nn.conv2d(input=input,
                               filter=w,
                               strides=[1, 1, 1, 1],
                               padding='SAME')

    conv_output = tf.keras.layers.BatchNormalization(axis=3)(conv_output,  training=in_training_mode)


    return conv_output 

pred_1 = conv_layer(input=Conv_inputs,              
                  num_input_channels=num_filters1 + num_filters2, 
                  filter_size=1,        
                  num_filters=1) 

softmax_output = tf.nn.softmax(pred_1)

Диапазон, который я получаю для вывода свертки:

min: -0.07310162
mean: -6.542541e-09
max: 0.12119095

Диапазон, который я получаю для вывода softmax:

min: 1.0
mean: 1.0
max: 1.0

А когда я вычисляю softmax для вывода свертки:

calculated softmax for convolution output min: 0.48173272467587763
calculated softmax for convolution output mean: 0.5
calculated softmax for convolution output max: 0.5302607074731537

Итак, мой вопрос, почему Tensorflow softmax производит все?

Кстати, форма вывода свертки (10, 16, 16, 1), а ниже приведен код, который я использую для расчета softmax:

softmax = 1/(1+np.exp(-value))
...