我有这个代码:
(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/