Package: dgc
Deep Goal-Oriented ClusteringThis is the depository for the paper, Deep Goal-Oriented Clustering (DGC). This depository contains code to replicate the CIFAR 100-20 experiment detailed in the paper. Here we give a brief description of DGC.DGC is built upon VAE, and uses similar variational techniques to maximize a variation lower bound of the data log-likelihood. A (deep) variational method can be efficiently summarized in terms of its generative & infernece steps, which we describe next.Generative process for DGCLet x,y,z and c denote the input data, the side-information, the latent code, and the index for a given Gaussian mixture component, we then havep(x,y,z,c) = p(y|z,c)p(x|z)p(z|c)p(c)In words, we first sample a component index from p(c), sample the latent code z from p(z|c), and then we reconstruct the input x and predict for the side-information y (see the figure below for a figurative illustration).Inference for DGCFor the variational lower bound of DGC, please refer to Eq. 2 in the main paper. In a nutshell, we want to maximize the log-likelihood by maximizing its variational lower bound.Test the model on PacmanTo run the model on the Pacman dataset, first install the packagepipinstalldgcAfter the installation, simply follow the following# Test model on the sythetic dataset Pacmanfromdgcimportload_sample_datasetsfromdgcimportdgcdataset='pacman'task_name='regression'batch_size=128learning_rate=0.01epochs=50trainloader,testloader,_=load_sample_datasets(batch_size,dataset)model=dgc(input_dim=2,y_dim=1,z_dim=10,n_centroids=2,task=task_name,binary=True,encodeLayer=[128,256,256],decodeLayer=[256,256,128])model.fit(trainloader,testloader,lr=learning_rate,num_epochs=epochs,anneal=True,direct_predict_prob=False)Test the model on your datasetTo run DGC on your own dataset, you will need to have the following files (all of which are assumed to be numpy arrays)train_features.npy: this contains the training featurestrain_side_info.npy: this contains the training side-information (can be either discrete or continous)train_cluster_labels.npy: this contains the training clustering labelstest_features.npy: this contains the test featurestest_side_info.npy: this contains the test side-information (can be either discrete or continous)test_cluster_labels.npy: this contains the test clustering labelsYou can create your own dataloader or passing the files into the built-in loader functionfromdgcimportform_dataloadersfromdgcimportdgcbatch_size=128# whatever you wanttask_name='regression'# or classificationbatch_size=128learning_rate=0.01epochs=50input_dim=2y_dim=1,z_dim=10,n_centroids=10binary=Trueencoder_size=[128,256,256]decoder_size=[256,256,128]learning_rate=0.01num_epochs=10anneal=Truedirect_predict_prob=Falsesave_model_path='./sample_model.pt'train_data=[train_features,train_side_info,train_cluster_labels]# order matters heretest_data=[test_features,test_side_info,test_cluster_labels]trainloader,testloader,_=form_dataloaders(batch_size,train_data,test_data)model=dgc(input_dim=input_dim,y_dim=y_dim,z_dim=z_dim,n_centroids=n_centroids,task=task_name,binary=binary,encodeLayer=encoder_size,decodeLayer=decoder_size)model.fit(trainloader,testloader,lr=learning_rate,num_epochs=epochsanneal=anneal,direct_predict_prob=direct_predict_prob)# If you want to save the modelmodel.save_model(save_model_path)