DeepFinalProject / code /utils.py
ovedtal
Initial Project
cb9235c
import torch
import numpy as np
from sklearn.manifold import TSNE
def plot_tsne(model, dataloader, device):
'''
model - torch.nn.Module subclass. This is your encoder model
dataloader - test dataloader to over over data for which you wish to compute projections
device - cuda or cpu (as a string)
'''
model.eval()
images_list = []
labels_list = []
latent_list = []
with torch.no_grad():
for data in dataloader:
images, labels = data
images, labels = images.to(device), labels.to(device)
#approximate the latent space from data
latent_vector = model(images)
images_list.append(images.cpu().numpy())
labels_list.append(labels.cpu().numpy())
latent_list.append(latent_vector.cpu().numpy())
images = np.concatenate(images_list, axis=0)
labels = np.concatenate(labels_list, axis=0)
latent_vectors = np.concatenate(latent_list, axis=0)
# Plot TSNE for latent space
tsne_latent = TSNE(n_components=2, random_state=0)
latent_tsne = tsne_latent.fit_transform(latent_vectors)
plt.figure(figsize=(8, 6))
scatter = plt.scatter(latent_tsne[:, 0], latent_tsne[:, 1], c=labels, cmap='tab10', s=10) # Smaller points
plt.colorbar(scatter)
plt.title('t-SNE of Latent Space')
plt.savefig('latent_tsne.png')
plt.close()
#plot image domain tsne
tsne_image = TSNE(n_components=2, random_state=42)
images_flattened = images.reshape(images.shape[0], -1)
image_tsne = tsne_image.fit_transform(images_flattened)
plt.figure(figsize=(8, 6))
scatter = plt.scatter(image_tsne[:, 0], image_tsne[:, 1], c=labels, cmap='tab10', s=10)
plt.colorbar(scatter)
plt.title('t-SNE of Image Space')
plt.savefig('image_tsne.png')
plt.close()