首页 > 解决方案 > 如何将一组图像转换为 numpy 数组?

问题描述

我正在构建我的第一个神经网络,以“使用 Python 进行深度学习 - Francois Chollet”一书为例,我立即找到了我的第一个问题。当作者导入 MNIST 数据集时,他还打印了形状,得到它是一维张量。我正在尝试导入一个包含所有球童图像的文件夹,以检查 NN 是否正确对它们进行编目。问题是我无法从所有这些图像中获得一维张量。我尝试将它们中的每一个都转换为numpy.asarray(my_image). 我也尝试转换整个列表,但结果它变成了一个元组......有什么提示吗?

train_label = 'Caddies'
train_images = list()

for filename in listdir('/content/drive/MyDrive/Data set/Caddies/'):
    img_data = image.imread('/content/drive/MyDrive/Data set/Caddies/' +\
                       filename)
    img_data = np.asarray(img_data)
    #print(str(img_data.dtype) + str(img_data.shape))
    train_images.append(img_data)

    print('> loaded %s images' % (len(train_images)))

    train_images = np.array(train_images)

    print(train_images.shape())

标签: pythonnumpytensorflow

解决方案


如果您想将图像输入神经网络,我建议您不要使用 for 循环将所有图像加载到内存中。相反,您可以使用此功能:

import tensorflow as tf
import os
os.chdir('pictures')

files = tf.data.Dataset.list_files('*jpg')

def load_images(path):
    image = tf.io.read_file(path)
    image = tf.io.decode_jpeg(image)
    image = tf.image.convert_image_dtype(image, tf.float32) # optional
    image = tf.image.resize(image, (224, 224))              # optional
    return image 

ds = files.map(load_images).batch(1)

next(iter(ds)).shape
(1, 224, 224, 3)

推荐阅读