예제 #1
0
        /// <summary>
        /// Loads a topology from a file into the gui.
        /// </summary>
        private void LoadTopology(object sender, EventArgs e)
        {
            openTopology.ShowDialog();
            Dictionary <string, IUserObjectFactory> factories = metaData.GetFactories();
            NetworkSettings settings = new NetworkSettings();
            NetworkTopology topology =
                Topology.Load(openTopology.FileName, ref factories, ref settings,
                              openTopology.FileName.EndsWith(".nntc", true, null));

            topologyMetaData = topology.MetaData;

            AddPreProcessor(null, null);
            GetLayer(0).SetMetaData(topology.PreProcessor.MetaData);

            AddInputLayer(null, null);
            GetLayer(1).SetMetaData(topology.InputLayer.MetaData);

            int row = 2;

            for (int i = 0; i < topology.HiddenLayers.Length; i++)
            {
                AddHiddenLayer(null, null);
                HiddenLayerView layer = (HiddenLayerView)GetLayer(row);
                layer.SetMetaData(topology.HiddenLayers[i].MetaData);
                currentSelectedLayer = layer;


                row++;
            }

            AddOutputLayer(null, null);

            AddPostProcessor(null, null);
        }
예제 #2
0
 /// <summary>
 /// Adds a node to the current layer
 /// </summary>
 private void AddNode(object sender, EventArgs e)
 {
     if (currentSelectedLayer.GetType() == typeof(HiddenLayerView))
     {
         HiddenLayerView layer = (HiddenLayerView)currentSelectedLayer;
         NodeView        node  = new NodeView();
         node.SetMetaDataModel(ref metaData);
         node.Click += new EventHandler(ChangeInformation);
         layer.AddNode(node);
         UpdateSaveStatus();
     }
     else
     {
         MessageBox.Show(
             "The current selected layer is not a hidden layer. " +
             "Please select a hidden layer and try again");
     }
 }
예제 #3
0
        /// <summary>
        /// Adds a Hidden Layer
        /// </summary>
        private void AddHiddenLayer(object sender, EventArgs e)
        {
            HiddenLayerView layer = new HiddenLayerView();

            layer.SetMetaDataModel(ref metaData);
            int location = -1;

            if (hasOutput || hasPostProcessor)
            {
                location = topologyDisplay.Controls.Count;

                if (hasOutput)
                {
                    location--;
                }
                if (hasPostProcessor)
                {
                    location--;
                }
            }
            AddTableItem(layer, location);
        }
예제 #4
0
        /// <summary>
        /// Saves the current topology in the GUI.
        /// </summary>
        private void SaveTopology(object sender, EventArgs e)
        {
            NetworkTopology topology = new NetworkTopology();

            topology.MetaData = topologyMetaData;

            List <IHiddenLayer> hiddenLayers = new List <IHiddenLayer>();

            foreach (UserControl layer in topologyDisplay.Controls)
            {
                Type layerType = layer.GetType();
                Dictionary <string, string> metaData = ((LayerView)layer).GetMetaData();
                if (layerType == typeof(InputLayerView))
                {
                    InputLayerShell inputLayer = new InputLayerShell();
                    inputLayer.MetaData = metaData;
                    topology.InputLayer = inputLayer;
                }
                else if (layerType == typeof(HiddenLayerView))
                {
                    HiddenLayerView view     = (HiddenLayerView)layer;
                    LayerView[]     rawNodes = view.GetNodes();
                    INode[]         nodes    = new INode[rawNodes.Length];
                    for (int i = 0; i < rawNodes.Length; i++)
                    {
                        NodeShell node = new NodeShell();
                        node.MetaData = rawNodes[i].GetMetaData();
                        nodes[i]      = node;
                    }
                    HiddenLayerShell hiddenLayer = new HiddenLayerShell();
                    hiddenLayer.MetaData = metaData;
                    hiddenLayer.Nodes    = nodes;
                    hiddenLayers.Add(hiddenLayer);
                }
                else if (layerType == typeof(OutputLayerView))
                {
                    OutputLayerShell outputLayer = new OutputLayerShell();
                    outputLayer.MetaData = metaData;
                    topology.OutputLayer = outputLayer;
                }
                else if (layerType == typeof(PreProcessorView))
                {
                    PreProcessorShell preProcessor = new PreProcessorShell();
                    preProcessor.MetaData = metaData;
                    topology.PreProcessor = preProcessor;
                }
                else if (layerType == typeof(PostProcessorView))
                {
                    PostProcessorShell postProcessor = new PostProcessorShell();
                    postProcessor.MetaData = metaData;
                    topology.PostProcessor = postProcessor;
                }
                topology.HiddenLayers = hiddenLayers.ToArray();
                saveTopology.ShowDialog();

                if (saveTopology.FileName.EndsWith(".nntc"))
                {
                    saveTopology.FileName.Remove(saveTopology.FileName.Length - 1);
                }
                Topology.Save(saveTopology.FileName, topology);
            }
        }
예제 #5
0
        /// <summary>
        /// Checks the current topology to see if it can be saved.
        /// </summary>
        private void UpdateSaveStatus()
        {
            if (!hasInput || !hasOutput ||
                !hasPreProcessor || !hasPostProcessor)
            {
                canSave = false;
                topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                return;
            }

            if (topologyDisplay.Controls.Count < 5)
            {
                canSave = false;
                topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                return;
            }

            HiddenLayerView current;
            HiddenLayerView prior      = null;
            List <string>   layerNames = new List <string>();

            for (int i = 2; i < topologyDisplay.Controls.Count - 2; i++)
            {
                current = (HiddenLayerView)topologyDisplay.Controls[i];

                //Check to make sure the layer has a name
                if (!current.GetMetaData().ContainsKey("layerName"))
                {
                    canSave = false;
                    topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                    return;
                }

                //Check to make sure that the name is unique
                if (layerNames.Contains(current.GetMetaData()["layerName"]))
                {
                    canSave = false;
                    topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                    return;
                }
                layerNames.Add(current.GetMetaData()["layerName"]);

                //Check that the layer has nodes added to it.
                if (current.GetNodes().Length == 0)
                {
                    canSave = false;
                    topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                    return;
                }

                int weightCount = 0;
                if (prior == null)
                {
                    weightCount =
                        ((InputLayerView)topologyDisplay.Controls[1]).GetInputCount();
                }
                else
                {
                    weightCount = prior.GetNodes().Length;
                }

                foreach (LayerView node in current.GetNodes())
                {
                    //Check to make sure that the combination weights are set
                    if (!node.GetMetaData().ContainsKey("combinationWeights"))
                    {
                        canSave = false;
                        topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                        return;
                    }

                    //Check to make sure that there are enough weights specified
                    if (weightCount >
                        node.GetMetaData()["combinationWeights"].Split(',').Length)
                    {
                        canSave = false;
                        topologyStatus.Items["canSaveStatus"].Text = "Can Save: False";
                        return;
                    }
                }

                prior = current;
            }


            canSave = true;
            topologyStatus.Items["canSaveStatus"].Text = "Can Save: True";
        }