Библиотека knigago >> Компьютеры: Языки и системы программирования >> Python >> Глубокое обучение: легкая разработка проектов на Python


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 994, книга: Терминатор II: Судный день
автор: Вильям Вишер

"Терминатор II: Судный день", написанный Уильямом Вишером, остается классикой научной фантастики, которая продолжает увлекать читателей на протяжении десятилетий. Этот захватывающий роман, сосредоточенный на эпической битве между человечеством и восставшими машинами, демонстрирует блестящее мастерство Вишера в создании захватывающих сюжетов и незабываемых персонажей. В этом романе мы погружаемся в мрачный мир будущего, где восстание искусственного интеллекта привело к опустошению....

СЛУЧАЙНАЯ КНИГА

Чемоданчик Пандоры. Наталья Николаевна Александрова
- Чемоданчик Пандоры

Жанр: Детектив

Год издания: 2014

Серия: Смешные детективы

Сет Вейдман - Глубокое обучение: легкая разработка проектов на Python

Глубокое обучение: легкая разработка проектов на Python
Книга - Глубокое обучение: легкая разработка проектов на Python.  Сет Вейдман  - прочитать полностью в библиотеке КнигаГо
Название:
Глубокое обучение: легкая разработка проектов на Python
Сет Вейдман

Жанр:

Искусственный интеллект, Python

Изадано в серии:

Бестселлеры o’reilly

Издательство:

Питер

Год издания:

ISBN:

978-5-4461-1675-1

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Глубокое обучение: легкая разработка проектов на Python"

Взрывной интерес к нейронным сетям и искусственному интеллекту затронул уже все об- ласти жизни, и понимание принципов глубокого обучения необходимо каждому разработчику ПО для решения прикладных задач. Эта практическая книга представляет собой вводный курс для всех, кто занимается обработкой данных, а также для разработчиков ПО. Вы начнете с ос- нов глубокого обучения и быстро перейдете к более сложным архитектурам, создавая проекты с нуля. Вы научитесь использовать многослойные, сверточные и рекуррентные нейронные сети. Только понимая принцип их работы (от «математики» до концепций), вы сделаете свои проекты успешными. В этой книге: xx Четкие схемы, помогающие разобраться в нейросетях, и примеры рабочего кода. xx Методы реализации многослойных сетей с нуля на базе простой объектно-ориентированной структуры. xx Примеры и доступные объяснения сверточных и рекуррентных нейронных сетей. xx Реализация концепций нейросетей с помощью популярного фреймворка PyTorch. 16+

Читаем онлайн "Глубокое обучение: легкая разработка проектов на Python". [Страница - 84]

можно понять, что:
.

Градиент потерь с учетом смещения
Далее мы подробно рассмотрим, почему при вычислении производной потери по смещению в полносвязной нейронной сети мы суммируем по axis=0.
Добавление смещения в нейронную сеть происходит в следующем контексте: у нас есть пакет данных, представленный матрицей измерения n
строк (размер пакета) на f столбцов (количество объектов), и мы прибавляем число к каждой из функций. Например, в примере нейронной сети
из главы 2 у нас есть 13 функций, а смещение B имеет 13 чисел; первое
число будет добавлено к каждой строке в первом столбце M1 = np.dot (X,
weights [W1]), второе число будет добавлено к каждой строке во втором
столбце и т. д. Далее, в сети B2 будет содержать одно число, которое будет
просто добавлено к каждой строке в одном столбце M2. Таким образом, поскольку в каждую строку матрицы будут добавлены одинаковые числа, на
обратном проходе нам нужно сложить градиенты вдоль измерения, представляющего строки, к которым был добавлен каждый элемент смещения.
Вот почему мы суммируем выражения для dLdB1 и dLdB2 вдоль axis=0,
например dLdB1 = (dLdN1 × dN1dB1).sum (axis = 0). На рис. A.1 приведено
визуальное объяснение с некоторыми комментариями.

Свертка с помощью умножения матриц
Наконец, мы покажем, как выразить пакетную операцию многоканальной
свертки в контексте пакетного умножения матриц, чтобы эффективно
реализовать ее в NumPy. Чтобы понять, как работает свертка, рассмотрим,
что происходит на прямом проходе полносвязной нейронной сети:
yy Получаем ввод размера [batch_size, in_features].
yy Умножаем его на параметр размера [in_features, out_features].
yy Получаем результирующий вывод размера [batch_size, out_features].

Свертка с помощью умножения матриц   267

x11+ b11 ...

.
.
.

xn1+ b11

... x1f+ b1f
.
.
:=
.
xnf + b1f

O11
O21

O12 ... O1f
O22
O2f

On1

On2

.
.
.

.
.
.

.
.
.

: = Вывод операции BiasAdd

Onf

Включает Включает Включает
b11
b12
b1f

b11 влияет на производительность пропорционально: (011grad + 021grad + ... + 0n1grad)
b1f влияет на производительность пропорционально: (01fgrad + 02fgrad + ... + 0nfgrad)

Общий градиент [b11b12...b1f] представляет собой сумму выходного градиента
по строкам (ось = 0)

Рис. A.1. Краткое изложение того, почему вычисление производной выходного сигнала
полносвязного слоя по смещению включает суммирование по axis = 0

В сверточном слое наоборот:
yy Получаем ввод размера [batch_size, in_channels, img_height, img_width].
yy Сворачиваем его с параметром размера [in_channels, out_channels,
param_height, param_width].
yy Получаем результирующий вывод размера [batch_size, in_channels,
img_height, img_width].
Ключ к тому, чтобы операция свертки выглядела более похожей на операцию
передачи вперед, состоит в том, чтобы сначала извлечь «фрагменты изображения» размером img_height × img_width из каждого канала входного изображения. Как только эти фрагменты будут извлечены, входные данные могут быть
изменены, так что операция свертки может быть выражена как умножение
пакетной матрицы с использованием функции Num.Py np.matmul. Сначала:
def _get_image_patches(imgs_batch: ndarray,
fil_size: int):
'''
imgs_batch: [batch_size, channels, img_width, img_height]
fil_size: int
'''
# подача изображений
imgs_batch_pad = np.stack([_pad_2d_channel(obs, fil_size // 2)
for obs in imgs_batch])
patches = []
img_height = imgs_batch_pad.shape[2]

268  

Приложение A. Глубокое погружение

# для каждого места на изображении...
for h in range(img_height-fil_size+1):
for w in range(img_height-fil_size+1):
# ...берем фрагмент размером [fil_size, fil_size]
patch = imgs_batch_pad[:, :, h:h+fil_size, w:w+fil_size]
patches.append(patch)
# Получение вывода размером
# [img_height * img_width, batch_size, n_channels, fil_size,
# fil_size]
return np.stack(patches)

Затем можно вычислить вывод операции свертки следующим образом:
1. Взять фрагменты изображения размером [batch_size, in_channels,
img_height x img_width, filter_size, filter_size].
2. Заменить их на [ b a t c h _ s i z e , i m g _ h e i g h t × i m g _ w i d t h , i n _
channels × filter_size × filter_size].

3. Параметр формы должен быть [in_channels × filter_size × filter_
size, out_channels].
4. После умножения пакетной матрицы результатом будет [batch_size,
img_height × img_width, out_channels].
5. Заменить на [batch_size, out_channels, img_height, img_width].
def _output_matmul(input_: ndarray,
param: ndarray) -> ndarray:
'''
conv_in: [batch_size, in_channels, img_width, img_height]
param: [in_channels, out_channels, fil_width, fil_height]
'''
param_size
batch_size
img_height
patch_size

=
=
=
=

param.shape[2]
input_.shape[0]
input_.shape[2]
param.shape[0] * param.shape[2] * param.shape[3]

patches = _get_image_patches(input_, param_size)
patches_reshaped = (
patches

Свертка с помощью умножения матриц   269

.transpose(1, 0, 2, 3, 4)
.reshape(batch_size, img_height * img_height, -1)
)
param_reshaped = param.transpose(0, 2, 3, 1).reshape(patch_size, -1)
output = np.matmul(patches_reshaped, --">

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


Ваш e-mail является приватным и не будет опубликован в комментарии.

Другие книги из серии «Бестселлеры o’reilly»:

Законы UX-дизайна. Джон Яблонски
- Законы UX-дизайна

Жанр: Графика. Дизайн. Мультимедиа

Год издания: 2022

Серия: Бестселлеры o’reilly

Python. Карманный справочник. Марк Лутц
- Python. Карманный справочник

Жанр: Справочники

Год издания: 2015

Серия: Бестселлеры o’reilly