【问题标题】:manipulate a matrix tensor flow, problem with tf.data.dataset操纵矩阵张量流,tf.data.dataset 的问题
【发布时间】:2020-08-30 21:00:46
【问题描述】:

我想连接三个大小为 [1024,1024,3] 的图像以生成大小为 [3,1024,1024,3] 的批次。我用 TensorFlow 编写了这段代码,但它不起作用。它返回错误"InaccessibleTensorError: The tensor 'Tensor("truediv:0", shape=(1024, 1024, 3), dtype=float32)' cannot be accessed here: it is defined in another function or code block. Use return values, explicit Python locals or TensorFlow collections to access it."

def decode_img(filename):
    image = tf.ones((3,1024,1024,3),dtype=tf.dtypes.float32)
    cnt=0
    slices = []
    for fi in filename:
      bits = tf.io.read_file(fi)
      img = tf.image.decode_jpeg(bits, channels=3)
      img = tf.image.resize(img, (1024,1024))
      slices.append(tf.cast(img, tf.float32) / 255.0)
      cnt +=1

    image = tf.stack(slices)
    return image

#-----------------------
filenames = ['img1.png', 'img2.png', 'img3.png']
dataset = tf.data.Dataset.from_tensor_slices(filenames)
dataset = dataset.map(decode_img, num_parallel_calls=AUTO)

【问题讨论】:

标签: tensorflow


【解决方案1】:

一般来说,tensorflow 不支持项赋值。相反,生成您想要的所有img 层,然后使用tf.stack()tf.concatenate

filename = [img1.png, img2.png, img3.png]
cnt=0
slices = []
for fi in filename:
  bits = tf.io.read_file(fi)
  img = tf.image.decode_jpeg(bits, channels=3)
  img = tf.image.resize(img, (1024,1024))
  slices.append(tf.cast(img, tf.float32) / 255.0)
  cnt +=1

image = tf.stack(slices)

【讨论】:

  • 这样会返回错误“InaccessibleTensorError: The tensor 'Tensor("truediv:0", shape=(1024, 1024, 3), dtype=float32)' cannot be access here: it在另一个函数或代码块中定义。使用返回值、显式 Python 本地变量或 TensorFlow 集合来访问它"
  • 其实,我使用下面的代码,它返回错误“image = tf.stack(slices)” def decode_img(filename): image = tf.ones((3,1024, 1024,3),dtype=tf.dtypes.float32) cnt=0 slices = [] for fi in filename: bits = tf.io.read_file(fi) img = tf.image.decode_jpeg(bits, channels=3) img = tf.image.resize(img, (1024,1024)) slices.append(tf.cast(img, tf.float32) / 255.0) cnt +=1 image = tf.stack(slices) 返回图像文件名 = [img1 .png, img2.png, img3.png] dataset = tf.data.Dataset.from_tensor_slices(filenames) dataset = dataset.map(decode_img)
  • 以代码格式发布问题,这很难阅读
  • 看,在您的代码中,您首先定义图像,然后尝试为图像分配一个新值。 tf. 中一般不允许赋值。每次想要组合几个变量或修改它们时,都需要将结果赋给一个new变量。这是基于 tensorflow 定义其函数图以实现高效反向传播的方式,我相信
  • 对不起,那是我的一段代码,我编辑了问题并把我所有的代码都放了
猜你喜欢
  • 2016-06-16
  • 2018-05-24
  • 1970-01-01
  • 2023-03-20
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多