Tensorflow:何时使用tf.expand_dims?
tensorflow
5
0

Tensorflow教程包括使用tf.expand_dims向张量添加“批量尺寸”。我已经阅读了有关此功能的文档,但对我来说仍然相当神秘。有谁确切知道在什么情况下必须使用它?

我的代码如下。我的目的是根据预测仓位与实际仓位之间的距离来计算损失。 (例如,如果predictedBin = 10truthBin = 7binDistanceLoss = 3 )。

batch_size = tf.size(truthValues_placeholder)
labels = tf.expand_dims(truthValues_placeholder, 1)
predictedBin = tf.argmax(logits)
binDistanceLoss = tf.abs(tf.sub(labels, logits))

在这种情况下,我需要申请tf.expand_dimspredictedBinbinDistanceLoss ?提前致谢。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

expand_dims不会在张量中添加或减少元素,它只是通过将尺寸加1来更改形状。例如,可以将具有10个元素的向量视为10x1矩阵。

当我尝试构建ConvNet来对灰度图像进行分类时,遇到了使用expand_dims的情况。灰度图像将作为大小为[320, 320]矩阵加载。但是, tf.nn.conv2d要求输入为[batch, in_height, in_width, in_channels] ,其中我的数据中缺少in_channels维,在这种情况下,该维应为1 。因此,我使用expand_dims添加了更多维度。

就您而言,我认为您不需要expand_dims

收藏
评论

为了增加大同的答案,您可能希望同时扩展多个维度。例如,如果您要对等级1的向量执行TensorFlow的conv1d操作,则需要向它们提供等级3的数据。

可以多次执行expand_dims ,但是可能expand_dims计算图带来一些开销。您可以通过reshape获得相同的功能:

import tensorflow as tf

# having some tensor of rank 1, it could be an audio signal, a word vector...
tensor = tf.ones(100)
print(tensor.get_shape()) # => (100,)

# expand its dimensionality to fit into conv2d
tensor_expand = tf.expand_dims(tensor, 0)
tensor_expand = tf.expand_dims(tensor_expand, 0)
tensor_expand = tf.expand_dims(tensor_expand, -1)
print(tensor_expand.get_shape()) # => (1, 1, 100, 1)

# do the same in one line with reshape
tensor_reshape = tf.reshape(tensor, [1, 1, tensor.get_shape().as_list()[0],1])
print(tensor_reshape.get_shape()) # => (1, 1, 100, 1)

注意:如果出现错误TypeError: Failed to convert object of type <type 'list'> to Tensor. ,请尝试传递tf.shape(x)[0]而非此处建议的x.get_shape()[0]

希望能帮助到你!
干杯,
安德烈斯

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号