/// <summary> /// Open any datasets that were used by the input layer. /// </summary> private void OpenDataSet() { // clear out any data sets already there this.readDataSet.Clear(); this.dataSetFieldMap.Clear(); this.dataSetIteratorMap.Clear(); // only add each iterator once IDictionary <INeuralDataSet, NeuralDataFieldHolder> uniqueSets = new Dictionary <INeuralDataSet, NeuralDataFieldHolder>(); // find the unique files foreach (IInputField field in this.inputFields) { if (field is InputFieldNeuralDataSet) { InputFieldNeuralDataSet dataSetField = (InputFieldNeuralDataSet)field; INeuralDataSet dataSet = dataSetField.NeuralDataSet; if (!uniqueSets.ContainsKey(dataSet)) { IEnumerator <INeuralDataPair> iterator = dataSet .GetEnumerator(); NeuralDataFieldHolder holder = new NeuralDataFieldHolder( iterator, dataSetField); uniqueSets[dataSet] = holder; this.readDataSet.Add(iterator); } NeuralDataFieldHolder holder2 = uniqueSets[dataSet]; this.dataSetFieldMap[dataSetField] = holder2; this.dataSetIteratorMap[holder2.GetEnumerator()] = holder2; } } }
/// <summary> /// Called internally to obtain the current value for an input field. /// </summary> /// <param name="field">The input field to determine.</param> /// <param name="index">The current index.</param> /// <returns>The value for this input field.</returns> private double DetermineInputFieldValue(IInputField field, int index) { double result = 0; if (field is InputFieldCSV) { InputFieldCSV fieldCSV = (InputFieldCSV)field; ReadCSV csv = this.csvMap[field]; result = csv.GetDouble(fieldCSV.Offset); } else if (field is InputFieldNeuralDataSet) { InputFieldNeuralDataSet neuralField = (InputFieldNeuralDataSet)field; NeuralDataFieldHolder holder = this.dataSetFieldMap [field]; INeuralDataPair pair = holder.Pair; int offset = neuralField.Offset; if (offset < pair.Input.Count) { result = pair.Input[offset]; } else { offset -= pair.Input.Count; result = pair.Ideal[offset]; } } else { result = field.GetValue(index); } field.CurrentValue = result; return(result); }