繁体   English   中英

收到错误:ValueError:要解包的值太多(预期为 2)

[英]Getting an error: ValueError: too many values to unpack (expected 2)

我在“英特尔图像分类”上练习 CNN,我写了一个 function 来从不同的文件夹加载数据。 但是当我调用 function 时,我收到一个 ValueError,上面写着“要解压的值太多”。知道如何解决这个问题吗?

def data_load():
datasets = ['seg_train\seg_train', 'seg_test\seg_test']
size = (150, 150)
output = []
for dataset in datasets:
    directory = os.getcwd() + '/' + dataset
    images = []
    labels = []
    for folder in os.listdir(directory):
        curr_label = class_labels[folder]
        for file in os.listdir(directory + '/' + folder):
            img_path = directory + '/' + folder + '/' + file
            curr_image = cv2.imread(img_path)
            curr_image = cv2.resize(curr_image, size)
            images.append(curr_image)
            labels.append(curr_label)
            images, labels = shuffle(images, labels)

            output.append((images, labels))
return output

(X_train, y_train), (X_test, y_test) = data_load()

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-36-ec0ae2384d47> in <module>
----> 1 (X_train, y_train), (X_test, y_test) = data_load()

ValueError: too many values to unpack (expected 2)

做就是了

x,y=data_load()

然后访问 x[0],x[1] 或以您的方式

Snehal R Ghungurde 回答正确。 我想我会详细说明。

您的output.append((images, labels))正在生成一个元组列表,其中每个元组由两个列表组成。 但是,您正试图将此列表解压缩为两个单独的元组。

您当前的方法是同时加载训练和测试数据集。 我会写一个通用的 function,它执行以下操作:提供一个路径,这个 function 将读取所有图像并返回带有图像和标签的元组。

将变量作为参数(路径、大小)放置也是有益的。

def data_load(path, size=(150, 150)):
    """
    Provided with a path, this function will read 
    all images and return tuples with the images and labels
    """
    output = []
    images = []
    labels = []
    for folder in os.listdir(directory):
        curr_label = class_labels[folder]
        for file in os.listdir(directory + '/' + folder):
            img_path = directory + '/' + folder + '/' + file
            curr_image = cv2.imread(img_path)
            curr_image = cv2.resize(curr_image, size)
            images.append(curr_image)
            labels.append(curr_label)
            images, labels = shuffle(images, labels)
            output.append((images, labels))
    return output

training_set = 'seg_train\seg_train'
testing_set = 'seg_test\seg_test'

x_train, y_train = data_load(training_set)
x_test, y_test = data_load(testing_set)

引发此错误是因为data_load返回两个以上的变量,并且您试图将其分配给两个。 如果您在 return 语句之前添加行print(len(output)) ,您会看到它的长度大于 2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM