如何将从TFRecords读取的值用作tf.set_shape的参数?

时间:2016-03-03 13:44:44

标签: tensorflow

我想做这样的事情:

link: function ($scope, element, attrs, ngModel) {
            ngModel.$validators.maxDate = function (value, max) {                
                if (!!value && (value.length ==10 ) )
                {
                    if ( new Date(max) > new Date(attrs.maxDate))
                    {
                        console.log("Date is Higher");
                     }
                }                  
            };
        }

但是,我收到以下错误:

height = tf.cast(features['height'],tf.int32)
width = tf.cast(features['width'],tf.int32)
image.set_shape(tf.pack([height,width,3]))

有人能指出我正确的方向吗?谢谢。

1 个答案:

答案 0 :(得分:4)

您无法将tf.Tensor传递给Tensor.set_shape()。使用从TFRecord读取的值作为set_shape()的参数的唯一方法是对其进行评估(例如,使用sess.run())并将生成的NumPy数组传递给set_shape()

这种限制的原因有点微妙。 Tensor.set_shape()用于对特定Tensor(即符号值)可以容纳的所有值的形状进行断言。特别是,当程序员比库可以推断出更多地了解该数据时,它用于填充形状推断留下的空白。但是,这些断言只能使用图形构建时可用的信息。动态变化的形状使用特殊值Dimension(None)(对于未知维度)和TensorShape(None)(对于未知等级的张量)来表示。

整个TensorFlow的意图是大多数操作应该能够在没有静态已知形状的情况下工作,因此可以使用动态变化形状的张量。但是,image processing ops used for cropping/padding中有一些例外:

这三个操作要求形状是静态的。但是,它们只是围绕tf.pad()tf.slice()的便利包装器,它们利用静态形状来避免在每个步骤中进行不必要的计算。我们一直在慢慢地从图像操作中删除这种依赖关系,但随意提出一个GitHub问题。与此同时,您可以直接使用较低级别的操作来解决动态张量缺乏形状推断问题。