tf.nn.softmax 与slim.sofmax 之间的不同

前言:

在使用densenet的时候,发现原网络结构最后的输出的net是[batch_size,1,1,num_class]四个维度,同时用slim.softmax输出predictions。如下:

net = slim.conv2d(net, num_classes, 1,
                        biases_initializer=tf.zeros_initializer(),
                        scope='logits')
if num_classes is not None:
  end_points['predictions'] = slim.softmax(net, scope='predictions')

可是我想用 tf.nn.sparse_softmax_cross_entropy_with_logits 计算交叉熵,于是在net之后net =  tf.squeeze(net) 对net进行压缩。可是运行的时候出现了维度不对的错误。

左思右想觉得代码逻辑方面没有错误呀,可是为什么还会报错呢?根据报错的内容,是上面这一句提示的维度不对。于是试着注释掉以下两句,就能正常出现结果了。:

if num_classes is not None: end_points['predictions'] = slim.softmax(net, scope='predictions')

仔细想了一下。应该是我前面用了squeeze,导致了出现维度报错。可是压缩成一维后用softmax应该是可以的。于是我试着取消注释,同时将slim.softmax替换成tf.nn.softmax。果然,代码一样能够运行。这说明,tf.nn.softmax与slim.softmax的用处还是有所不同的。

分析结果:

1.tf.nn.softmax需要输入的维度可以是一维,而slim.softmax需要最少两个维度;

2.slim.softmax 可以使用命名空间scope而tf.nn.sotfmax不能。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值