public LatentManipulator()
        {
            // GanModelInterface is the interface to the model that generates images
            g = new GanModelInterface();

            AppendedDescription = string.Format("LatentManipulator version {0}. Latent code for GAN model" +
                    " used to generate this image:", version);
            using (var md5 = System.Security.Cryptography.MD5.Create())
            {
                using (var stream = File.OpenRead(g.GetGraphPath()))
                {
                    _graphHash = md5.ComputeHash(stream);
                }
            }
            _graphHashStr = BitConverter.ToString(_graphHash).Replace("-", "").ToLowerInvariant();

            DataDir = string.Format("data_{0}", _graphHashStr);

            FavoritesLatentPath = Path.Combine(DataDir, "favorite_latents.csv");
            AdvancedAttributesPath = Path.Combine(DataDir, "advanced_attributes.csv");
            CustomAttributesPath = Path.Combine(DataDir, "custom_attributes.csv");
            FavoriteAttributesPath = Path.Combine(DataDir, "favorite_attributes.csv");
            LatentCsvPath = Path.Combine(DataDir, "latents.csv");
            AttributesCsvPath = Path.Combine(DataDir, "attributes.csv");
            AverageLatentCsvPath = Path.Combine(DataDir, "average_latent.csv");
            currentFmaps = new List<List<float[,]>>();
        }