trustvis_with_dataset / singleVis /SingleVisualizationModel.py
Yvonnefanf
first
7b5e67a
from torch import nn
class SingleVisualizationModel(nn.Module):
def __init__(self, input_dims, output_dims, units, hidden_layer=3):
super(SingleVisualizationModel, self).__init__()
self.input_dims = input_dims
self.output_dims = output_dims
self.units = units
self.hidden_layer = hidden_layer
self._init_autoencoder()
# TODO find the best model architecture
def _init_autoencoder(self):
self.encoder = nn.Sequential(
nn.Linear(self.input_dims, self.units),
nn.ReLU(True))
for h in range(self.hidden_layer):
self.encoder.add_module("{}".format(2*h+2), nn.Linear(self.units, self.units))
self.encoder.add_module("{}".format(2*h+3), nn.ReLU(True))
self.encoder.add_module("{}".format(2*(self.hidden_layer+1)), nn.Linear(self.units, self.output_dims))
self.decoder = nn.Sequential(
nn.Linear(self.output_dims, self.units),
nn.ReLU(True))
for h in range(self.hidden_layer):
self.decoder.add_module("{}".format(2*h+2), nn.Linear(self.units, self.units))
self.decoder.add_module("{}".format(2*h+3), nn.ReLU(True))
self.decoder.add_module("{}".format(2*(self.hidden_layer+1)), nn.Linear(self.units, self.input_dims))
def forward(self, edge_to, edge_from):
outputs = dict()
embedding_to = self.encoder(edge_to)
embedding_from = self.encoder(edge_from)
recon_to = self.decoder(embedding_to)
recon_from = self.decoder(embedding_from)
outputs["umap"] = (embedding_to, embedding_from)
outputs["recon"] = (recon_to, recon_from)
return outputs
class VisModel(nn.Module):
"""define you own visualizatio model by specifying the structure
"""
def __init__(self, encoder_dims, decoder_dims):
"""define you own visualizatio model by specifying the structure
Parameters
----------
encoder_dims : list of int
the neuron number of your encoder
for example, [100,50,2], denote two fully connect layers, with shape (100,50) and (50,2)
decoder_dims : list of int
same as encoder_dims
"""
super(VisModel, self).__init__()
assert len(encoder_dims) > 1
assert len(decoder_dims) > 1
self.encoder_dims = encoder_dims
self.decoder_dims = decoder_dims
self._init_autoencoder()
def _init_autoencoder(self):
self.encoder = nn.Sequential()
for i in range(0, len(self.encoder_dims)-2):
self.encoder.add_module("{}".format(len(self.encoder)), nn.Linear(self.encoder_dims[i], self.encoder_dims[i+1]))
self.encoder.add_module("{}".format(len(self.encoder)), nn.ReLU(True))
self.encoder.add_module("{}".format(len(self.encoder)), nn.Linear(self.encoder_dims[-2], self.encoder_dims[-1]))
self.decoder = nn.Sequential()
for i in range(0, len(self.decoder_dims)-2):
self.decoder.add_module("{}".format(len(self.decoder)), nn.Linear(self.decoder_dims[i], self.decoder_dims[i+1]))
self.decoder.add_module("{}".format(len(self.decoder)), nn.ReLU(True))
self.decoder.add_module("{}".format(len(self.decoder)), nn.Linear(self.decoder_dims[-2], self.decoder_dims[-1]))
def forward(self, edge_to, edge_from):
outputs = dict()
embedding_to = self.encoder(edge_to)
embedding_from = self.encoder(edge_from)
recon_to = self.decoder(embedding_to)
recon_from = self.decoder(embedding_from)
outputs["umap"] = (embedding_to, embedding_from)
outputs["recon"] = (recon_to, recon_from)
return outputs
'''
The visualization model definition class
'''