/// <summary> /// Инициализация. /// </summary> public void Initialize() { if (_isInitialized) { throw new Exception("Невозможно инициализировать уже инициализированную модель!"); } if (_type.Equals(NetworkModeType.Learning)) { for (var x = 0; x < Size; ++x) { for (var y = 0; y < Size; ++y) { var value = new Random().NextDouble( RandomConstants.NEURON_WEIGHT_START_MIN_VALUE, RandomConstants.NEURON_WEIGHT_START_MAX_VALUE); System.Threading.Thread.Sleep(20); Cells.Add(new ModifiedCell(x, y, value)); } } } else { ///TODO : Реализовать. throw new NotImplementedException(); } _isInitialized = true; }
/// <summary> /// Конструктор выходного слоя для распознавания чисел. /// </summary> /// <param name="neurons">Нейроны.</param> /// <param name="modeType">Тип мода сети.</param> /// <param name="type">Тип распознавания.</param> public OutputLayer(List<Neuron> neurons, NetworkModeType modeType, OutputLayerType type = OutputLayerType.NumberRecognizing) { if (!type.Equals(OutputLayerType.NumberRecognizing) && !modeType.Equals(NetworkModeType.Recognizing)) throw new Exception("Данный конструкто предназначен только для распознавания чисел."); _type = type; _layerNeurons = neurons; }
/// <summary> /// Матрица фильтра. /// </summary> /// <param name="size">Размер.</param> public FilterMatrix(int size, NetworkModeType type) { if (!type.Equals(NetworkModeType.Learning)) { throw new Exception("Данный конструктор может использоваться только для обучения."); } Size = size; _type = type; }
/// <summary> /// Свёрточный слой. /// </summary> /// <param name="map">Карта значений.</param> /// <param name="filterMatrix">Матрица фильтра.</param> /// <param name="modeType">Тип мода ети (для обучения выдаёт исключение).</param> public ConvolutionLayer(FigureMap map, FilterMatrix filterMatrix, NetworkModeType modeType) { if (!modeType.Equals(NetworkModeType.Recognizing)) { throw new Exception("Данный конструктор не может использоваться для обучения!"); } Map = map; FilterMatrix = filterMatrix; _isInitialized = true; }
/// <summary> /// Матрица фильтра. /// </summary> /// <param name="size">Размер.</param> /// <param name="type">Тип мода сети.</param> /// <param name="cells">Ячейки.</param> public FilterMatrix(int size, NetworkModeType type, List <ModifiedCell> cells) { if (!type.Equals(NetworkModeType.Recognizing)) { throw new Exception("Данный конструктор может использоваться только для распознавания."); } Cells = cells; Size = size; _type = type; _isInitialized = true; }
/// <summary> /// Инициализация. /// </summary> /// <param name="type">Тип мода нейронной сети.</param> public override void Initialize(NetworkModeType type) { if (_isInitialized) { throw new Exception("Невозможно инициализировать уже инициализированную модель!"); } if (type.Equals(NetworkModeType.Learning)) { FilterMatrix = new FilterMatrix(_filterMatrixSize, type); FilterMatrix.Initialize(); } else { //TODO: Реализовать. throw new NotImplementedException(); } _isInitialized = true; }