|
@@ -13,6 +13,8 @@ import tensorflow as tf
|
|
|
from tensorflow.keras.optimizers import Adam
|
|
from tensorflow.keras.optimizers import Adam
|
|
|
from tensorflow.keras.layers import Lambda
|
|
from tensorflow.keras.layers import Lambda
|
|
|
|
|
|
|
|
|
|
+from sklearn.utils import shuffle
|
|
|
|
|
+
|
|
|
from library.NNSearch import NNSearch
|
|
from library.NNSearch import NNSearch
|
|
|
|
|
|
|
|
import warnings
|
|
import warnings
|
|
@@ -311,7 +313,7 @@ class ConvGAN(GanBaseClass):
|
|
|
for n in range(discTrainCount):
|
|
for n in range(discTrainCount):
|
|
|
for min_idx in range(minSetSize):
|
|
for min_idx in range(minSetSize):
|
|
|
## generate minority neighbourhood batch for every minority class sampls by index
|
|
## generate minority neighbourhood batch for every minority class sampls by index
|
|
|
- min_batch_indices = self.nmbMin.neighbourhoodOfItem(min_idx)
|
|
|
|
|
|
|
+ min_batch_indices = shuffle(self.nmbMin.neighbourhoodOfItem(min_idx))
|
|
|
min_batch = self.nmbMin.getPointsFromIndices(min_batch_indices)
|
|
min_batch = self.nmbMin.getPointsFromIndices(min_batch_indices)
|
|
|
## generate random proximal majority batch
|
|
## generate random proximal majority batch
|
|
|
maj_batch = self._BMB(data_maj, min_batch_indices)
|
|
maj_batch = self._BMB(data_maj, min_batch_indices)
|
|
@@ -325,13 +327,13 @@ class ConvGAN(GanBaseClass):
|
|
|
## switch on discriminator training
|
|
## switch on discriminator training
|
|
|
discriminator.trainable = True
|
|
discriminator.trainable = True
|
|
|
## train the discriminator with the concatenated samples and the one-hot encoded labels
|
|
## train the discriminator with the concatenated samples and the one-hot encoded labels
|
|
|
- discriminator.fit(x=concat_sample, y=labels, verbose=0, batch_size=nLabels)
|
|
|
|
|
|
|
+ discriminator.fit(x=concat_sample, y=labels, verbose=0, batch_size=20)
|
|
|
## switch off the discriminator training again
|
|
## switch off the discriminator training again
|
|
|
discriminator.trainable = False
|
|
discriminator.trainable = False
|
|
|
|
|
|
|
|
for min_idx in range(minSetSize):
|
|
for min_idx in range(minSetSize):
|
|
|
## generate minority neighbourhood batch for every minority class sampls by index
|
|
## generate minority neighbourhood batch for every minority class sampls by index
|
|
|
- min_batch_indices = self.nmbMin.neighbourhoodOfItem(min_idx)
|
|
|
|
|
|
|
+ min_batch_indices = shuffle(self.nmbMin.neighbourhoodOfItem(min_idx))
|
|
|
min_batch = self.nmbMin.getPointsFromIndices(min_batch_indices)
|
|
min_batch = self.nmbMin.getPointsFromIndices(min_batch_indices)
|
|
|
## generate random proximal majority batch
|
|
## generate random proximal majority batch
|
|
|
maj_batch = self._BMB(data_maj, min_batch_indices)
|
|
maj_batch = self._BMB(data_maj, min_batch_indices)
|
|
@@ -345,7 +347,7 @@ class ConvGAN(GanBaseClass):
|
|
|
## switch on discriminator training
|
|
## switch on discriminator training
|
|
|
discriminator.trainable = True
|
|
discriminator.trainable = True
|
|
|
## train the discriminator with the concatenated samples and the one-hot encoded labels
|
|
## train the discriminator with the concatenated samples and the one-hot encoded labels
|
|
|
- discriminator.fit(x=concat_sample, y=labels, verbose=0, batch_size=nLabels)
|
|
|
|
|
|
|
+ discriminator.fit(x=concat_sample, y=labels, verbose=0, batch_size=20)
|
|
|
## switch off the discriminator training again
|
|
## switch off the discriminator training again
|
|
|
discriminator.trainable = False
|
|
discriminator.trainable = False
|
|
|
|
|
|
|
@@ -391,8 +393,13 @@ class ConvGAN(GanBaseClass):
|
|
|
## gen -> convex combinations generated from each neighbourhood
|
|
## gen -> convex combinations generated from each neighbourhood
|
|
|
|
|
|
|
|
if self.nmbMaj is not None:
|
|
if self.nmbMaj is not None:
|
|
|
- return self.nmbMaj.neighbourhoodOfItemList(min_idxs, maxCount=self.gen)
|
|
|
|
|
|
|
+ return self.nmbMaj.neighbourhoodOfItemList(shuffle(min_idxs), maxCount=self.gen)
|
|
|
else:
|
|
else:
|
|
|
- return tf.convert_to_tensor(
|
|
|
|
|
- data_maj[np.random.randint(len(data_maj), size=self.gen)]
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ return tf.convert_to_tensor(data_maj[np.random.randint(len(data_maj), size=self.gen)])
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ def retrainDiscriminitor(self, data, labels):
|
|
|
|
|
+ self.maj_min_discriminator.trainable = True
|
|
|
|
|
+ labels = np.array([ [x, 1 - x] for x in labels])
|
|
|
|
|
+ self.maj_min_discriminator.fit(x=data, y=labels, batch_size=20, epochs=self.neb_epochs)
|
|
|
|
|
+ self.maj_min_discriminator.trainable = False
|