代码之家  ›  专栏  ›  技术社区  ›  gogasca

张量流

  •  0
  • gogasca  · 技术社区  · 5 年前

    我有以下图像:

    import tensorflow as tf
    tf.enable_eager_execution()
    tf.executing_eagerly()    
    
    img = Image.open('image.jpg')
    try:
        data = np.asarray(img, dtype='uint8' )
    except SystemError:
        data = np.asarray(img.getdata(), dtype='uint8' )
    

    tf.shape(data)
    <tf.Tensor: id=2, shape=(3,), dtype=int32, numpy=array([263, 320,   3], dtype=int32)>
    
    image = tf.expand_dims(data, 0)
    tf.shape(image)
    <tf.Tensor: id=16, shape=(4,), dtype=int32, numpy=array([  1, 263, 320,   3], dtype=int32)>
    
     tf.squeeze(image, squeeze_dims=[0])
    <tf.Tensor: id=22, shape=(263, 320, 3), dtype=uint8, numpy=...>
    

    如何更换最后一个 tf.squeeze 使用类似的命令(例如: tf.reshape )?

    2 回复  |  直到 5 年前
        1
  •  2
  •   xdurch0    5 年前

    你可以用 image[0] 选择图像的第一行。如果 image 是形状 [1, w, h, c] 这将返回一个 [w, h, c] 张量。虽然我不明白问题出在哪里 tf.squeeze squeeze(image, axis=0) 执行相同的操作,并防止其他轴(例如通道轴)的尺寸也为1的情况。

        2
  •  2
  •   javidcf    5 年前

    另一种选择是,如果您知道第一个维度的大小为1,则可以执行以下操作:

    tf.reshape(image, tf.shape(image)[1:])
    

    但是,正如已经说过的那样, tf.squeeze