【问题标题】:Getting an error: ValueError: too many values to unpack (expected 2)收到错误:ValueError:要解包的值太多(预期为 2)
【发布时间】:2019-11-19 07:14:29
【问题描述】:

我正在练习 CNN 的“英特尔图像分类”,我编写了一个函数来加载来自不同文件夹的数据。但是当我调用该函数时,我得到一个 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)

【问题讨论】:

    标签: python conv-neural-network


    【解决方案1】:

    只是做

    x,y=data_load()

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

    【讨论】:

      【解决方案2】:

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

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

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

      将变量作为参数(路径、大小)也很有指导意义。

      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)
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-07-31
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          • 2016-05-24
          • 1970-01-01
          • 2019-03-27
          相关资源
          最近更新 更多