Віктор Андрійович Шевченко, Виктор Андреевич Шевченко, Victor Andriyovich Shevchenko

Июн 03

Персептрон (искусственный нейрон) на BASH

Автор: admin | Категория: Наука и Размышления, Прочее | Опубликовано: 03-06-2014

Всех приветствую!
Сегодня речь пойдет о забавной реализации элементарного персептрона, на всеми любимом, великом и могучем bash :)

Персептро́н — математическая и компьютерная модель восприятия информации мозгом, простейшая из моделей нейросетей, способная тем не менее решать практичные и даже весьма сложные задачи.

Однако не будем вдаваться в терминологию, информации по этой теме огромное количество, при желании, найти её не составит проблем.

Перейдем к самой реализации.

#!/bin/bash
neural(){

size=49
porog=100
read(){
w=($(cat weight.txt))
if [ ! ${#w[@]} -eq $size ];then for(( i=0; i<size; i++ )); do w[i]=$(shuf -i 0-10 -n 1); done; fi
}
ask(){
sum=0
vector=($(cat $1))
#echo ${vector[2]}
if [ ! ${#vector[@]} -eq $size ];then echo "ERROR. Ask file is null or wrong size #2"; exit; fi
for (( i=0 ; i<size; i++)); do let sum+=${w[$i]}*${vector[$i]}; done
if [ $sum -gt $porog ]; then return 1; else return -- -1; fi
}
teach(){
ask $1
res=$?
if [ res != $2 ]
then
for (( i=0; i<size; i++ )){
let w[i]+=$2*${vector[$i]};
}
fi
}
save(){
>weight.txt
for(( i=0; i<size; i++ )); do echo -n "${w[i]} " >> weight.txt; done
}
}

neural
read
for i in {1..10}; do
teach "teach/teachs0.txt" 1
teach "teach/teachs1.txt" 1
teach "teach/teachs2.txt" 1
teach "teach/teachs3.txt" 1
teach "teach/teacht0.txt" -1
teach "teach/teacht1.txt" -1
teach "teach/teacht2.txt" -1
teach "teach/teacht3.txt" -1
done
save

ask "ask/ask.txt"
res=$?
if [ $res -eq 1 ]; then echo "Squre"; else echo "Triangle";fi
ask "ask/ask2.txt"
res=$?
if [ $res -eq 1 ]; then echo "Squre"; else echo "Triangle";fi
ask "ask/ask3.txt"
res=$?
if [ $res -eq 1 ]; then echo "Squre"; else echo "Triangle";fi
ask "ask/ask3.txt"
res=$?
if [ $res -eq 1 ]; then echo "Squre"; else echo "Triangle";fi

 
Как видим, ничего сложного тут нет.

Персептрон обучен различать треугольники ( triangle) и квадраты (squre).

weight.txt — файл весов нейронной сети
В директориях teach && ask расположены файлы с примерами для обучения и проверки персептрона.

Обучение производится командой teach name.file result
name.file — имя файла с примером
result — требуемый результат ( 1 или -1 )

Соответственно, чтобы ‘спросить’ персептрон:
ask name.file

Полный архив, вместе с примерами, и небольшой обучающей выборкой можете скачать: тут

Оставить комментарий