Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 为什么像张量的形状是(?,?)_Tensorflow - Fatal编程技术网

Tensorflow 为什么像张量的形状是(?,?)

Tensorflow 为什么像张量的形状是(?,?),tensorflow,Tensorflow,这是我的密码 img_path = tf.read_file(testqueue[0]) my_img = tf.image.decode_jpeg(img_path) sess.run(my_img) print my_img.get_shape() 结果呢, (?, ?, ?) 为什么我会得到这个结果?来回答这个问题并提供一些细节 静态信息 tensor\u name.shape返回图形编译时可用的形状信息。它依赖于张量性质 是注册的。在创建图形期间,TensorFlow在推断上下文下运

这是我的密码

img_path = tf.read_file(testqueue[0])
my_img = tf.image.decode_jpeg(img_path)
sess.run(my_img)
print my_img.get_shape()
结果呢,

(?, ?, ?)

为什么我会得到这个结果?

来回答这个问题并提供一些细节

静态信息
tensor\u name.shape
返回图形编译时可用的形状信息。它依赖于张量性质

是注册的。在创建图形期间,TensorFlow在
推断上下文下运行形状传播。给定从输入张量已知的形状属性,每个操作都会提示其输出张量的外观

例如,“rgb2gray”操作只需复制输入张量的形状(例如[b',h',w',c'],并将输出设置为[b',h',w',1]。它不需要知道b',h',w'的确切值,因为它只需复制这些先前的值

从具体情况看,此操作显然可以处理
频道
属性:

//读取属性“channels from”tf.image.decode\u jpeg(…,channels)”
TF_返回_IF_错误(c->GetAttr(“通道”和通道));
// ....
//设置张量信息“my_img.get_shape()”将具有
c->set_输出(0,c->MakeShape({推理上下文::Kunnowndim,
推论上下文::kunnowndim,channels_dim});
前两个维度设置为
推断上下文::kunnowndim
,因为操作只知道有一个高度和宽度,但具体的值可以变化。它可以最好地猜测通道轴的外观。如果指定属性
tf.decode\u jpeg(…,channels=3)
,它可以并将设置最后一个维度

当if分支
channels==0
处于活动状态时,这将导致形成一个形状(?,?)

运行时信息 另一方面,定义结束。这检查实际的张量内容:

//从值本身获取实际的张量形状
张量形;
OP_需要_OK(ctx,shape_OP_helpers::GetRegularOrVariantShape(ctx,0,&shape));
const int rank=shape.dims();
//写出“tf.shape(…)”的张量结果
对于(int i=0;i
这就像
tf.shape
对其先前的操作所说的:

你可以告诉我你几分钟前得出的任何结论。我不在乎你在这一点上有多聪明,也不在乎你对形状的猜测付出了多少努力。看,我只是看看混凝土张量,它现在有了内容,我完成了

后果 这有一些重要的后果:

  • tf.shape
    是张量,而
    tensorname.shape
    不是
  • 有些属性需要整数。因此无法使用张量
    tf.shape
  • 图形优化(如XLA)只能依赖于
    tensorname.shape
  • 如果您知道图像的形状(数据库中只有128x128x3个图像),则应设置形状,例如,使用
    tf.reformate(img,[128,128,3]

您可能还对实现了哪一个感兴趣。

尝试
sess.run(my\u img).shape
或等效值。我相信
我的img
只是一个符号,直到您使用
sess.run运行它。输出应该有一个形状。谢谢!没错。如何创建张量来表示sess之前我的img的形状。run?使用
tf.shape()
为什么要在sess之前使用该形状?运行
?通常,您只需将其作为一个符号,以便算法的其余部分可以自动调整自身以适应未来图像的新形状。是的,tf.shape()很好。谢谢你们!我想要这个形状是因为我想在运行会话之前构建图形,并且会有一些基于形状值的操作。