keras 如何将Pandas列定义为列表

6l7fqoea  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(128)

我正在使用Keras图像数据生成器进行数据增强,以及其中的flow_from_dataframe函数。https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator#flow_from_dataframe

# Create new dataframes for train and test

df_train = pd.DataFrame()
df_train['image'], df_train['labels'] = X_train, y_train

df_test = pd.DataFrame()
df_test['image'], df_test['labels'] = X_test, y_test

这是一个 Dataframe 的外观:

image   labels
4227  /Users/m/Documents/Machine Learning Pr...  [73, 0]
4676  /Users/m/Documents/Machine Learning Pr...  [36, 0]
800   /Users/m/Documents/Machine Learning Pr...  [26, 0]
3671  /Users/m/Documents/Machine Learning Pr...  [42, 0]

这是我导入数据生成器的方式:

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rescale = 1./255,
    rotation_range = 40,
    width_shift_range = 0.2,
    height_shift_range = 0.2,
    shear_range = 0.2,
    zoom_range = 0.2,
    horizontal_flip = True,
    fill_mode = 'nearest'
    )

test_datagen= ImageDataGenerator(rescale=1./255.)

train_generator=datagen.flow_from_dataframe(
dataframe = df_train,
x_col="image",
y_col="labels",
batch_size=32,
seed=42,
shuffle=True,
class_mode='multi_output',
target_size=(128, 128))

valid_generator = test_datagen.flow_from_dataframe(
dataframe = df_test,
x_col = "image",
y_col = "labels",
batch_size = 32,
seed = 42,
shuffle = True,
class_mode='multi_output',

target_size=(128, 128))

该函数读入一个 Dataframe ,但在文档中它指出指定的y_col必须是一个列表:
y_col字符串或列表, Dataframe 中包含目标数据的列。
在我创建dataframe之前,该列是一个列表,但现在它是panda中的一个列,它不再被分类为'list',对吗?那么为什么我会收到这个错误消息:

TypeError: If class_mode="multi_output", y_col must be a list. Received str.

我想使用如上所述的类模式多输出,它声明y_col必须是一个列表,但它是一个字符串。不知道为什么它声明它是一个字符串?是否有任何方法可以更改** Dataframe 内**列的“类型”?或者我误解了?

eulz3vhy

eulz3vhy1#

此处的“列表”表示列名的列表。
正如Zelemist所说,改变你的 Dataframe ,使之有两列而不是一列。
然后在y_col中输入一个列表,例如:

y_col = ['col1', 'col2]

希望现在说得通了。

相关问题