Я тренирую 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)
Я пробовал несколько вещей, к сожалению, безуспешно :
- 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 ...