#tensorflow #keras #conv-neural-network
Вопрос:
Я разрабатываю функциональную модель API, где:
- Ввод: Изображение
- Выход:
- цветовая классификация (50 возможностей)
- классификация форм (150 возможностей)
Я сталкиваюсь с проблемой, касающейся ImageDataGenerator.flow_from_dataframe
передачи y_col
аргумента как ["shape", "label"]
. Я попытался использовать этот class_mode
аргумент , как raw
categorical
и все остальные.
Когда я устанавливаю categorical
, извлекается следующая ошибка:
Ошибка типа: Если class_mode=»категориальный», y_col=»[‘shape_std’, ‘label_std’]» значения столбцов должны быть строкой типа, списком или кортежем.
Код, в котором возникает проблема, показан ниже:
# DataFrame Example:
path shape label phase
colorML19YI.jpg 15303 36 train
color4J3XI9.jpg 15303 36 train
colorMOYIAT.jpg 15303 36 train
colorJ6J6QR.jpg 15303 36 train
colorLGZ4OV.jpg 15303 36 train
self.batch_size = 32
self.phases = ['train', 'valid', 'test']
for i, phase in enumerate(self.phases):
self.phase_gen.append(self.image_gen(df, phase, self.batch_size)
def image_gen(self, df, phase, batch_size):
df_mod = df[df['phase']==phase]
class_mode = 'categorical'
y_col = ['shape', 'label', ['shape_std', 'label_std'], ["shape", "label"], ['shape_label2']]
if phase == 'train':
phase_iter = ImageDataGenerator(
rotation_range=20,
zoom_range=0.15,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.15,
horizontal_flip=True,
fill_mode="nearest"
).flow_from_dataframe(
dataframe=df_mod,
directory=self.imgs_dir,
x_col='path',
y_col=y_col[2],
batch_size=batch_size,
seed=1,
shuffle=True,
class_mode=class_mode,
)
elif phase == 'test':
phase_iter = ImageDataGenerator(
rotation_range=20,
zoom_range=0.15,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.15,
horizontal_flip=True,
fill_mode="nearest"
).flow_from_dataframe(
dataframe=df_mod,
directory=self.imgs_dir,
x_col='path',
y_col=y_col[2],
batch_size=batch_size,
seed=1,
shuffle=False,
class_mode=None,
)
else:
phase_iter = ImageDataGenerator(#rescale=1.0/255.0
).flow_from_dataframe(
dataframe=df_mod,
directory=self.imgs_dir,
x_col='path',
y_col=y_col[2],
batch_size=batch_size,
seed=1,
shuffle=True,
class_mode=class_mode,
)
return phase_iter
Кто — нибудь может мне с этим помочь? Или у вас есть четкое представление о том, что может произойти, если это произойдет?
Комментарии:
1.
shape_std
иlabel_std
значения столбцов, похоже, имеют значение float32. Это правда?2. Нет, когда я создаю фрейм данных, есть диалог str (df.astype(str)). Таким образом, все столбцы имеют тип «объект». Что странно, так это то, что, когда я всего лишь одна переменная в качестве «y_col», ImageDataGenerator.flow_from_dataframe работает хорошо.
3. вы прошли
shape_std
иlabel_std
здесь => >y_col=y_col[2]
. Но вы упомянули, что пытаетесь передать["shape", "label"]
в качестве целевого столбца. Ты что, собирался садитьсяy_col=y_col[3]
? Так["shape", "label"]
как это 4 — й элемент вy_col
массиве. и, пожалуйста, добавьтеdf.info()
выходные данные оператора, чтобы увидеть, сколько данных какого типа у вас есть.