You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python预处理函数传入不同目录参数却返回相同输出的问题

问题排查:preprocess函数传入不同目录返回相同结果

编写了一个preprocess函数,遍历CATEGORIES数组中命名的6个文件夹,将其中的图像转换为tensor后返回列表。但传入不同的目录参数调用该函数时,却得到了相同的输出。

相关代码

def preprocess(directory, img_size):
    X = []
    Y = []
    CATEGORIES = ['buildings', 'forest', 'glacier', 'mountain', 'sea', 'street']

    label = 0
    for category in CATEGORIES:
        path = os.path.join(DIRECTORY, category)
        for img in os.listdir(path):
            tensor = cv2.imread(os.path.join(path, img))
            tensor = cv2.resize(tensor, (img_size, img_size))
            X.append(tensor)
            Y.append(label)
        label +=1
    
    return X, Y

TRAIN_DIRECTORY = 'Data/seg_train'
TEST_DIRECTORY = 'Data/seg_test'

train_X, train_Y = preprocess(TRAIN_DIRECTORY, 150)
test_X, test_Y = preprocess(TEST_DIRECTORY, 150)

对比代码及输出

print("Train array size: ",len(train_Y), "\nTest array size: ",len(test_Y))

输出:

Train array size:  14034 
Test array size:  14034

问题原因

函数定义时接收的参数是小写的directory,但在拼接路径时错误使用了大写的DIRECTORY。这导致无论调用函数时传入什么目录参数,实际读取的都是DIRECTORY指向的同一个路径,两次调用自然会返回相同数量的样本。

修复方案

将路径拼接处的DIRECTORY替换为函数参数directory:

def preprocess(directory, img_size):
    X = []
    Y = []
    CATEGORIES = ['buildings', 'forest', 'glacier', 'mountain', 'sea', 'street']

    label = 0
    for category in CATEGORIES:
        # 改为使用函数传入的directory参数
        path = os.path.join(directory, category)
        for img in os.listdir(path):
            tensor = cv2.imread(os.path.join(path, img))
            tensor = cv2.resize(tensor, (img_size, img_size))
            X.append(tensor)
            Y.append(label)
        label +=1
    
    return X, Y

修改后,两次调用会分别读取TRAIN_DIRECTORY和TEST_DIRECTORY对应的路径,返回的样本数量会符合两个目录的实际文件数。

内容的提问来源于stack exchange,提问作者rasul12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:27:58