编程笔记

lifelong learning & practice makes perfect

Keras-flow_from_dataframe

1
2
3
Error :
TypeError: If class_mode="binary", y_col="Label" column values must be strings.
使用class_mode='categorical'或者其他也会报错

原因

  • label所在的列中的数据不是 string类型,需要进行转换
1
2
3
4
5
6
from keras_preprocessing.image import ImageDataGenerator
import pandas as pd

df=pd.read_csv(train_fileName,delimiter=",")#train_fileName csv文件路径
#读取csv文件列名(表格列的名称)为coluumn_name的数据内容转换为string
df['coluumn_name'] = df['coluumn_name'].astype(str)
  • 注意:coluumn_name需替换为读取csv文件的列名
    例如:D:\train.csv,表格结构如图:
    在这里插入图片描述
1
2
3
df=pd.read_csv(r'D:\train.csv',delimiter=",")
df['labels']=df['labels'].astype('str')
df['image_path'] = df['image_path'].astype(str) #根据实际情况使用,如果数据已经是str类型就不必再转换了

函数原型

1
flow_from_dataframe(dataframe, directory, x_col='filename', y_col='class', has_ext=True, target_size=(256, 256), color_mode='rgb', classes=None, class_mode='categorical', batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png', subset=None, interpolation='nearest')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
参数
dataframe: Pandas dataframe,一列为图像的文件名,另一列为图像的类别, 或者是可以作为原始目标数据多个列。
directory: 字符串,目标目录的路径,其中包含在 dataframe 中映射的所有图像。
x_col: 字符串,dataframe 中包含目标图像文件夹的目录的列。
y_col: 字符串或字符串列表,dataframe 中将作为目标数据的列。
has_ext: 布尔值,如果 dataframe[x_col] 中的文件名具有扩展名则为 True,否则为 False
target_size: 整数元组 (height, width),默认为 (256, 256)。 所有找到的图都会调整到这个维度。
color_mode: "grayscale", "rbg" 之一。默认:"rgb"。 图像是否转换为 1 个或 3 个颜色通道。
classes: 可选的类别列表 (例如, ['dogs', 'cats'])。默认:None。 如未提供,类比列表将自动从 y_col 中推理出来,y_col 将会被映射为类别索引)。 包含从类名到类索引的映射的字典可以通过属性 class_indices 获得。
class_mode: "categorical", "binary", "sparse", "input", "other" or None 之一。 默认:"categorical"。决定返回标签数组的类型:
"categorical" 将是 2D one-hot 编码标签,
"binary" 将是 1D 二进制标签,
"sparse" 将是 1D 整数标签,
"input" 将是与输入图像相同的图像(主要用于与自动编码器一起使用),
"other" 将是 y_col 数据的 numpy 数组,
None, 不返回任何标签(生成器只会产生批量的图像数据,这对使用 model.predict_generator(), model.evaluate_generator() 等很有用)。
batch_size: 批量数据的尺寸(默认:32)。
shuffle: 是否混洗数据(默认:True
seed: 可选的混洗和转换的随即种子。
save_to_dir: None 或 str (默认: None). 这允许你可选地指定要保存正在生成的增强图片的目录(用于可视化您正在执行的操作)。
save_prefix: 字符串。保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
save_format: "png", "jpeg" 之一(仅当 save_to_dir 设置时可用)。默认:"png"
follow_links: 是否跟随类子目录中的符号链接(默认:False)。
subset: 数据子集 ("training""validation"),如果在 ImageDataGenerator 中设置了 validation_split。
interpolation: 在目标大小与加载图像的大小不同时,用于重新采样图像的插值方法。 支持的方法有 "nearest", "bilinear", and "bicubic"。 如果安装了 1.1.3 以上版本的 PIL 的话,同样支持 "lanczos"。 如果安装了 3.4.0 以上版本的 PIL 的话,同样支持 "box""hamming"。 默认情况下,使用 "nearest"

返回值
一个生成 (x, y) 元组的 DataFrameIterator, 其中 x 是一个包含一批尺寸为 (batch_size, *target_size, channels) 的图像样本的 numpy 数组,y 是对应的标签的 numpy 数组。

参考:

欢迎关注我的其它发布渠道