【问题标题】:How to load numpy array in a tensorflow dataset如何在张量流数据集中加载 numpy 数组
【发布时间】:2020-03-20 01:18:21
【问题描述】:

我正在尝试从 numpy 数组开始在 tensorflow 1.14 中创建一个 Dataset 对象(我有一些我无法为这个特定项目更改的遗留代码),但每次我尝试时,我都会在我的图表上复制所有内容并用于因此,当我创建一个事件日志文件时,它会很大(在这种情况下为 719 MB)。

最初我尝试使用此函数“tf.data.Dataset.from_tensor_slices()”,但它不起作用,然后我读到这是一个常见问题,有人建议我尝试使用生成器,因此我尝试了以下代码,但我又得到了一个巨大的事件文件(又是 719 MB)

def fetch_batch(x, y, batch):
    i = 0
    while i < batch:
        yield (x[i,:,:,:], y[i])
        i +=1

train, test = tf.keras.datasets.fashion_mnist.load_data()
images, labels = train  
images = images/255

training_dataset = tf.data.Dataset.from_generator(fetch_batch, 
    args=[images, np.int32(labels), batch_size], output_types=(tf.float32, tf.int32), 
    output_shapes=(tf.TensorShape(features_shape), tf.TensorShape(labels_shape)))

file_writer = tf.summary.FileWriter("/content", graph=tf.get_default_graph())

我知道在这种情况下我可以使用 tensorflow_datasets API,它会更容易,但这是一个更普遍的问题,它通常涉及如何创建数据集,而不仅仅是使用 mnist 。 你能向我解释我做错了什么吗?谢谢你

【问题讨论】:

  • 您能否更详细地解释一下是什么导致您的事件文件如此之大?它是在创建重复的子图吗?
  • 您能解释一下from_tensor_slices 的问题吗?

标签: python tensorflow tensorflow-datasets


【解决方案1】:

我猜这是因为您在from_generator 中使用了args。这肯定会将提供的args 放入图中。

您可以做的是定义一个函数,该函数将返回一个生成器,该生成器将遍历您的集合,类似于(尚未测试):

def data_generator(images, labels):
  def fetch_examples():
    i = 0
    while True:
      example = (images[i], labels[i])
      i += 1
      i %= len(labels)
      yield example
  return fetch_examples

这将在您的示例中给出:

train, test = tf.keras.datasets.fashion_mnist.load_data()
images, labels = train  
images = images/255

training_dataset = tf.data.Dataset.from_generator(data_generator(images, labels), output_types=(tf.float32, tf.int32), 
    output_shapes=(tf.TensorShape(features_shape), tf.TensorShape(labels_shape))).batch(batch_size)

file_writer = tf.summary.FileWriter("/content", graph=tf.get_default_graph())

请注意,我将 fetch_batch 更改为 fetch_examples,因为您可能希望使用数据集实用程序 (.batch) 进行批处理。

【讨论】:

  • 是的,我认为你是对的。我现在正要发布我是如何解决问题的(实际上我在 github 上找到了一个建议这个的人),它对我有用 github.com/tensorflow/tensorflow/issues/14053 谢谢!
  • 酷,如果此解决方案有效,请接受它。另外,下次针对您的问题,请尝试提供一个可以在复制粘贴后工作的代码并包含版本号(通常对于 tensorflow,API 在 1.14 和 2.0 之间变化很大)。
  • 完成了,但还有一件事:“您将无法使用多处理”是什么意思?有没有更有效的方法?
  • 其实忘了我说的,现阶段不需要多处理(只是获取数据),所以我完全糊涂了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2020-12-21
  • 1970-01-01
  • 2018-06-27
相关资源
最近更新 更多