public void HiddenLayer_WithSortOrder_InitializesProperty() { // Arrange _layer = new HiddenLayer(5); // Assert Assert.IsTrue(_layer.SortOrder == 5); }
public void Initialize() { _network = new DFFNeuralNetwork(_inputLayerNeuronCount, _hiddenLayersCount, _hiddenLayerNeuronCount, _outputLayerNeuronCount); _inputLayer = _network.Layers.OfType <IInputLayer>().First(); _outputLayer = _network.Layers.OfType <IOutputLayer>().First(); _hiddenLayer = _network.Layers.OfType <IHiddenLayer>().First(); _trainingIterations = new List <INetworkTrainingIteration>(); }
public void HiddenLayer_WithSortOrderAndNeurons_InitializesProperty() { // Arrange var hiddenNeuron = new HiddenNeuron(); _layer = new HiddenLayer(5, new List <IHiddenNeuron>() { hiddenNeuron }); // Assert Assert.IsTrue(_layer.Neurons.Count() == 1); Assert.IsTrue(_layer.Neurons.First() == hiddenNeuron); }
public void Initialize() { _layer = new HiddenLayer(1); }
/// <summary> /// Creates a NetworkTopology from a text file. /// </summary> /// <param name="file">The location of the file to read from.</param> /// <param name="objectFactories">The object factories that will /// be used to tranform the text types into objects.</param> /// <param name="settings">The currently loaded NetworkSettings.</param> /// <returns>Returns the NetworkTopology located inside of the file. /// If the file can not be parsed null is returned.</returns> /// <exception cref="IOException">System.IO.IOException</exception> private static NetworkTopology LoadText( string file, ref Dictionary<string, IUserObjectFactory> objectFactories, ref NetworkSettings settings) { //Check to varify that the file can be loaded. if (GetVersion(file) != "1.0") return null; NetworkTopology topology = new NetworkTopology(); //Retrieves the RawTypes from the file List<RawType> rawTypes = GetRawTypes(file); Dictionary<string, IHiddenLayer> hiddenLayers = new Dictionary<string, IHiddenLayer>(); //Factory to create the object with string factoryName; //Transforms all the rawTypes into objects for (int i = 0; i < rawTypes.Count; i++) { factoryName = settings.DefaultFactory; if (rawTypes[i].Fields.ContainsKey("factory")) factoryName = rawTypes[i].Fields["factory"]; if (rawTypes[i].Type == "layer") { if (rawTypes[i].Fields["type"] == "hidden") { hiddenLayers.Add(rawTypes[i].Fields["layerName"], objectFactories[factoryName].CreateUserObject<IHiddenLayer>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields)); } else if (rawTypes[i].Fields["type"] == "output") { topology.OutputLayer = objectFactories[factoryName].CreateUserObject<IOutputLayer>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } else if (rawTypes[i].Fields["type"] == "input") { topology.InputLayer = objectFactories[factoryName].CreateUserObject<IInputLayer>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } } else if (rawTypes[i].Type == "node") { INode node = objectFactories[factoryName].CreateUserObject<INode>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); if (hiddenLayers.ContainsKey(rawTypes[i].Fields["layer"])) { hiddenLayers[rawTypes[i].Fields["layer"]].SetNode(node, -1); } } else if (rawTypes[i].Type == "preprocessor") { topology.PreProcessor = objectFactories[factoryName].CreateUserObject<IPreProcessor>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); if(settings.Mode == NetworkMode.Training) topology.TrainingPreProcessor = objectFactories[factoryName].CreateUserObject<ITrainingPreProcessor>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } else if (rawTypes[i].Type == "postprocessor") { topology.PostProcessor = objectFactories[factoryName]. CreateUserObject<IPostProcessor>(rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } else if (rawTypes[i].Type == "topology") { topology.MetaData = rawTypes[i].Fields; if(!rawTypes[i].Fields.ContainsKey("algorithmFactory")) { rawTypes[i].Fields.Add("algorithmFactory", factoryName); } topology.TrainingAlgorithm = objectFactories[rawTypes[i].Fields["algorithmFactory"]]. CreateUserObject<ITrainingAlgorithm>( rawTypes[i].Fields["trainingAlgorithm"], rawTypes[i].Fields); } } //This tranformation is required because nodes are linked to hidden layers //by names. The name of the layer is the key in the dictionary. IHiddenLayer[] layer = new IHiddenLayer[hiddenLayers.Count]; int j = 0; foreach (KeyValuePair<string, IHiddenLayer> temp in hiddenLayers) { layer[j] = temp.Value; j++; } topology.HiddenLayers = layer; return topology; }
/// <summary> /// Creates a NetworkTopology from a text file. /// </summary> /// <param name="file">The location of the file to read from.</param> /// <param name="objectFactories">The object factories that will /// be used to tranform the text types into objects.</param> /// <param name="settings">The currently loaded NetworkSettings.</param> /// <returns>Returns the NetworkTopology located inside of the file. /// If the file can not be parsed null is returned.</returns> /// <exception cref="IOException">System.IO.IOException</exception> private static NetworkTopology LoadText( string file, ref Dictionary <string, IUserObjectFactory> objectFactories, ref NetworkSettings settings) { //Check to varify that the file can be loaded. if (GetVersion(file) != "1.0") { return(null); } NetworkTopology topology = new NetworkTopology(); //Retrieves the RawTypes from the file List <RawType> rawTypes = GetRawTypes(file); Dictionary <string, IHiddenLayer> hiddenLayers = new Dictionary <string, IHiddenLayer>(); //Factory to create the object with string factoryName; //Transforms all the rawTypes into objects for (int i = 0; i < rawTypes.Count; i++) { factoryName = settings.DefaultFactory; if (rawTypes[i].Fields.ContainsKey("factory")) { factoryName = rawTypes[i].Fields["factory"]; } if (rawTypes[i].Type == "layer") { if (rawTypes[i].Fields["type"] == "hidden") { hiddenLayers.Add(rawTypes[i].Fields["layerName"], objectFactories[factoryName].CreateUserObject <IHiddenLayer>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields)); } else if (rawTypes[i].Fields["type"] == "output") { topology.OutputLayer = objectFactories[factoryName].CreateUserObject <IOutputLayer>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } else if (rawTypes[i].Fields["type"] == "input") { topology.InputLayer = objectFactories[factoryName].CreateUserObject <IInputLayer>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } } else if (rawTypes[i].Type == "node") { INode node = objectFactories[factoryName].CreateUserObject <INode>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); if (hiddenLayers.ContainsKey(rawTypes[i].Fields["layer"])) { hiddenLayers[rawTypes[i].Fields["layer"]].SetNode(node, -1); } } else if (rawTypes[i].Type == "preprocessor") { topology.PreProcessor = objectFactories[factoryName].CreateUserObject <IPreProcessor>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); if (settings.Mode == NetworkMode.Training) { topology.TrainingPreProcessor = objectFactories[factoryName].CreateUserObject <ITrainingPreProcessor>( rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } } else if (rawTypes[i].Type == "postprocessor") { topology.PostProcessor = objectFactories[factoryName]. CreateUserObject <IPostProcessor>(rawTypes[i].Fields["dataType"], rawTypes[i].Fields); } else if (rawTypes[i].Type == "topology") { topology.MetaData = rawTypes[i].Fields; if (!rawTypes[i].Fields.ContainsKey("algorithmFactory")) { rawTypes[i].Fields.Add("algorithmFactory", factoryName); } topology.TrainingAlgorithm = objectFactories[rawTypes[i].Fields["algorithmFactory"]]. CreateUserObject <ITrainingAlgorithm>( rawTypes[i].Fields["trainingAlgorithm"], rawTypes[i].Fields); } } //This tranformation is required because nodes are linked to hidden layers //by names. The name of the layer is the key in the dictionary. IHiddenLayer[] layer = new IHiddenLayer[hiddenLayers.Count]; int j = 0; foreach (KeyValuePair <string, IHiddenLayer> temp in hiddenLayers) { layer[j] = temp.Value; j++; } topology.HiddenLayers = layer; return(topology); }