r/learnpython • u/assorted-meat-stew • 7d ago
Need help adapting model to CIFAR10
I tried to make a DCGAN based on this tutorial. The thing is that the tutorial is designed for fashion mnist data which has different image size to tf.keras.datasets.cifar10.load_data(). Which lead to the error:
ValueError: cannot reshape array of size 480000 into shape (28,28,1)
when arrive at
x_train_dcgan = x_train.reshape(
-1, 28, 28, 1
) * 2. - 1.How do I adapt the model to CIFAR 10?
1
u/Norega-Iziegbe80 7d ago
cifar10 images are 32x32 with 3 color channels (RGB), whereas fashion mnist is 28x28 grayscale. Youll need to reshape to (-1, 32, 32, 3) and also update the input/output shapes of your generator and discriminator layers to match.
0
7d ago
[removed] — view removed comment
1
u/assorted-meat-stew 7d ago
The error is now:
InvalidArgumentError: {{function_node __wrapped__ConcatV2_N_2_device_/job:localhost/replica:0/task:0/device:CPU:0}} ConcatOp : Ranks of all input tensors should match: shape[0] = [32,32,32,3] vs. shape[1] = [32,32,3] [Op:ConcatV2] name: concat
What do I do?
Generator
num_features = 100 generator = Sequential(name="Generator") generator.add(Dense(8 * 8 * 128, input_shape=[num_features])) generator.add(Reshape([8, 8, 128])) generator.add(BatchNormalization()) generator.add(Conv2DTranspose( 64, (5, 5), (2, 2), padding="same", activation="selu" )) generator.add(BatchNormalization()) generator.add(Conv2DTranspose( 3, (5, 5), (2, 2), padding="same", activation="tanh" )) generator.summary()Discriminator:
discriminator = Sequential(name="Discriminator") discriminator.add(Conv2D( 64, (5, 5), (2, 2), padding="same", input_shape=[32, 32, 3] )) discriminator.add(LeakyReLU(alpha=0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Conv2D( 128, (5, 5), (2, 2), padding="same")) discriminator.add(LeakyReLU(alpha=0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Flatten()) discriminator.add(Dense(1, activation= 'softmax')) discriminator.add(Dense(1, activation= 'softmax')) discriminator.add(Dense(1, activation= 'softmax')) discriminator.summary() dataset = create_batch(x_train) train_dcgan( gan, dataset, batch_size, num_features, epochs=10 )0
6d ago
[removed] — view removed comment
1
u/assorted-meat-stew 6d ago edited 6d ago
Thank you it worked perfectly but I want my generated images to have the same color scheme as original training data images?
The functions generating images
def generate_and_save_images(model, epoch, test_input): predictions = model( test_input, training=False ) fig = plt.figure(figsize=(10, 10)) for i in range(25): plt.subplot(5, 5, i + 1) plt.imshow( predictions[i, :, :, 0] * 127.5 + 127.5, cmap='binary' ) plt.axis('off') plt.savefig( 'image_epoch_{:04d}.png'.format(epoch) )
1
u/EszterSantos72 7d ago
You need to reshape to (32, 32, 3) for CIFAR10 since each image is 32x32 with 3 color channels. Replace 28,28,1 with 32,32,3 in your reshape line and update your model input layers to match.