/// <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="type">Тип мода нейронной сети.</param> public override void Initialize(NetworkModeType type) { if (_isInitialized) { throw new Exception("Невозможно инициализировать уже инициализированную модель!"); } // Независимо от типа мода сети инициализация проходит одинаково. PoolingMatrix = new PoolingMatrix(_poolingMatrixSize); _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("Невозможно инициализировать уже инициализированную модель!"); } // Независимо от типа мода нейронной сети возвращается карта. var size = GetDataSize(); _layerData = new FigureMap(size, _data); _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; }
/// <summary> /// Инициализация слоя. /// </summary> /// <param name="type">Тип мода нейронной сети.</param> public override void Initialize(NetworkModeType type) { if (_isInitialized) throw new Exception("Невозможно инициализировать уже инициализированную модель!"); switch (type) { case NetworkModeType.Learning: _layerNeurons = new List<Neuron>(); CreateNeurons(); break; case NetworkModeType.Recognizing: _isInitialized = true; return; default: throw new Exception("Неизвестный тип мода нейронной сети."); } _isInitialized = true; }
/// <summary> /// Инициализация слоя. /// </summary> /// <param name="type">Тип мода нейронной сети.</param> public override void Initialize(NetworkModeType type) { // Данный слой инициализируется автоматически, // при передаче ему нейронов с предыдущего слоя. return; }
/// <summary> /// Инициализация. /// </summary> /// <param name="type">Тип мода нейронной сети.</param> public abstract void Initialize(NetworkModeType type);