Разработка системы тестирования знаний студентов на основе нейронных сетей
Свойства биологического нейрона. Алгоритм обратного распространения ошибки. Обучение с учителем. Виды нейронных сетей и их свойства и преимущество. Разработка системы тестирования. Выбор программных средств для разработки. Структура базы данных и системы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.08.2018 |
Размер файла | 2,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">Ч</button><b>Возникли ошибки</b><br>'.implode('<br>', $errors).'</div>';
}
После успешной авторизации пользователь попадает на страницу тестирования (рис. 3.4). На ней находится список всех доступных пользователю тестов.
Рис. 3.4 - Страница с выбором теста
После нажатия кнопки «Начать» пользователю последовательно задаются вопросы из теста (рис. 3.5). Имеется возможность пропустить вопрос, вернуться к предыдущему и завершить тест. По истечении времени тест также автоматически завершается.
Рис. 3.5 - Процесс тестирования
После завершения процесса тестирования, пользователю показывается его оценка за тест (рис. 3.6).
Рис. 3.6 - Результат тестирования
Скрипт testing.php, отвечает за процесс тестирования. В процессе тестирования мы извлекаем из БД вопрос, ответы на него, а также сохраняем результат ответа на предыдущий вопрос (с которого перешёл пользователь):
$qid = $_SESSION['qs'][$q];
$res = mysqli_query($link, "SELECT * FROM `questions` WHERE `id`='$qid'");
$question = mysqli_fetch_assoc($res);
$page['question'] = $question['text'];
$res = mysqli_query($link, "SELECT * FROM `answers` WHERE `id_question`='$qid'");
while ($arr = mysqli_fetch_assoc($res)) $page['answers'][] = $arr;
$qsid = $_SESSION['qs'][$saveq];// Saved qid
$res = mysqli_query($link, "SELECT * FROM `results` WHERE `id_report`='$_SESSION[cur_test]' AND `id_q`='$qsid'");
$answer_id = intval($_POST['answer']);
if (mysqli_num_rows($res) > 0) {
mysqli_query($link, "UPDATE `results` SET `id_ans`='$answer_id' WHERE `id_report`='$_SESSION[cur_test]' AND `id_q`='$qsid'");
} else {
mysqli_query($link, "INSERT INTO `results` VALUES(NULL, '$_SESSION[cur_test]', '$qsid', '$answer_id')");
}
$page['cur'] = mysqli_fetch_assoc(mysqli_query($link, "SELECT * FROM `results` WHERE `id_report`='$_SESSION[cur_test]' AND `id_q`='$qid'"));
Также тут проходит и расчет оценки за тест. В случае, если для теста выбран режим «Ручной», мы считываем значения весовых коэффициентов из БД. Если выбран режим «Авто», то используется нейронная сеть обученная по результатам предыдущих тестов. Оценка определяется по значениям выходных нейронов последнего слоя.
if (isset($_POST['endtest'])) {
$time = time();
mysqli_query($link, "UPDATE `reports` SET `time_end`='$time' WHERE `id`='$_SESSION[cur_test]'");
if ($test['type'] == 0 || !file_exists("fann/test_$test[id].net")) {// Ставим оценку по результатам работы сети с вручную выставленными весами
include 'inc/nn_calc.php';
$prc = round(run_result($link, $_SESSION['cur_test'], false) / run_result($link, $_SESSION['cur_test'], true) * 100);
$page['dmark'] = 2;
if ($prc > 50) $page['dmark']++;
if ($prc > 70) $page['dmark']++;
if ($prc > 90) $page['dmark']++;
} else { // Ставим оценку по результатам, которые отдала обученная нейросеть
$res = mysqli_query($link, "SELECT `id_q` FROM `tests_q` WHERE `id_test`='$test[id]'");
while ($arr = mysqli_fetch_assoc($res)) {
$ids[] = $arr['id_q'];
}
$res2 = mysqli_query($link, "SELECT `results`.`id_q`, `answers`.`mark` FROM `results` LEFT JOIN `answers` ON (results.id_ans=answers.id) WHERE id_report = '$_SESSION[cur_test]'");
$ans = array();
while ($arr2 = mysqli_fetch_assoc($res2)) {
$ans[$arr2['id_q']] = $arr2['mark'];
}
$fann_in = array();
for ($i = 0; $i < count($ids); $i++) {
if (isset($ans[$ids[$i]])) $fann_in[] = $ans[$ids[$i]].' '; else $fann_in[] = 0;
}
$ann = fann_create_from_file("fann/test_$test[id].net");
if ($ann) {
$calc_out = fann_run($ann, $fann_in);
fann_destroy($ann);
$index_max = 0;
$max = -1;
for ($i = 0; $i < 4; $i++) {
if ($calc_out[$i] > $max) {
$index_max = $i;
$max = $calc_out[$i];
}
}
$page['dmark'] = 2;
if ($index_max == 1) $page['dmark'] = 3;
if ($index_max == 2) $page['dmark'] = 4;
if ($index_max == 3) $page['dmark'] = 5;
} else {
echo "Invalid file format";
}
}
mysqli_query($link, "UPDATE `reports` SET `mark`='$page[dmark]' WHERE `id`='$_SESSION[cur_test]'");
}
unset($_SESSION['cur_test']);
Функция расчёта оценки по результатам теста из файла inc/nn_calc.php:
function run_result($link, $id, $max = false) {
$res = mysqli_query($link, "SELECT `id_test` FROM `reports` WHERE `id`='$id'");
$arr = mysqli_fetch_row($res);
$tid = $arr[0];// ИД теста
$res = mysqli_query($link, "SELECT `tests_q`.`id_q`, `weights`.`to`, weights.value FROM `tests_q` LEFT JOIN `weights` ON(tests_q.id_q=weights.from) WHERE `id_test`='$tid'");
$weights_hidden = array();
while ($arr = mysqli_fetch_assoc($res)) {
$connect = array('from' => $arr['id_q'], 'value' => $arr['value']);
$weights_hidden[$arr['to']][] = $connect;
}
$layer_in = array();
$res = mysqli_query($link, "SELECT `results`.*, `answers`.`mark` FROM `results` LEFT JOIN `answers` ON (results.id_ans=answers.id) WHERE id_report='$id'");
while ($arr = mysqli_fetch_assoc($res)) {
$layer_in[$arr['id_q']] = $arr['mark'];
}
foreach ($weights_hidden as $theme => $connect) {
for ($i = 0; $i < count($connect); $i++) {
$value_in = (isset($layer_in[$connect[$i]['from']]) ? $layer_in[$connect[$i]['from']]: 0);
if ($max) $value_in = 1;
$layer_hidden[$theme] += $connect[$i]['value']*$value_in;
}
}
$result = 0;
foreach($layer_hidden as $theme=>$value) {
$res = mysqli_query($link, "SELECT `weight` FROM `themes` WHERE `id`='$theme'");
$arr = mysqli_fetch_row($res);
$weight = $arr[0];
$result += $value*$weight;
}
return $result;
}
На странице управления пользователями (рис. 3.7.) администратор системы имеет возможность управлять пользователями: осуществлять поиск как по ФИО, так и по логину; просматривать весь список доступных пользователей; добавлять новых; удалять; редактировать информацию (в т.ч. менять пароль) пользователя.
Отображение списка пользователей происходит следующим способом: сначала проверяется поле для поиска и выводятся пользователи, попадающие под условие или, если поле не заполнено, выполняется вывод всех пользователей из БД. При этом их количество ограничено двадцатью и выполняется разбивка списка по страницам (смещение в списке задается через переменную $offset и выражения LIMIT в команде SELECT - оно используется для ограничения количества строк).
if ($act == 'search' && !empty($_POST['user'])) {
$user = checkin($link, $_POST['user']);
$user = str_replace(' ', '%', $user);
$res = mysqli_query($link, "SELECT COUNT(*) FROM `users` WHERE (`login` LIKE '%$user%') OR (`name` LIKE '%$user%')");
$arr = mysqli_fetch_row($res);
$page['total'] = $arr[0];
if ($page['total'] == 0) {
$page['message'] = '<div class="alert alert-dismissable alert-info"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">Ч</button>Такой пользователь не найден</div>';
}
$res = mysqli_query($link, "SELECT `id`, `login`, `type`, `name`, `note` FROM `users` WHERE (`login` LIKE '%$user%') OR (`name` LIKE '%$user%')");
} else {
$res = mysqli_query($link, 'SELECT COUNT(*) FROM `users`');
$arr = mysqli_fetch_row($res);
$page['total'] = $arr[0];
$res = mysqli_query($link, "SELECT `id`, `login`, `type`, `name`, `note` FROM `users` LIMIT $offset, 20");
}
while ($arr = mysqli_fetch_assoc($res)) $page['users'][] = $arr;
Рис. 3.7 - Отображение списка пользователей
Внизу страницы (рис. 3.8) реализована форма для добавления пользователя. Заполняются следующие поля: логин, пароль, тип пользователя, ФИО, заметка (последние два не обязательны).
После нажатия кнопки «Создать» проходит проверка всех введённых данных, если всё правильно заполнено, то пользователь добавится в систему:
$login = checkin($link, $_POST['login']);
$password = checkin($link, $_POST['password']);
$type = intval($_POST['type']);
$name = checkin($link, $_POST['name']);
$note = checkin($link, $_POST['note']);
if (mb_strlen($login) < 2 || mb_strlen($login) > 20) {
$errors[] = 'Логин должен содержать от 2 до 20 символов';
}
if (preg_match('/[^\dA-z\-\_\.]+/', $login)) {
$errors[] = 'Логин может содержать только символы латинского алфивита, цифры, а также:. _ -';
}
if (mb_strlen($password) < 6) {
$errors[] = 'Минимальная длина пароля 6 символов';
}
if ($type < 1 || $type > 2) {
$errors[] = 'Выбран несуществующий тип пользователя';
}
if (mb_strlen($name) > 255) {
$errors[] = 'Максимальная длина поля ФИО - 255 символов';
}
if (mb_strlen($note) > 255) {
$errors[] = 'Максимальная длина заметки - 255 символов';
}
if (empty($errors)) {
$res = mysqli_query($link, "SELECT * FROM `users` WHERE `login`='$login'");
if (mysqli_num_rows($res) > 0) {
$errors[] = 'Пользователь с таким логином уже существует';
}
}
if (empty($errors)) {
$password = hash('SHA256', md5($password));
$res = mysqli_query($link, "INSERT INTO `users` VALUES(NULL, '$login', '$password', '$type', '$name', '$note')");
if ($res) {
$page['message'] = '<div class="alert alert-dismissable alert-info"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">Ч</button>Пользователь добавлен!</div>';
} else {
exit(mysqli_error($link));
}
} else {
$page['message'] = '<div class="alert alert-dismissable alert-danger"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">Ч</button><b>Возникли ошибки</b><br>'.implode('<br>', $errors).'</div>';
}
Переменная $array - это массив ошибок. При проверке каждого из полей, если оно не удовлетворяет условиям, в массив добавляется новый элемент - строку, содержащую текст ошибки. Пользователь добавляется в базу данных только тогда, когда по окончании всех проверок массив останется пустым.
Рис. 3.8 - Форма добавления нового пользователя
Страница с отчетами (рис. 3.9) содержит оценки всех пользователей, прошедших выбранный тест, а также время начала и завершения теста (для преподавателя и администратора), или, оценки одного пользователя по всем тестам (если это студент).
Для студента выборка данных из БД происходит следующим образом:
$res = mysqli_query($link, "SELECT `reports`.*, `tests`.`name` FROM `reports` INNER JOIN `tests` ON reports.id_test=tests.id WHERE `id_user`='$_SESSION[id]'");
while ($arr=mysqli_fetch_assoc($res)) {$page['reports'][] = $arr;}
Для преподавателей и администратора, аналогичным образом выводятся сначала тесты, а затем, при выборе одного из них и оценки всех пользователей.
Рис. 3.9 - Просмотр результатов теста
Для преподавателей и администратора имеется возможность просмотреть ответы на вопросы конкретного пользователя на выбранном тесте, увидеть процент выполнения теста в общем и по темам, а также изменить его оценку за тест, если результат работы нейронной сети и автоматического выставления ею оценки оказался неверным.
Просмотр подробного результата (рис.3.10) по темам происходит следующим образом: сначала на вход нейронной сети подается вектор входных сигналов (ответы на вопросы), потом результаты входного слоя передаются на второй слой, отвечающий за принадлежность вопросов темам. Результат работы нейронов со второго слоя и есть результат теста по темам.
Рис. 3.10 - Просмотр результата теста
Реализовано это в файле inc/nn_calc.php следующей функцией:
Расчёт предполагаемой оценки и возврат результатов на скрытом слое (по темам)
function run_layer($link, $id, $max = false) {
$res = mysqli_query($link, "SELECT `id_test` FROM `reports` WHERE `id`='$id'");
$arr = mysqli_fetch_row($res);
$tid = $arr[0];// ИД теста
$res = mysqli_query($link, "SELECT `tests_q`.`id_q`, `weights`.`to`, weights.value FROM `tests_q` LEFT JOIN `weights` ON(tests_q.id_q=weights.from) WHERE `id_test`='$tid'");
$weights_hidden = array();
while ($arr = mysqli_fetch_assoc($res)) {
$connect = array('from' => $arr['id_q'], 'value' => $arr['value']);
$weights_hidden[$arr['to']][] = $connect;
}
$layer_in = array();
$res = mysqli_query($link, "SELECT `results`.*, `answers`.`mark` FROM `results` LEFT JOIN `answers` ON (results.id_ans=answers.id) WHERE id_report='$id'");
while ($arr = mysqli_fetch_assoc($res)) {
$layer_in[$arr['id_q']] = $arr['mark'];
}
foreach ($weights_hidden as $theme => $connect) {
for ($i = 0; $i < count($connect); $i++) {
$value_in = (isset($layer_in[$connect[$i]['from']]) ? $layer_in[$connect[$i]['from']]: 0);
if ($max) $value_in = 1;
$layer_hidden[$theme] += $connect[$i]['value']*$value_in;
}
}
return $layer_hidden;
}
Изменение оценки производится в форме внизу страницы (рис. 3.11).
Рис. 3.11 - Изменение оценки
На странице «Мои предметы» (рис. 3.12) пользователь может просмотреть, добавить новые, изменить или удалить существующие предметы (дисциплины). Нужное действие следует выбрать, нажав на значок в колонке «Действие». Для перехода к темам (рис. 3.13) следует нажать на название предмета.
Рис. 3.12 Просмотр списка предметов
Рис. 3.13 - Список тем в выбранной дисциплине
Страница «Управление вопросами» (рис. 3.14) служит для добавления, удаления, редактирования вопросов в выбранной дисциплине. Для выбора нужного действие следует нажать на соответствующую пиктограмму.
Рис. 3.14 - Просмотр списка вопросов в этой дисциплине
Добавление нового вопроса и ответов на него доступно в форме внизу страницы. Добавление ответов к вопросу в форме, а также принадлежность вопроса к какой-либо теме происходит с помощью JavaScript скрипта динамически при нажатии соответствующей кнопки:
<script type="text/javascript">
function addAns() {
var form_answer = '\
<div class="form-group"> \
<label class="col-md-3 control-label">Ответ: </label> \
<div class="col-md-5"> \
<input class="form-control" name="answer[]" placeholder="вариант ответа" type="text"> \
</div> \
<label class="col-md-2 control-label">Балл за ответ: </label> \
<div class="col-md-2"> \
<input class="form-control" name="mark[]" placeholder="от 0 до 1" type="text"> \
</div> \
</div>';
$('#AnsFields').append(form_answer);
}
function addTheme() {
var form_theme = '\
<div class="form-group"> \
<label class="col-md-3 control-label">Выберите тему: </label> \
<div class="col-md-5"> \
<select class="form-control" name="theme[]"><? for ($i = 0; $i < count($page['themes']); $i++) echo '<option value="'.$page['themes'][$i]['id'].'">'.$page['themes'][$i]['name'].'</option>'; ?></select> \
</div> \
<label class="col-md-2 control-label">Вес связи: </label> \
<div class="col-md-2"> \
<input class="form-control" name="weight[]" placeholder="от 0 до 1" type="text"> \
</div> \
</div>';
$('#ThemesFields').append(form_theme);
}
</script>
<form class="form-horizontal well" method="POST" action="?act=add&subid=<? echo $page['subid']; ?>">
<fieldset>
<legend>Добавление:</legend>
<div class="form-group">
<label class="col-md-3 control-label">Текст вопроса:</label>
<div class="col-md-9">
<textarea class="form-control" rows="3" name="question" placeholder=""></textarea>
</div>
</div>
<div id="AnsFields"></div>
<div class="col-md-9 col-md-offset-3"><a href="#" onClick="addAns()">Добавить вариант ответа</a></div><br>
<div id="ThemesFields"></div>
<div class="col-md-9 col-md-offset-3"><a href="#" onClick="addTheme()">Добавить привязку к теме</a></div><br>
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="reset" class="btn btn-default">Отмена</button>
<button type="submit" class="btn btn-primary">Создать</button>
</div>
</div>
</fieldset>
</form>
Обработка данных с формы на сервере происходит следующим образом: сначала в БД добавляется вопрос и сразу же получаем его идентификатор, потом в цикле проходим по всем полям формы. Данные с формы будут находится в массивах $_POST[`answer'], $_POST[`mark'], $_POST[`theme'] и $_POST[`weight']:
$q = checkin($link, $_POST['question']);
mysqli_query($link, "INSERT INTO `questions` VALUES(NULL, '$subid', '$q')");
$lastid = mysqli_insert_id($link);
for ($i = 0; $i < count($_POST['answer']); $i++) {
$answer = checkin($link, $_POST['answer'][$i]);
$mark = doubleval($_POST['mark'][$i]);
mysqli_query($link, "INSERT INTO `answers` VALUES(NULL, '$lastid', '$answer', '$mark')");
}
for ($i = 0; $i < count($_POST['theme']); $i++) {
$theme= checkin($link, $_POST['theme'][$i]);
$weight = doubleval($_POST['weight'][$i]);
mysqli_query($link, "INSERT INTO `weights` VALUES(NULL, '$lastid', '$theme', '$weight')");
}
Редактирование вопроса происходит в той же форме и аналогично добавлению (рис. 3.15).
На странице со списком тестов (рис. 3.16) при нажатии на пиктограмму редактирования, можно перейти к изменению выбранного текста: поддерживается изменение всех полей существующего теста, а также добавление новых вопросов к тесту.
Рис. 3.15 - Редактирование вопроса
Рис. 3.16 - Редактирование теста
Выборка списка тестов из базы данных, а также списка доступных вопросов для добавления в тест происходит следующим образом:
$res = mysqli_query($link, "SELECT * FROM `tests` WHERE `id_subject`='$subid'");
while ($arr=mysqli_fetch_assoc($res)) {
$page['tests'][] = $arr;
}
$res = mysqli_query($link, "SELECT `name` FROM `subjects` WHERE `id`='$subid'");
$arr = mysqli_fetch_assoc($res);
$page['text'] = $arr['name'];
$res = mysqli_query($link, "SELECT * FROM `questions` WHERE `id_subject`='$subid'");
while ($arr=mysqli_fetch_assoc($res)) {
$page['questions'][] = $arr;
}
Добавление новых элементов на форму (выпадающий список) выполнено с помощью JavaScript:
<script type="text/javascript">
function addQ() {
var form_q = '\
<div class="form-group"> \
<label class="col-md-3 control-label">Выберите вопрос: </label> \
<div class="col-md-9"> \
<select class="form-control" name="q[]">
<?
for ($i = 0; $i < count($page['questions']); $i++)
echo '<option value="'.$page['questions'][$i]['id'].'">'.$page['questions'][$i]['text'].'</option>';
?>
</select> \
</div> \
</div>';
$('#QFields').append(form_q);
}
</script>
Добавление вопроса происходит при нажатии по соответствующей ссылке:
<form class="form-horizontal well" method="POST" action="?act=edit&subid=<? echo $subid.'&id='.$id; ?>">
<fieldset>
<legend>Редактирование теста:</legend>
<div class="form-group">
<label class="col-md-3 control-label">Название теста:</label>
<div class="col-md-9">
<input class="form-control" placeholder="макс. 255 символов" type="text" name="name" value="<? echo $page['test']['name']; ?>">
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Тип:</label>
<div class="col-md-9">
<div class="radio">
<label>
<input value="0" <? echo ($page['test']['type'] == 0 ? 'checked=""': ''); ?> type="radio" name="type" />Ручной (использование выставленных весов)
</label>
</div>
<div class="radio">
<label>
<input value="1" <? echo ($page['test']['type'] == 1 ? 'checked=""': ''); ?> type="radio" name="type" />Авто (обучение по результатам теста)
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Вопросы в случайном порядке:</label>
<div class="col-md-9">
<div class="radio">
<label>
<input value="1" <? echo ($page['test']['random'] == 1 ? 'checked=""': ''); ?> checked="" type="radio" name="random" />Да
</label>
</div>
<div class="radio">
<label>
<input value="0" <? echo ($page['test']['random'] == 0 ? 'checked=""': ''); ?> type="radio" name="random" />Нет
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Время на весь тест:</label>
<div class="col-md-9">
<input class="form-control" placeholder="в минутах" type="text" name="time" value="<? echo $page['test']['time']; ?>">
</div>
</div>
<div id="QFields">
<?
for ($i = 0; $i < count($page['q']); $i++) {
echo '<div class="form-group">
<label class="col-md-3 control-label">Выберите вопрос: </label>
<div class="col-md-9">
<select class="form-control" name="q[]">';
for ($j = 0; $j < count($page['questions']); $j++) {
echo '<option value="'.$page['questions'][$j]['id'].'" '.($page['q'][$i]['id_q'] == $page['questions'][$j]['id'] ? 'selected': '').'>'.$page['questions'][$j]['text'].'</option>';
}
echo'</select>
</div>
</div>';
}
?>
</div>
<div class="col-md-9 col-md-offset-3">
<a href="#" onClick="addQ()">Добавить вопрос</a>
</div>
<br>
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="reset" class="btn btn-default">Отмена</button>
<button type="submit" class="btn btn-primary" name="save">Сохранить</button>
</div>
</div>
</fieldset>
</form>
После того как пользователи несколько десятков раз прошли какой-либо тест и преподаватель изменил (поправил) некоторые оценки (в разделе «Отчеты»), нейронную сеть можно обучить выставлять оценки по существующим примерам (обучающей выборке). Для этого следует нажать на соответствующую иконку и перейти в параметры обучения нейронной сети (рис. 3.17). Параметры по умолчанию рекомендованы для использования, т.к. на практике сеть с такими параметрами при обучении на выборке в 35 примеров уже может корректно выставлять результаты студентам, также обучение происходит почти мгновенно (около 1 - 2 секунд).
Для обучения нейронной сети использовалась библиотека FANN. Перед обучением подготавливалась обучающая выборка, примеры для неё загружались из базы данных (результаты тестирования студентов). Функции обучения FANN на вход подавался файл, содержащий баллы за отвеченные вопросы, и вектор, содержащий оценки за тест (четыре значение от 2 до 5). Пример из сформированного файла:
0.3 0 1 1 1 1 1 1 1 1
0 0 1 0
Рис. 3.17 - Обучение нейронной сети
Первая строка содержит оценки за каждый из вопросов в тесте, вторая - активированный нейрон, отвечающий за оценку. В данном случае на все вопросы (кроме 1 и 2) были даны верные ответы, на первый частично верный и на второй ответ был не правильный. 3-е число во второй строке указывает на то, что за тест была поставлена четверка.
Использование FANN:
$ann = fann_create_standard($layers, $input, $hidden, $out);
if ($ann) {
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
$fres = fann_train_on_file($ann, "fann/test_$id.data", $epochs, 1000, $mse);
if ($fres) {
fann_save($ann, "fann/test_$id.net");
}
fann_destroy($ann);
} else {
echo 'Произошла ошибка при инициализации FANN';
}
После обучения сети, её конфигурация сохраняется в папке fann/.
Заключение
нейрон сеть программный тестирование
В результате выполнения данной бакалаврской работы была разработана система тестирования знаний студентов на основе нейронных сетей.
В процессе разработки были исследованы различные материалы по искусственным нейронным сетям. Разработана математическая модель для системы оценки качества знаний.
Были описаны процессы работы с СУБД MySQL, используемой библиотекой нейронных сетей - FANN, программирование на языке php, использование php-fann, использование технологий html, css, JavaScript, Bootstrap, jQuery. В общей сложности было написано 28 php скриптов.
Поставленные задачи дипломной работы были в полной мере реализованы в соответствии с заданием.
Практическая ценность дипломной работы заключается в использовании разработанной системы в образовательном процессе кафедры Информационных систем и технологий.
Размещено на Allbest.ru
...Подобные документы
Общие сведения о принципах построения нейронных сетей. Искусственные нейронные системы. Математическая модель нейрона. Классификация нейронных сетей. Правила обучения Хэбба, Розенблатта и Видроу-Хоффа. Алгоритм обратного распространения ошибки.
дипломная работа [814,6 K], добавлен 29.09.2014Разработка систем автоматического управления. Свойства нейронных сетей. Сравнительные оценки традиционных ЭВМ и нейрокомпьютеров. Формальная модель искусственного нейрона. Обучение нейроконтроллера при помощи алгоритма обратного распространения ошибки.
реферат [1,4 M], добавлен 05.12.2010Рассмотрение способов применения и основных понятий нейронных сетей. Проектирование функциональной структуры автоматизированной системы построения нейросети обратного распространения ошибки, ее классов и интерфейсов. Описание периода "бета тестирования".
дипломная работа [3,0 M], добавлен 02.03.2010Математическая модель нейронной сети. Однослойный и многослойный персептрон, рекуррентные сети. Обучение нейронных сетей с учителем и без него. Алгоритм обратного распространения ошибки. Подготовка данных, схема системы сети с динамическим объектом.
дипломная работа [2,6 M], добавлен 23.09.2013Обучение нейронных сетей как мощного метода моделирования, позволяющего воспроизводить сложные зависимости. Реализация алгоритма обратного распространения ошибки на примере аппроксимации функции. Анализ алгоритма обратного распространения ошибки.
реферат [654,2 K], добавлен 09.06.2014Диагностический анализ изучения алгоритмов обучения нейронных сетей "с учителем". Сбор входных и выходных переменных для наблюдений и понятие пре/пост процессирования. Подготовка и обобщение многослойного персептрона, модель обратного распространения.
курсовая работа [249,3 K], добавлен 22.06.2011Программное обеспечение для получения исходных данных для обучения нейронных сетей и классификации товаров с их помощью. Алгоритм метода обратного распространения ошибки. Методика классификации товаров: составление алгоритма, программная реализация.
дипломная работа [2,2 M], добавлен 07.06.2012Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.
дипломная работа [1,8 M], добавлен 08.02.2017Обучение простейшей и многослойной искусственной нейронной сети. Метод обучения перцептрона по принципу градиентного спуска по поверхности ошибки. Реализация в программном продукте NeuroPro 0.25. Использование алгоритма обратного распространения ошибки.
курсовая работа [1019,5 K], добавлен 05.05.2015Гибкая технологии извлечения знаний из нейронных сетей, настраиваемой с учетом предпочтений пользователя. Тестирование, пробная эксплуатация и разработка новой версии программных средств, реализующих данную технологию. Индивидуальные пространства смыслов.
дипломная работа [336,3 K], добавлен 07.06.2008Понятие и свойства искусственных нейронных сетей, их функциональное сходство с человеческим мозгом, принцип их работы, области использования. Экспертная система и надежность нейронных сетей. Модель искусственного нейрона с активационной функцией.
реферат [158,2 K], добавлен 16.03.2011Рост активности в области теории и технической реализации искусственных нейронных сетей. Основные архитектуры нейронных сетей, их общие и функциональные свойства и наиболее распространенные алгоритмы обучения. Решение проблемы мертвых нейронов.
реферат [347,6 K], добавлен 17.12.2011Программная реализация современной модели системы тестирования знаний студентов с помощью кроссплатформенных средств разработки. Элементы пользовательского интерфейса тестовой системы, поэтапный процесс ее функционирования. Алгоритм оценивания ответов.
курсовая работа [648,7 K], добавлен 14.07.2012Функциональная модель системы. Проектирование схемы базы данных. Проектирование архитектуры системы. Принцип технологии клиент-сервер. Построение схемы ресурсов. Выбор программных средств. Разработка базы данных с использованием Microsoft SQL Server.
дипломная работа [1,1 M], добавлен 30.03.2015Способы применения технологий нейронных сетей в системах обнаружения вторжений. Экспертные системы обнаружения сетевых атак. Искусственные сети, генетические алгоритмы. Преимущества и недостатки систем обнаружения вторжений на основе нейронных сетей.
контрольная работа [135,5 K], добавлен 30.11.2015Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.
лабораторная работа [1,1 M], добавлен 05.10.2010Проектирование программы в среде Delphi для тестирования знаний студентов по программированию, с выводом оценки по окончанию тестирования. Разработка экранных форм и алгоритма программы. Описание программных модулей. Алгоритм процедуры BitBtn1Click.
курсовая работа [365,0 K], добавлен 18.05.2013Описание технологического процесса напуска бумаги. Конструкция бумагоделательной машины. Обоснование применения нейронных сетей в управлении формованием бумажного полотна. Математическая модель нейрона. Моделирование двух структур нейронных сетей.
курсовая работа [1,5 M], добавлен 15.10.2012Нейронные сети как средство анализа процесса продаж мобильных телефонов. Автоматизированные решения на основе технологии нейронных сетей. Разработка программы прогнозирования оптово-розничных продаж мобильных телефонов на основе нейронных сетей.
дипломная работа [4,6 M], добавлен 22.09.2011Основные функции, требования и характеристики системы тестирования. Создание современной модели WEB-сервиса тестирования знаний студентов с помощью средств WEB-разработки. Описание пользовательского интерфейса сайта, этапы прохождения тестовых заданий.
курсовая работа [6,4 M], добавлен 14.07.2012