Курсовая работа: Распознавание слов естественного языка с использованием нейросетей
η - константа.
Константа используется для того, чтобы обучение не проводилось слишком быстро, то есть весовые коэффициенты не изменялись слишком сильно за один шаг обучения (что является причиной прыжков сходимости при обучении сети).
Пороговые уровни нейронов также инициализируются небольшими случайными числами и нуждаются в обучении. Пороговые уровни трактуются так же, как и весовые коэффициенты, за исключением того, что входные значения для них всегда равны -1 (знак минуса - т.к. уровни вычитаются во время функционирования сети):
new threshold = old threshold + ηδj .(-1) (10)
или (в более удобном виде):
new threshold = old threshold - ηδj (11)
1.3 Постановка задачи
Задачей данного курсового проекта является создание программы распознавания слов естественного языка с использованием нейросетей. Для ее выполнения была выбрана нейронная сеть обратного распространения ошибки, которая будет реализована на языке программирования C# в виде класса. Класс будет содержать конструктор, на который будут подаваться значения следующих параметров:
- обучающая выборка;
- тестовая выборка;
- количество нейронов скрытого слоя;
- коэффициент обучения;
- момент;
- количество эпох обучения.
Для перевода обучающих и тестовых слов в двоичный вид, а также сохранения слов-исключений в хеш-таблице будут предусмотрены отдельные классы.
Также будет создан класс, производящий разбиение текста на отдельные лексемы и их распознавание средствами нейросети и хеш-таблицы.
Соответственно, для решения поставленной задачи необходимо создание четырех классов:
- класс нейросети и средств ее обработки;
- класс перевода текста в двоичный вид;
- класс хеш-таблицы и методов работы с ней;
- класс разбиения текста на лексемы и распознавания.
Созданные классы будут оформлены в виде библиотечного компонента.
Для тестирования созданного класса будет создано Windows-приложение с использованием визуальных компонентов. Тестирующая программа должна осуществлять ввод текстовой информации из файла и с клавиатуры, а также ввод параметров нейросети: количество эпох обучения, количество нейронов скрытого слоя, момент и коэффициент обучения.
2. Проектирование библиотеки классов для реализации нейросети и тестовой программы
2.1 Программная реализация нейросети обратного распространения ошибки
Алгоритм был реализован в виде класса NeuroNetwork. UML диаграмма класса представленна на рисунке 6.
Класс NeuroNetwork |
Закрытые поля |
string filename; |
double[,] INP_PATTERNS; |
double[,] OUT_PATTERNS; |
int MAX_INP; |
int MAX_HID; |
int MAX_OUT; |
int MAX_PAT; |
double[] test_pat; |
double[] desired; |
neuron_type[] ipl; |
neuron_type[] hl; |
neuron_type[] ol; |
double BETA; |
double M; |
int num_cycles; |
Закрытые методы |
private double sigmoid(double x) |
private void run_input_layer() |
private void run_hidden_layer() |
private void run_output_layer() |
private void run_the_network() |
private void display_the_results(out string[] outp) |
private void AddWeightsToFile() |
private void blank_changes() |
private void calculate_output_layer_errors() |
private void calculate_hidden_layer_errors() |
private void calculate_input_layer_errors() |
private void weight_change() |
private void back_propagate() |
private void ExtractWeights() |
Открытые методы |
public void random_weights() |
public void get_test_pattern(double[] tests) |
public void train_the_network() |
public string[] test_the_network(double[] test) |
Public NeuroNetwork(double[,] INP_PATTERNS1, double[,] OUT_PATTERNS1, int Max_inp, int N_HID, int Max_pat, double beta, double m,int Epoch,string name,bool indicate) |
Рисунок 6 – UML-диаграмма класса NeuroNetwork
Параметры конструктора:
- обучающая выборка - INP_PATTERNS;