Python的Numpy数组尺寸问题

时间:2019-01-28 22:48:30

标签: python arrays numpy tensorflow dimension

我正在努力解决一个我无法上班的问题!我目前正在使用Tensorflow,并通过basic tutorials工作。

正如您在本教程中看到的那样,神经网络模型期望一个(60000, 28, 28)形状的train_images Numpy数组,因为本教程的训练集中有60,000张尺寸为28x28的图像。我正在阅读Flavia数据集,该数据集是一组叶子的图片。转换集包含1588张具有300x300px分辨率的图片。这是我的代码:

for root, dirs, files in os.walk(pathname_data):
for name in files:
    img = keras.preprocessing.image.load_img(os.path.join(root,name), color_mode="grayscale",target_size=(300,300))      #get image in 300x300 grayscale
    array = keras.preprocessing.image.img_to_array(img)                                                                 #convert to numpy array
    array = array.squeeze(axis=2)                                                                                       #convert to 300x300 2d array
    array = array / 255.0                                                                                               #preprocess data
    pathSegments = os.path.normpath(os.path.join(root,name)).split(os.sep)                                              #split path
    if pathSegments[len(pathSegments)-3] == "Train":                                                                    #assign to training- or testSet
        #TODO: how to store the 2x2 arrays ?? 
        #store in training set 
    elif pathSegments[len(pathSegments)-3] == "Test":
        #store in test set 

我的问题是,如何存储“数组”,以便最终得到一个(1588, 300, 300)形的Numpy数组,可以将其输入模型中?我已经尝试过reshape,追加和转置的实验,但到目前为止仍然无济于事:(任何帮助,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

我假设您从文件生成的每个“数组”都是(300, 300)形状

您可以预生成数组并使用计数器

all_img = np.empty((1588, 300, 300))
count = 0
for root, dirs, files in os.walk(pathname_data):
    for name in files:
        ...
        all_img[count] = array.copy()
        count += 1
        ...

或者您可以将所有图像附加到列表中,然后在以后将其更改为数组

all_img = []
for root, dirs, files in os.walk(pathname_data):
    for name in files:
        ...
        all_img.append(array)
        ...
all_img = np.array(all_img)

这两种方法都会为您提供一个(1588, 300, 300)数组,我对Tensorflow没有任何经验,但这是您所需要的形状。