形状等于()

我正在阅读TensorFlow MNIST official model中的测试 . 49号线有:

self.assertEqual(loss.shape, ())

以及导致它的选定行是:

BATCH_SIZE = 100

def dummy_input_fn():
  image = tf.random_uniform([BATCH_SIZE, 784])
  labels = tf.random_uniform([BATCH_SIZE, 1], maxval=9, dtype=tf.int32)
  return image, labels

def make_estimator():
  return tf.estimator.Estimator(
      model_fn=mnist.model_fn, params={
          'data_format': 'channels_last'
      })


class Tests(tf.test.TestCase):
  """Run tests for MNIST model."""

  def test_mnist(self):
    classifier = make_estimator()
    classifier.train(input_fn=dummy_input_fn, steps=2)

    loss = eval_results['loss']
    self.assertEqual(loss.shape, ())

TensorFlow documentation表明形状是一组数字:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
tf.shape(t)  # [2, 2, 3]

这两个打印对象形状的语句没有多大帮助:

print(loss.shape)
# prints `()`
print(tf.shape(loss))
# prints `Tensor("Shape:0", shape=(0,), dtype=int32)`

() 形状是什么意思?

回答(1)

2 years ago

您的 loss 是NumPy对象而不是TensorFlow对象:

print(type(loss))
# prints <class 'numpy.float32'>
print(loss)
# prints 2.2745261

我假设NumPy中的 () 形状意味着标量,但我找不到它的文档 . 您可以使用以下命令查看对象属性列表(字段和方法):

print(dir(loss))
# prints `['T', '__abs__', '__add__', '__and__',
# ... 'shape', 'size', 'sort', ... ]`