例外:尝试提交时出现数据必须是一维的

数据挖掘 机器学习 神经网络 美国有线电视新闻网 熊猫 图像分类
2022-02-26 10:45:07

我正在做图像分类,直到现在我已经建立了我的网络并对其进行了评估。剩下要做的就是提交,所以我有一个盲测集,其中包含没有标签的图像,并且使用我创建的模型,我必须对这个盲测集进行预测。

我有 4 个班级:HAZE、RAINY、SUNNY、SNOWY。我的代码如下:

blind_testSet = '/content/drive/My Drive/Colab Notebooks/submission'

test_datagen_blind = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rescale = 1. / 255
   )


test_generator_blind = test_datagen.flow_from_directory(
    directory=blind_testSet,
    target_size=(256, 256),
    color_mode="rgb",
    batch_size=batch_size,
    class_mode="categorical",
    shuffle=False
)

preds =transfer_model.predict_generator(test_generator_blind,verbose=1,steps=val_steps)


import pandas as pd
import numpy as np

predicted_class_indices=np.argmax(preds,axis=1)
labels = (train_generator.class_indices)
labels = dict((v,k) for k,v in labels.items())
print(labels)
predictions = [labels[k] for k in predicted_class_indices]
filenames=test_generator_blind.filenames
results=pd.DataFrame({"image ID":filenames,
                  "Predictions":preds})
results.to_csv("submission.csv",index=False)

问题是我收到错误:

    Exception                                 Traceback (most recent call last)
<ipython-input-22-37b4cd72c225> in <module>()
      9 filenames=test_generator_blind.filenames
     10 results=pd.DataFrame({"image ID":filenames,
---> 11                       "Predictions":preds})
     12 results.to_csv("submission.csv",index=False)

4 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/internals/construction.py in 
sanitize_array(data, index, dtype, copy, raise_cast_failure)
    727     elif subarr.ndim > 1:
    728         if isinstance(data, np.ndarray):
--> 729             raise Exception("Data must be 1-dimensional")
    730         else:
    731             subarr = com.asarray_tuplesafe(data, dtype=dtype)

Exception: Data must be 1-dimensional

有人能帮我吗?谢谢。

[编辑]我也尝试过:

    preds =transfer_model.predict_generator(test_generator_blind,verbose=1,steps=val_steps).reshape(-1,1)

但它不起作用,我得到同样的错误。

1个回答

Python 告诉您,您为“预测”列提供的数据不是一维的(即它不是平面列表)。而且确实preds不是一维数组,你要给出的是你在predictions.

所以代替这个:

results=pd.DataFrame({"image ID":filenames,
                  "Predictions":preds})

你可能想要:

results=pd.DataFrame({"image ID":filenames,
                  "Predictions":predictions})