I created an autoencoder using python, with no errors. However, I do not know the code for how do display the generated images from the autoencoder. The code of the autoencoder is shown below:
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras import layers, models, datasets, callbacks
import tensorflow.keras.backend as K
#NOT IN THE TEXT FOR SOME odd REASON
from keras.models import Model
#IMPORT THE DATA INTO TRAIN AND TEST SETS
from tensorflow.keras import datasets
(x_train,y_train), (x_test,y_test) = datasets.fashion_mnist.load_data()
#scale the images
def preprocess(imgs):
imgs = imgs.astype("float32") / 255.0
imgs = np.pad(imgs, ((0, 0), (2, 2), (2, 2)), constant_values=0.0)
imgs = np.expand_dims(imgs, -1)
return imgs
x_train = preprocess(x_train)
x_test = preprocess(x_test)
#THE ENCODER
encoder_input = layers.Input(
shape=(32, 32, 1), name = "encoder_input"
)
x = layers.Conv2D(32, (3, 3), strides = 2, activation = 'relu', padding="same")(
encoder_input
)
x = layers.Conv2D(64, (3, 3), strides = 2, activation = 'relu', padding="same")(x)
x = layers.Conv2D(128, (3, 3), strides = 2, activation = 'relu', padding="same")(x)
shape_before_flattening = K.int_shape(x)[1:]
x = layers.Flatten()(x)
encoder_output = layers.Dense(2, name="encoder_output")(x)
encoder = models.Model(encoder_input, encoder_output)
#THE DECODER
decoder_input = layers.Input(shape=(2,), name="decoder_input")
x = layers.Dense(np.prod(shape_before_flattening))(decoder_input)
x = layers.Reshape(shape_before_flattening)(x)
x = layers.Conv2DTranspose(
128, (3, 3), strides=2, activation = 'relu', padding="same"
)(x)
x = layers.Conv2DTranspose(
64, (3, 3), strides=2, activation = 'relu', padding="same"
)(x)
x = layers.Conv2DTranspose(
32, (3, 3), strides=2, activation = 'relu', padding="same"
)(x)
decoder_output = layers.Conv2D(
1,
(3, 3),
strides = 1,
activation="sigmoid",
padding="same",
name="decoder_output"
)(x)
decoder = models.Model(decoder_input, decoder_output)
# JOIN THE ENCODER WITH THE DECODER
autoencoder = Model(encoder_input, decoder(encoder_output))
# Compile the autoencoder
autoencoder.compile(optimizer="adam", loss="binary_crossentropy")
# Train the autoencoder by passing in the input images as both the input and output
# with one epoch
autoencoder.fit(
x_train,
x_train,
epochs=1,
batch_size=100,
shuffle=True,
validation_data=(x_test, x_test),
)
#Reconstruct the images
example_images = x_test[:50]
predictions = autoencoder.predict(example_images)
I tried using plt.imshow
as shown below. I expected to see 10 images generated by the autoencoder. however it is not working. I’m really not sure how to use it:
for i in range(10):
plt.figure(figsize=(20,3))
plt.imshow(predictions[i].astype("float32"), cmap="gray_r")
plt.show()
Steven Dascoli is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
2
If you want them all in one figure and horizontally, you can use matplotlib’s subplots()
method
fig, ax = plt.subplots(1, 10, figsize=(20, 3))
for i in range(10):
ax[i].imshow(predictions[i].astype("float32"), cmap="gray_r")
plt.show()