簡體   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