tensorflow - 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))
解决方案
推荐阅读
- java - JEditorPane 中带有超链接的本地 HTML 将被方法拦截
- select - 我的非阻塞 UDP 连接 select() 函数总是返回 0
- asp.net-mvc - Web API 令牌认证与自定义令牌认证
- python - Selenium cant click element
- css - 在产品编辑标签云上隐藏某些标签
- macos - Bootcamp OSX Mojave - 无法打开 Windows 分区上的任何文件 - dot_clean 错误
- android - 如何将 ToyVpn 导入到 android studio 并构建
- javascript - 如何使用 JavaScript 中的特定关键字验证格式良好的 XML(大于/小于)标签?
- ios - FCM 静默通知仅有效一次 (Swift)
- node.js - 如何根据输入字段/文本从 mongoDB 查询/获取数据