Как получить точность для истинных и поддельных партий в GAN с использованием керас? - PullRequest
0 голосов
/ 21 марта 2020

Я тренирую GAN, чтобы различать изображения двух классов в керасах на основе этого кода: https://towardsdatascience.com/gan-by-example-using-keras-on-tensorflow-backend-1a6d515a60d0

Я хотел бы знать точность для обоих классов изображений во время каждая итерация train_on_batch, однако train_on_batch дает только одну точность, и я не нашел решения, как разбить его на две части ...

x = np.concatenate((true_images, fake_images))
y = np.ones([2*batch_size, 1])
y[batch_size:,:] = 0

d_loss = self.discriminator.train_on_batch(x, y)

Я пробовал несколько вещей, к сожалению, безуспешно :

  1. test_on_batch

Я могу запустить test_on_batch как для true_images, так и для fake_images до train_on_batch (поэтому модель еще не обновлена), однако мой дискриминатор пропал для большинства своих слои, и я получаю совершенно разные результаты по сравнению с train_on_batch. Похоже, что этого ожидают и обсуждают на многих форумах, например, https://github.com/keras-team/keras/issues/6876

x1 = x[0:batch_size,:]
y1 = y[0:batch_size]
x2 = x[batch_size:,:]
y2 = y[batch_size:]

t1 = self.discriminator.test_on_batch(x1, y1)
t2 = self.discriminator.test_on_batch(x2, y2)

d_loss = self.discriminator.train_on_batch(x, y)

Действительно, если я избавлюсь от отсева, этот метод сработает, то есть среднее значение точности двух test_on_batch равен точности train_on_batch для каждой итерации. Тем не менее, я хотел бы оставить отсев.

дважды запустить train_on_batch

Я также попробовал это:

d1 = self.discriminator.train_on_batch(x1, y1)
d2 = self.discriminator.train_on_batch(x2, y2)

, но модель ничего не узнает, даже если я рандомизирую порядок d1 и d2 ...

...