Академический Документы
Профессиональный Документы
Культура Документы
Матрицы
Если мы знаем как сдал к.р. только один студент, мы вряд ли сможем получить какую-то важную
информацию относительно заданий и к.р.
ПОэтому на практике нас будут интересовать не отдельные вектора, а совокупности этих векторов.
Потому как именно они содержат важную для нас информацию.
Совокупности (выборки) векторов формируют матрицы - таблицы, каждая строка которой - вектор, n-
ка чисел, описывающая один объект.
⎝ ⎠
am,1 am,2 ... am,n
Элементы матрицы записывают с использованием строчных латинских букв с указанием номера строки
и столбца, например a i,j
- это элемент матрицы A, стоящий на пересечении i-й строки и j-го столбца.
Это самые простые операции. При этом соответствующие элементы двух одинаковых по размеру
матриц складываются или перемножаются. Проиллюстрируем это на примере numpy - матриц.
In [ ]:
# импорт библиотеки numpy
import numpy as np
In [ ]:
# Задаем две матрицы размера 2 х 3
Amat = np.array([[1,1,1],[2,2,2]])
Bmat = np.array([[1,2,3],[4,5,6]])
print(f'Amat=\n {Amat}')
print(f'Bmat=\n {Bmat}')
Amat=
[[1 1 1]
[2 2 2]]
Bmat=
[[1 2 3]
[4 5 6]]
In [ ]:
# Сложим эти две матрицы
Cmat = Amat + Bmat
In [ ]:
# Перемножим эти две матрицы
Dmat = Amat * Bmat
In [ ]:
# Умножим матрицу A на число 2
print(f'Amat=\n {Amat}')
print(f'2 * Amat=\n {Amat * 2}')
Amat=
[[1 1 1]
[2 2 2]]
2 * Amat=
[[2 2 2]
[4 4 4]]
In [ ]:
# Прибавим к матрице A число 2
print(f'Amat=\n {Amat}')
print(f'Amat + 2 =\n {Amat + 2}')
Amat=
[[1 1 1]
[2 2 2]]
Amat + 2 =
[[3 3 3]
[4 4 4]]
Матричное умножение
Это более сложное умножение. Матричное умножение не является коммутативным. В левой матрицы
выделим строки, а в правой - столбцы.
Результирующая матрица будет иметь размерность. совпадающую по кол-ву строк с матрицей слева и
по кол-ву столбцов - с матрицей справа:
При этом обязательным условием перемножения двух матриц является совпадение уоличества
столбцов в левой матрице с количеством строк в правой матрице.
Рассмотрим пример.
In [ ]:
# реализация в numpy матричного умножения
print(f'Amat=\n {Amat}')
print(f'Bmat=\n {Bmat}')
Amat=
[[ 1 -2]
[ 0 3]
[ 2 -1]]
Bmat=
[[ 2 1]
[ 9 -3]]
In [ ]:
# перемножим их матричным умножением
Cmat = Amat @ Bmat
Dmat = np.dot(Amat, Bmat)
print(f'Cmat=\n {Cmat}')
print(f'Dmat=\n {Dmat}')
Cmat=
[[-16 7]
[ 27 -9]
[ -5 5]]
Dmat=
[[-16 7]
[ 27 -9]
[ -5 5]]
На этом умножении строится вся нейросетевая модель.
И, чтобы посчитать выход слоя, необходимо умножить эту матрицу на вектор x = (1, x1 , x2 , . . . , xn )
справа:
Z = W ∗ x
Рис. 3.2. Слой нейросети, состоящий из k нейронов, на вход которого подается m-мерный вектор
Пример.
Пусть у нас имеется слой, состоящий из 2-х нейронов, на вход которого подается вектор с 3-мя
компонентами (рис.3.2):
(x1 , x2 , x3 )
y = fa (z), z = W ∗ x,
где
1
⎛ ⎞
⎜ x1 ⎟
x = ⎜ ⎟
⎜x ⎟
2
⎝ ⎠
x3
In [ ]:
# проиллюстрируем конкретным примером расчета
x = np.array([[1], [-1], [2], [3]])
# x = np.array([1, -1, 2, 3]) # так тоже можно
z = np.dot(W, x)
y = np.sign(z)
print(f'z=\n {z}')
print(f'y=\n {y}')
z=
[[ 4]
[-2]]
y=
[[ 1]
[-1]]
ЗАДАЧА
Для того, чтобы получить допуск к зачету нужно набрать не менее 60 баллов.
А для того, чтобы получить зачет автоматом нужно набрать не менее 80 баллов.
W = (1, 1, 2, 2, 3)
Определите получил студент зачет автоматом или только допуск к зачету, если его баллы за
соответствующие задания равны:
x = (10, 8, 7, 6, 5)
Если z 1
≥ 0 - студент имеет допуск к зачету.
Если z 2
≥ 0 - студент имеет зачет автоматом.
Резюме
ввели понятие матрицы как таблицы, описывающей совокупность векторов
рассмотрели арифметические операции над матрицами
рассмотрели как с помощью матричного умножения рассчитываются полносвязные неросети