Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализация искусственных нейронных сетей на языке описания аппаратуры VHDL. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
664 Кб
Скачать

Министерство образования и науки Российской Федерации Рязанский государственный радиотехнический университет

С.В. Челебаев

РЕАЛИЗАЦИЯ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ

НА ЯЗЫКЕ ОПИСАНИЯ АППАРАТУРЫ VHDL

Учебное пособие

Рязань 2013

УДК 681.325

Реализация искусственных нейронных сетей на языке описания аппаратуры VHDL: учеб. пособие / С.В. Челебаев; Рязан. гос. радиотехн.

ун-т. Рязань, 2013. 32 с.

Изложены вопросы, связанные с реализацией искусственных нейронных сетей на языке описания аппаратуры высокого уровня VHDL.

Предназначено для студентов специальностей 200401 «Биотехнические и медицинские аппараты и системы» и 210104 «Микроэлектроника и твердотельная электроника».

Табл. 2. Ил. 12. Библиогр.: 2 назв.

Программируемая логическая интегральная схема (ПЛИС), язык описания аппаратуры высокого уровня, VHDL, Verilog, цифровая схемотехника, нейронная сеть

Печатается по решению редакционно-издательского совета Рязанского государственного радиотехнического университета.

Рецензент: кафедра биомедицинской и полупроводниковой электроники РГРТУ (зав. кафедрой проф. Т.А. Холомина)

Рязанский государственный радиотехнический университет, 2013

1. Описание однослойного персептрона на языке VHDL

Однослойный персептрон – это простейшая искусственная нейронная сеть прямого распространения. Персептрон описывается следующим выражением:

 

 

n

 

 

 

 

 

, i 1, k ,

ti F

 

wj,i

 

 

xj

 

 

j 1

 

 

 

 

где xj – вход сети; ti – выход сети;

wj,i – коэффициент, задающий вес синаптической связи между j-м входом и i

нейроном сети;

F – функция активации сети; n – число входов сети;

k – число выходов сети.

Задача. Реализовать однослойный персептрон с 3-мя входами и 2-мя выходами. Количество разрядов входов и весов = 9. Функция активации: линейная.

Этап 1. Разработка структурной схемы нейронной сети.

x1

w1

 

w2 s1 F

t

 

 

1

x2

w3

 

x3

v v1

v

s2 F t2

 

 

2

 

3

 

Рис. 1. Структура нейронной сети (w1, w2, w3, v1, v2, v3 – весовые коэффициенты сети)

Этап 2. Разработка функциональной схемы сети.

Рис. 2. Функциональная схема сети (количество разрядов ограничено 9 для случая целочисленных входов и весов сети)

На рис. 2 имеют место следующие обозначения: ADD – сумматор, MUL – умножитель.

Этап 3. Разработка программы.

LIBRARY ieee;

USE ieee.std_logic_1164.all; LIBRARY altera_mf;

USE altera_mf.altera_mf_components.all; entity lab3 is

Port (

--x1, x2, x3 – входные сигналы x1:in std_logic_vector (8 downto 0); x2:in std_logic_vector (8 downto 0); x3:in std_logic_vector (8 downto 0);

--w1, w2, w3 – весовые коэффициенты, воздействующие на вход первого

--нейрона

w1:in std_logic_vector (8 downto 0); w2:in std_logic_vector (8 downto 0); w3:in std_logic_vector (8 downto 0);

--v1, v2, v3 – весовые коэффициенты, воздействующие на вход второго

--нейрона

v1:in std_logic_vector (8 downto 0); v2:in std_logic_vector (8 downto 0); v3:in std_logic_vector (8 downto 0);

--a, b – параметры функции активации a: in std_logic_vector (8 downto 0);

b: in std_logic_vector (8 downto 0);

--t1, t2, w3 – выходы нейронов

t1: out std_logic_vector (8 downto 0); t2: out std_logic_vector (8 downto 0)

);

end lab3;

architecture Behavioral of lab3 is

--s1, s2 – выходы суммирующих устройств нейронов signal S1: std_logic_vector (17 downto 0);

signal S2: std_logic_vector (17 downto 0);

--y1, y2, y3 – произведения w*x

signal y1: std_logic_vector (17 downto 0); signal y2: std_logic_vector (17 downto 0); signal y3: std_logic_vector (17 downto 0); -- p1, p2, p3 – произведения v*x

signal p1: std_logic_vector (17 downto 0); signal p2: std_logic_vector (17 downto 0); signal p3: std_logic_vector (17 downto 0); signal z1: std_logic_vector (17 downto 0);

signal z2: std_logic_vector (17 downto 0); signal q1: std_logic_vector (17 downto 0); signal q2: std_logic_vector (17 downto 0);

component s_mult9 IS -- компонент 9-разрядного умножителя

PORT

(

dataa: in std_logic_vector (8 downto 0); datab: in std_logic_vector (8 downto 0); result: out std_logic_vector (17 downto 0) );

END component;

component s_add9 is -- компонент 9-разрядного сумматора

Port(

dataa: in std_logic_vector (8 downto 0); datab: in std_logic_vector (8 downto 0); result: out std_logic_vector (8 downto 0)

);

END component;

begin

--вычисление взвешенного входа 1-го нейрона y1 = w1*x1 s_mult9_1: s_mult9 PORT MAP(

dataa => x1 (8 downto 0), datab => w1 (8 downto 0), result => y1 (17 downto 0)

);

--вычисление взвешенного входа 1-го нейрона y2 = w2*x2 s_mult9_2: s_mult9 PORT MAP(

dataa => x2 (8 downto 0), datab => w2 (8 downto 0), result => y2 (17 downto 0)

);

--вычисление взвешенного входа 1-го нейрона y3 = w3*x3 s_mult9_3: s_mult9 PORT MAP(

dataa => x3 (8 downto 0), datab => w3 (8 downto 0), result => y3 (17 downto 0)

);

--вычисление взвешенного входа 2-го нейрона p1 = v1*x1 s_mult9_5: s_mult9 PORT MAP(

dataa => x1 (8 downto 0), datab => v1 (8 downto 0), result => p1 (17 downto 0)

);

--вычисление взвешенного входа 2-го нейрона p2 = v2*x2 s_mult9_6: s_mult9 PORT MAP(

dataa => x2 (8 downto 0), datab => v2 (8 downto 0), result => p2 (17 downto 0)

);

--вычисление взвешенного входа 2-го нейрона p3 = v3*x3 s_mult9_7: s_mult9 PORT MAP(

dataa => x3 (8 downto 0), datab => v3 (8 downto 0), result => p3 (17 downto 0)

);

--вычисление суммы 3-х входов для 1-го нейрона s_add9_1: s_add9 PORT MAP(

dataa => y1 (8 downto 0), datab => y2 (8 downto 0), result => z1 (8 downto 0)

);

s_add9_2: s_add9 PORT MAP( dataa => z1 (8 downto 0), datab => y3 (8 downto 0), result => S1 (8 downto 0)

);

--вычисление суммы 3-х входов для 2-го нейрона s_add9_4: s_add9 PORT MAP(

dataa => p1 (8 downto 0), datab => p2 (8 downto 0), result => q1 (8 downto 0)

);

s_add9_5: s_add9 PORT MAP( dataa => q1 (8 downto 0), datab => p3 (8 downto 0), result => S2 (8 downto 0)

);

--вычисление линейной активационной функции 1-го нейрона

S_mult9_4: s_mult9 PORT MAP( dataa => a (8 downto 0), datab => S1 (8 downto 0), result => z2 (17 downto 0)

);

s_add9_3: s_add9 PORT MAP( dataa => z2 (8 downto 0), datab => b (8 downto 0),

result => t1 (8 downto 0)

);

-- вычисление линейной активационной функции 2-го нейрона a*S2 S_mult9_8: s_mult9 PORT MAP(

dataa => a (8 downto 0), datab => S2 (8 downto 0), result => q2 (17 downto 0)

);

s_add9_6: s_add9 PORT MAP( dataa => q2 (8 downto 0), datab => b (8 downto 0), result => t2 (8 downto 0)

);

END Behavioral;

Примечание. Компоненты s_add9 и s_mult9 создаются с помощью генератора ядер в среде Quartus II.

Этап 4. Моделирование работы сети (в среде Quartus II). Результаты моделирования показаны на рис. 3.

Рис. 3. Моделирование однослойного персептрона в среде Quartus II

 

Варианты заданий к самостоятельной работе

Таблица 1

 

 

Вариант

Число входов

Число выходов

Количество разрядов

Функция

персептрона

(нейронов)

входов и весов

активации

1

4

3

10

пороговая

2

4

4

11

пороговая

3

5

3

12

пороговая

4

5

2

13

пороговая

 

 

 

 

Окончание таблицы 1

5

6

2

8

 

пороговая

6

4

3

14

 

пороговая

7

4

4

15

 

пороговая

8

5

3

16

 

пороговая

9

5

2

10

 

пороговая

10

6

2

11

 

пороговая

11

4

3

10

 

пороговая

12

4

4

12

 

пороговая

13

5

3

13

 

пороговая

14

5

2

14

 

пороговая

15

6

2

12

 

пороговая

16

4

2

11

 

пороговая

17

4

3

16

 

пороговая

Замечание. Пороговая активационная функция реализуется с помощью мультиплексора (S – сумма нейрона; T – порог нейрона; y – выход нейрона): process(S, T)

begin

if (S < T) then y <= '0'; else y <= '1'; end if;

end process;

2 Описание двухслойного персептрона на языке VHDL

Задача. Реализовать двухслойный персептрон с 3-мя входами, 2-мя нейронами скрытого слоя и 2-мя выходами. Требования:

1)тип данных: целые знаковые числа;

2)диапазон входов: xi 128;127 , диапазон весов для 1-го и 2-го слоев

сети: wi 16;15 ;

3)тип функции активации 1-го слоя: линейная;

4)тип функции активации 2-го слоя: пороговая;

5)диапазон коэффициентов (a, b) линейной активационной функции: a,b 16;15 ;

6)быстродействие проекта: 100 МГц.

Этап 1. Разработка структурной схемы нейронной сети (рис. 4).

 

w1

k

 

 

 

g

 

 

 

 

x

w2

s1 F

t1

1_1

s

 

 

 

 

 

F

1

1

k1_2

k2_1

3

 

 

x2

w3

 

 

 

 

 

v1

 

t2

 

 

 

 

g2

x

 

 

 

 

 

 

 

 

 

 

 

 

v2

 

k2_2

 

 

 

3

v

s2

F

s4

F

 

 

 

3

 

 

 

 

 

 

 

Рис. 4. Структура нейронной сети (t1, t2 – выходы нейронов 1-го слоя, g1, g2 – выходы сети, s1, s2 – выходы суммирующих устройств нейронов 1-го слоя, s3, s4 – выходы суммирующих устройств нейронов 2-го слоя, x1, x2, x3 – входы сети, w1, w2, w3, v1, v2, v3 – весовые коэффициенты для 1-го слоя сети, k1_1, k1_2, k2_1, k2_2 – весовые коэффициенты для 2-го слоя сети)

Этап 2. Разработка функциональной схемы сети без учета количества разрядов (рис. 5).

Рис. 5. Функциональная схема сети

Этап 3. Расчет параметров функциональной схемы сети. 1) расчет диапазона входов и количества разрядов:

диапазон: xmax xmin 127 ( 128) 1 256;

количество разрядов: kx log2 256 8;

2) расчет диапазона весовых коэффициентов: wmax wmin 15 ( 16) 1 32;

количество разрядов: kw log2 32 5;

3) расчет диапазона y1, y2, y3, p1, p2, p3:

диапазон: pmax 255*31 7905 8192;

количество разрядов: ky kp log2 8192 13;

4) расчет диапазона z1, q1:

диапазон: z1max q1max 8192*2 16384;

количество разрядов: kz1 kq1 log2 16384 14;

5) расчет диапазона s1, s2:

диапазон: s1max s2max 16384 8192 24576;

количество разрядов: ks1 ks1 log2 24576 log2 32768 15;

6) расчет диапазона z2, q2:

диапазон: z2max q2max 32768*32 1048576;

количество разрядов: kz2 kq2 log2 1048576 20;

7) расчет диапазона t1, t2:

диапазон: t1max t2max 1048576 32 2097152;

количество разрядов: kt1 kt2 log2 2097152 21;

8) расчет диапазона m1, m2, m3, m4:

диапазон: m1max m2max m3max m4max 2097152*32 67108864;

количество разрядов: km1 km2 km3 km4 log2 67108864 26;

9) расчет диапазона s3, s4:

диапазон: s3max s4max 67108864*2 134217728;

количество разрядов: ks3 ks4 log2134217728 27.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]