首页 > 解决方案 > tf.nn.softmax 没有按预期运行,为什么?

问题描述

我已经构建了一个两层编码器-解码器 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))

标签: tensorflowconv-neural-networksoftmax

解决方案


推荐阅读