【问题标题】:How to get 'static' shape using 'tf.shape()'?如何使用“tf.shape()”获得“静态”形状?
【发布时间】:2019-02-13 17:44:52
【问题描述】:

我只是想使用命令 'tf.shape()' 获得张量的静态形状。我注意到我们可以使用'x.get_shape'来获得静态形状,但是,在我的代码中,对于训练,形状是静态的,对于评估,张量的形状是动态的'无'-所以我不确定如果我也可以通过使用 'tf.shape()' 来获得静态形状。

'deconv4.outputs' 的形状是 [16,256,256,3],但是,当我使用 'tf.shape(deconv4.outputs)[0]' 时,结果是:'Tensor("FRUC_DVF_g/strided_slice_2:0 ", shape=(), dtype=int32, device=/device:GPU:0)',而不是 '16'。

你能帮我解决这个问题吗?

提前致谢!

我得到了名为“deconv4.outputs”的模型的输出,其形状为 [16,256,256,3]。我想使用 'tf.shape()' 命令获取 'deconv4.outputs' 的第一维。

flow = tf.slice(deconv4.outputs, [0,0,0,0], [tf.shape(deconv4.outputs)[0], 256, 256, 2])

预期结果是 'tf.shape(deconv4.outputs)[0]' 返回 '16'。

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    tf.shape(),在具有适当输入的会话下运行时应返回 16。

    任何动态的,如果你在输入中指定 None,而不在会话下运行它,你会得到 ()。

    如果可能,请尝试使用 eager_execution_enabled 您的代码。

    【讨论】:

    • 您好,阿米特,感谢您的帮助。我在我的代码中使用了“sess.run”,但是,我收到错误消息:“tensorflow.python.framework.errors_impl.InvalidArgumentError:无法为操作“FRUC_DVF_g/deconv4/b_conv2d”分配设备:操作是明确的分配给 /device:GPU:0 但可用设备是 [ /job:localhost/replica:0/task:0/device:CPU:0 ]。确保设备规范引用了有效的设备。你对此有什么想法吗?
    • 是的,你的机器有 GPU 吗?现在好像 tensorflow 只检测 CPU,但是如果你在会话中使用 tf.device('tf.train.replica_device()') 明确声明使用 GPU,它会抛出一个错误. tensorflow 只能检测从 replica_device 返回的 CPU。另外,安装的 tensorflow 是 tensorflow-gpu 对吗?使用适当的 CUDA 版本和 cuDNN?
    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多