aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcdcgan.py66
1 files changed, 34 insertions, 32 deletions
diff --git a/cdcgan.py b/cdcgan.py
index effc89b..a69dbc8 100755
--- a/cdcgan.py
+++ b/cdcgan.py
@@ -1,8 +1,5 @@
from __future__ import print_function, division
-import tensorflow as keras
-
-import tensorflow as tf
-import tensorflow.keras as keras
+import keras
from keras.datasets import mnist
from keras.layers import Input, Dense, Reshape, Flatten, Dropout, multiply
from keras.layers import BatchNormalization, Embedding, Activation, ZeroPadding2D
@@ -39,11 +36,12 @@ class CDCGAN():
optimizer=optimizer,
metrics=['accuracy'])
- # Build the generator
- self.generator = self.build_generator()
-
noise = Input(shape=(self.latent_dim,))
label = Input(shape=(1,))
+
+ # Build the generator
+ self.generator = self.build_generator(noise, label)
+
img = self.generator([noise, label])
# For the combined model we will only train the generator
@@ -59,38 +57,44 @@ class CDCGAN():
self.combined.compile(loss=['binary_crossentropy'],
optimizer=optimizer)
- def build_generator(self):
+ def build_generator(self, noise_in, label_in):
+ noise = Dense(7 * 7 * 256)(noise_in)
+ noise = Reshape(target_shape=(7, 7, 256))(noise)
+ noise = Conv2DTranspose(256, kernel_size=3, padding="same")(noise)
+ noise = BatchNormalization()(noise)
+ noise = Activation("relu")(noise)
- model = Sequential()
+ label = Flatten()(Embedding(self.num_classes, self.latent_dim)(label_in))
+ label = Dense(7 * 7 * 256)(label)
+ label = Reshape(target_shape=(7, 7, 256))(label)
+ label = Conv2DTranspose(256, kernel_size=3, padding="same")(label)
+ label = BatchNormalization()(label)
+ label = Activation("relu")(label)
- model.add(Dense(128 * 7 * 7, activation="relu", input_dim=self.latent_dim))
- model.add(Reshape((7, 7, 128)))
+ # Combine the two
- model.add(Conv2DTranspose(256, kernel_size=3, padding="same", strides=(2,2)))
- model.add(BatchNormalization())
- model.add(Activation("relu"))
+ x = keras.layers.Concatenate()([noise, label])
- model.add(Conv2DTranspose(128, kernel_size=3, padding="same", strides=(2,2)))
- model.add(BatchNormalization())
- model.add(Activation("relu"))
+ x = Conv2DTranspose(256, kernel_size=3, padding="same")(x)
+ x = BatchNormalization()(x)
+ x = Activation("relu")(x)
- model.add(Conv2DTranspose(64, kernel_size=3, padding="same"))
- model.add(BatchNormalization())
- model.add(Activation("relu"))
+ x = Conv2DTranspose(128, kernel_size=3, padding="same", strides=(2,2))(x)
+ x = BatchNormalization()(x)
+ x = Activation("relu")(x)
+
+ x = Conv2DTranspose(64, kernel_size=3, padding="same", strides=(2,2))(x)
+ x = BatchNormalization()(x)
+ x = Activation("relu")(x)
- model.add(Conv2DTranspose(1, kernel_size=3, padding="same"))
- model.add(Activation("tanh"))
+ x = (Conv2DTranspose(1, kernel_size=3, padding="same"))(x)
+ x = Activation("tanh")(x)
+ model = Model([noise_in, label_in], outputs=x)
- noise = Input(shape=(self.latent_dim,))
- label = Input(shape=(1,), dtype='int32')
- label_embedding = Flatten()(Embedding(self.num_classes, self.latent_dim)(label))
- model_input = multiply([noise, label_embedding])
- img = model(model_input)
-
- #model.summary()
+ model.summary()
- return Model([noise, label], img)
+ return model
def build_discriminator(self):
@@ -242,8 +246,6 @@ class CDCGAN():
return train_data, test_data, val_data, labels_train, labels_test, labels_val
-'''
if __name__ == '__main__':
cdcgan = CDCGAN()
cdcgan.train(epochs=4000, batch_size=32)
-'''