Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow:何时使用tf.expand_dims?_Tensorflow - Fatal编程技术网

Tensorflow:何时使用tf.expand_dims?

Tensorflow:何时使用tf.expand_dims?,tensorflow,Tensorflow,Tensorflow教程包括使用tf.expand_dims向tensor添加“批量维度”。我已经阅读了这个函数的文档,但它对我来说仍然是相当神秘的。有人确切地知道在什么情况下必须使用这个吗 我的代码如下。我的目的是根据预测和实际垃圾箱之间的距离来计算损失。(例如,如果predictedBin=10和truthBin=7则bindinstanceloss=3) 在这种情况下,是否需要将tf.expand_dims应用到predictedBin和bindinstanceloss?提前感谢。扩展di

Tensorflow教程包括使用
tf.expand_dims
向tensor添加“批量维度”。我已经阅读了这个函数的文档,但它对我来说仍然是相当神秘的。有人确切地知道在什么情况下必须使用这个吗

我的代码如下。我的目的是根据预测和实际垃圾箱之间的距离来计算损失。(例如,如果
predictedBin=10
truthBin=7
bindinstanceloss=3


在这种情况下,是否需要将
tf.expand_dims
应用到
predictedBin
bindinstanceloss
?提前感谢。

扩展dims
不会在张量中添加或减少元素,它只是通过向维度添加
1
来更改形状。例如,包含10个元素的向量可以被视为10x1矩阵

我在使用expand_dims时遇到的情况是,我试图构建一个ConvNet来对灰度图像进行分类。灰度图像将作为大小矩阵加载
[320320]
。但是,
tf.nn.conv2d
要求输入为
[批次,在\u高度,在\u宽度,在\u通道中]
,其中我的数据中缺少
在本例中应为
1
。因此,我使用了
expand_dims
来添加一个维度


在你的情况下,我不认为你需要
扩展_dims

来添加到大同的答案中,你可能需要同时扩展多个维度。例如,如果要对秩1的向量执行TensorFlow的
conv1d
操作,则需要为它们提供秩3

多次执行
expand_dims
是可读的,但可能会给计算图带来一些开销。通过
重塑
,您可以在一行程序中获得相同的功能:

将tensorflow导入为tf
#有一些秩1的张量,它可能是音频信号,一个词向量。。。
张量=tf.one(100)
打印(张量.get_-shape())#=>(100,)
#扩展其维度以适合conv2d
张量扩展=tf.expand\u dims(张量,0)
张量扩展=tf.expand\u dims(张量扩展,0)
张量扩展=tf.expand\u dims(张量扩展,-1)
打印(张量展开。获取形状())#=>(1,1100,1)
#使用“重塑”在一行中执行相同操作
tensor_整形=tf.整形(tensor[1,1,tensor.get_shape().as_list()[0,1]))
打印(张量重塑。获取形状())#=>(1,1100,1)
注意:如果出现错误
TypeError:无法将类型的对象转换为张量。
,请尝试传递
tf.shape(x)[0]
,而不是按照建议传递
x.get\u shape()[0]

希望有帮助
干杯,

Andres

您是否运行过任何测试,以查看执行一次
重塑
是否比执行两次或三次
展开
更快?不太可能!我查看了一下,但无法理解gen_array_ops在哪里,所以我不能说太多。。。我肯定有兴趣看一些测试,我在这个答案中真正喜欢的是能够使用张量定义的形状,而不仅仅是一个整数。这确实解决了我的问题,我需要在tf.reforme中指定一个维度为None,另一个维度由当前输入(批量大小不同)加上已经预定义的维度指定。重塑中的tf.shape(x)[0]挽救了这一天:)非常感谢(即使我没有问这个问题)!很高兴它有帮助!是的,声明式语法有它的怪癖:)。如果你想有一个更迫切,直接的味道,但你确实需要坚持的TF你可能想看看最近添加的。还有其他选择,尤其是PyTorch。我最近做过,如果你愿意,请随意看一看并提供反馈。干杯
batch_size = tf.size(truthValues_placeholder)
labels = tf.expand_dims(truthValues_placeholder, 1)
predictedBin = tf.argmax(logits)
binDistanceLoss = tf.abs(tf.sub(labels, logits))