Я работаю над разработкой модели MTL. В модели есть три задачи: задача1, задача2 и задача3. Классы в этих задачах несбалансированы, и я застрял в том, как я должен выбирать из них, чтобы модель не подходила / не соответствовала.
Задача 1:
Задача 1 имеет 10 классы, которые несбалансированы. ![enter image description here](https://i.stack.imgur.com/VpJci.png)
Задача 2:
Задача 2 имеет 5 классов, также несбалансированных ![enter image description here](https://i.stack.imgur.com/Kd1lT.png)
Task3:
![enter image description here](https://i.stack.imgur.com/tkUCM.png)
Task3 имеет семь классов, несбалансированных.
Ввод:
Все данные являются входными данными, и одно изображение имеет один класс из задачи 1 и один из задачи 2.
В настоящее время я использую пользовательский загрузчик данных, который просто перетасовывает набор данных и приводит к неизвестному подгонке где потеря при проверке меньше, чем потеря при обучении, а точность проверки выше, чем при обучении. В модели не используются исключения. Вот код для загрузчика данных:
def get_data_generator(data, split ,batch_size=16):
data = data.sample(frac=1).reset_index(drop=True)
imagePath = ''
df =''
if split == 'train':
imagePath = '../MTLData/train/'
df = data[data.dir == 'train']
elif split == 'test':
imagePath = '../MTLData/test/'
df = data[data.dir == 'test']
elif split == 'vald':
imagePath = '../MTLData/vald/'
df = data[data.dir == 'vald']
pfrID = len(data.PFRType.unique())
ftID = len(data.FuelType.unique())
noxID = len(data.NOx.unique())
images, pfrs,fts, noxs = [], [], [], []
while True:
for i in range(0,df.shape[0]):
r = df.iloc[i]
file, pfr, ft, nox = r['Image'], r['PFRType'], r['FuelType'], r['NOx']
im = Image.open(imagePath+file)
im = im.resize((224, 224))
im = np.array(im) / 255.0
images.append(im)
pfrs.append(to_categorical(pfr, pfrID))
fts.append(to_categorical(ft, ftID))
noxs.append(to_categorical(nox, noxID))
if len(images) >= batch_size:
yield np.array(images), [np.array(pfrs), np.array(fts),np.array(noxs)]
images, pfrs, fts, noxs = [], [], [], []
Архитектура:
Я использую VGG16 для этой классификации, и в модели нет выпадающих слоев.
Текущая производительность:
В настоящее время потери при проверке меньше, чем потери при обучении, а точность проверки выше, чем точность при обучении, и результаты не имеют смысла, поскольку к концу обучения места потери при проверке и потери при обучении меняются, что означает потерю при проверке начинает увеличиваться. Вот график тренировок:
![enter image description here](https://i.stack.imgur.com/u0So1.png)