python - 将tensorflow 2.0 BatchDataset转换为numpy数组

标签 python tensorflow casting

我有这个代码:

(train_images, _), (test_images, _) = tf.keras.datasets.mnist.load_data()

train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(TRAIN_BUF).batch(BATCH_SIZE)
test_dataset = tf.data.Dataset.from_tensor_slices(test_images).shuffle(TRAIN_BUF).batch(BATCH_SIZE)

print(train_dataset, type(train_dataset), test_dataset, type(test_dataset))

我想将这两个 BatchDataset 变量转换为 numpy 数组,我可以轻松做到吗?我正在使用 TF 2.0,但我刚刚找到了使用 TF 1.0

转换 tf.data 的代码

最佳答案

对数据集进行批处理后,最后一批的形状可能与其余批处理的形状不同。例如,如果您的数据集中共有 100 个元素,并且批处理的大小为 6,则最后一批的大小仅为 4。(100 = 6 * 16 + 4)。

因此,在这种情况下,您将无法直接将数据集转换为 numpy。因此,您必须使用 drop_remainder批处理方法中的参数为 True。如果最后一批尺寸不正确,它将丢弃它。

之后,我附上了有关如何将数据集转换为 Numpy 的代码。

import tensorflow as tf
import numpy as np

(train_images, _), (test_images, _) = tf.keras.datasets.mnist.load_data()

TRAIN_BUF=1000
BATCH_SIZE=64

train_dataset = tf.data.Dataset.from_tensor_slices(train_images).
                          shuffle(TRAIN_BUF).batch(BATCH_SIZE, drop_remainder=True)
test_dataset = tf.data.Dataset.from_tensor_slices(test_images).
                          shuffle(TRAIN_BUF).batch(BATCH_SIZE, drop_remainder=True)

# print(train_dataset, type(train_dataset), test_dataset, type(test_dataset))

train_np = np.stack(list(train_dataset))
test_np = np.stack(list(test_dataset))
print(type(train_np), train_np.shape)
print(type(test_np), test_np.shape)

输出:

<class 'numpy.ndarray'> (937, 64, 28, 28)
<class 'numpy.ndarray'> (156, 64, 28, 28)

关于python - 将tensorflow 2.0 BatchDataset转换为numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791851/

相关文章:

tensorflow - tensorflow tf.contrib.image.rotate 是如何工作的?

c++ - 编译器切换到禁用 c 风格转换中的 const_cast 语义?

在每次迭代中创建新列表并清理数据的多个 for 循环的 Pythonic 方式?

python - 如何使用 python 加密/解密任意长度的二进制文件?

python - 在 Python for 循环中比较列表中的元素

java - 尝试显示数据库数据时转换集合时出现问题

c++ - 从我的类(class)转换为 int

Python - 不同的打印方式?

python - Keras:收集张量改变批量维度

tensorflow - 如何在 tf.get_variable 中使用正则化参数?