Skip to content

temaambrushkevich/lab-4-perceptron

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 

Repository files navigation

АНАЛИЗ ДАННЫХ И ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ [in GameDev]

Отчет по лабораторной работе #4 - "Перцептрон" выполнил:

  • Амбрушкевич Артем Антонович
  • РИ-211002

Отметка о выполнении заданий (заполняется студентом):

Задание Выполнение Баллы
Задание 1 * 60
Задание 2 * 20
Задание 3 # 20

знак "*" - задание выполнено; знак "#" - задание не выполнено;

Работу проверили:

  • к.т.н., доцент Денисов Д.В.
  • к.э.н., доцент Панов М.А.
  • ст. преп., Фадеев В.О.

N|Solid

Build Status

Структура отчета

  • Данные о работе: название работы, фио, группа, выполненные задания.
  • Цель работы.
  • Задание 1.
  • Код реализации выполнения задания. Визуализация результатов выполнения (если применимо).
  • Задание 2.
  • Код реализации выполнения задания. Визуализация результатов выполнения (если применимо).
  • Выводы.

Цель работы

В проекте Unity реализовать перцептрон.

Задание 1

В проекте Unity реализовать перцептрон, который умеет производить вычисления: OR, AND, NAND, XOR, также дать комментарии о корректности работы.

Ход работы:

  • создал пустой 3D проект Unity.
  • скачал скрипт Perceptron.cs с репозитория и добавил его в свой проект.
    Содержание скрипта:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    [System.Serializable]
    public class TrainingSet
    {
       public double[] input;
       public double output;
    }
    
    public class Perceptron : MonoBehaviour {
    
      public TrainingSet[] ts;
      double[] weights = {0,0};
      double bias = 0;
      double totalError = 0;
    
      double DotProductBias(double[] v1, double[] v2) 
      {
         if (v1 == null || v2 == null)
          return -1;
    
         if (v1.Length != v2.Length)
          return -1;
    
         double d = 0;
         for (int x = 0; x < v1.Length; x++)
         {
          d += v1[x] * v2[x];
         }
    
         d += bias;
    
         return d;
      }
    
      double CalcOutput(int i)
      {
         double dp = DotProductBias(weights,ts[i].input);
         if(dp > 0) return(1);
         return (0);
      }
    
      void InitialiseWeights()
      {
         for(int i = 0; i < weights.Length; i++)
         {
          weights[i] = Random.Range(-1.0f,1.0f);
         }
         bias = Random.Range(-1.0f,1.0f);
      }
    
      void UpdateWeights(int j)
      {
         double error = ts[j].output - CalcOutput(j);
         totalError += Mathf.Abs((float)error);
         for(int i = 0; i < weights.Length; i++)
         {			
          weights[i] = weights[i] + error*ts[j].input[i]; 
         }
         bias += error;
      }
    
      double CalcOutput(double i1, double i2)
      {
         double[] inp = new double[] {i1, i2};
         double dp = DotProductBias(weights,inp);
         if(dp > 0) return(1);
         return (0);
      }
    
      void Train(int epochs)
      {
         InitialiseWeights();
    
         for(int e = 0; e < epochs; e++)
         {
          totalError = 0;
          for(int t = 0; t < ts.Length; t++)
          {
           UpdateWeights(t);
           Debug.Log("W1: " + (weights[0]) + " W2: " + (weights[1]) + " B: " + bias);
          }
          Debug.Log("TOTAL ERROR: " + totalError);
         }
      }
    
      void Start () {
         Train(5); // сколько тренировок
         Debug.Log("Test 0 0: " + CalcOutput(0,0));
         Debug.Log("Test 0 1: " + CalcOutput(0,1));
         Debug.Log("Test 1 0: " + CalcOutput(1,0));
         Debug.Log("Test 1 1: " + CalcOutput(1,1));		
      }
    }
  • создал пустой объект с названием Perceptron и повешал на него скрипт Perceptron.cs
  • далее научил "перцептрон" производить вычисление операции OR, для этого соответствующе OR заполнил таблицу истинности(рис. 1)
    • image рис. 1
    • в резултате запуска проекта, отработав 5 эпох обучения, перцептрон научился безошибочно производить операцию OR(рис. 2)
    • image рис. 2
  • далее научил "перцептрон" производить вычисление операции AND, для этого соответствующе AND заполнил таблицу истинности(рис. 3)
    • image рис. 3
    • в резултате запуска проекта, отработав 6 эпох обучения, перцептрон научился безошибочно производить операцию AND(рис. 4)
    • image рис. 4
  • далее научил "перцептрон" производить вычисление операции NAND, для этого соответствующе NAND заполнил таблицу истинности(рис. 5)
    (При операции NAND вначале происходит операция логического умножение, а затем операция логического отрицания)
    • image рис. 5
    • в резултате запуска проекта, отработав 7 эпох обучения, перцептрон научился безошибочно производить операцию NAND(рис. 6)
    • image рис. 6
  • с операцией XOR будет по-сложнее (XOR - иключающее ИЛИ), научить "перцептрон" производить вычисление операции XOR при текущих настройках, соответствующе XOR заполнив таблицу истинности(рис. 7) - не получится даже при Train(1000000); так как нейронная сеть с одним перцептроном может классифицировать только линейно-разделимые образы, поэтому для решения данной задачи следует добавить скрытый слой нейронов. Таким образом, перцептрон не будет корректно выполнять операцию XOR.
    • image рис. 7

Задание 2

Построить графики зависимости количества эпох от ошибки обучения. Указать от чего зависит необходимое количество эпох обучения.

image
Оптимальное количество эпох — это область между состояниями недообучения и переобучения модели. Определяется это количество эмпирически в контексте конкретной задачи. А определить эту область можно с помощью усредненного графика минимизации функции потерь по результатам нескольких итераций обучения.

Выводы

В результате проделанной работы я узнал что такое персептрон, как он работает и какие задачи можно решать с помощью него. Также узнал, как персептрон используется в машинном обучении.

Powered by

BigDigital Team: Denisov | Fadeev | Panov

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published