pytorch: не в состоянии понять функцию model.forward

Мне нравится анализировать HTML с регулярными выражениями. Я не пытаюсь разбирать идиот HTML, который намеренно нарушен. Этот код является моим основным парсером (версия Perl):

$_ = join "",; tr/\n\r \t/ /s; s//>\n/g; s/\n ?\n/\n/g;
s/^ ?\n//s; s/ $//s; print

Он называется htmlsplit, разбивает HTML на строки, с одним тегом или фрагментом текста в каждой строке. Затем линии могут быть обработаны другими текстовыми инструментами и сценариями, такими как grep , sed , Perl и т. Д. Я даже не шучу :) Наслаждайтесь.

Достаточно просто переписать мой скрипт Perl-all-first Perl в приятную поточную вещь, если вы хотите обрабатывать огромные веб-страницы. Но это действительно не обязательно.

Бьюсь об заклад, я заберусь для этого.

HTML Split


Против моего ожидая, что это получило некоторые upvotes, поэтому я предлагаю несколько правильных выражений:

/(<.*?>|[^<]+)\s*/g    # get tags and text
/(\w+)="(.*?)"/g       # get attibutes

Они хороши для XML / XHTML.

С небольшими вариациями он может справиться с беспорядочным HTML ... или сначала конвертировать HTML -> XHTML.


Лучший способ записи регулярных выражений - в Lex / Yacc стиль, а не непрозрачные однострочные или прокомментированные многострочные чудовища. Я не делал этого здесь; эти им едва ли нужны.

0
задан Primusa 17 January 2019 в 20:13
поделиться

1 ответ

Я непрофессионал, поэтому я помогу вам с терминами непрофессионала:)

input_size = 784
hidden_sizes = [128, 64]
output_size = 10

Это параметры для слоев в вашей сети. Каждая нейронная сеть состоит из layers, и каждый layer имеет форму входа и выхода.

В частности, input_size имеет дело с формой ввода первого слоя. Это input_size всей сети. Каждый образец, который вводится в сеть, будет 1-мерным вектором длиной 784 (массив длиной 784).

hidden_size имеет дело с формами внутри сети. Мы расскажем об этом чуть позже.

output_size имеет дело с выходной формой последнего слоя. Это означает, что наша сеть будет выводить одномерный вектор длиной 10 для каждого образца.

Теперь, чтобы разбить определение модели построчно:

model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),

Часть nn.Sequential просто определяет сеть, каждый входной аргумент определяет новый слой в этой сети в этом порядке. [1134 ]

nn.Linear(input_size, hidden_sizes[0]) является примером такого слоя. Это первый слой нашей сети, который принимает входные данные размером input_size и выводит вектор размером hidden_sizes[0]. Размер вывода считается «скрытым» в том смысле, что он не является входом или выходом всей сети. Он «скрыт», потому что он расположен внутри сети вдали от входных и выходных концов сети, с которой вы взаимодействуете, когда фактически используете ее.

Это называется Linear, потому что оно применяет линейное преобразование путем умножения входных данных на его матрицу весов и добавления своей матрицы смещения к результату. (Y = Ax + b, Y = выход, x = вход, A = вес, b = смещение).

nn.ReLU(),

ReLU является примером функции активации. Эта функция применяет какое-то преобразование к выходному сигналу последнего уровня (уровня, описанного выше) и выводит результат этого преобразования. В этом случае используемой функцией является функция ReLU, которая определяется как ReLU(x) = max(x, 0). Функции активации используются в нейронных сетях, потому что они создают нелинейности. Это позволяет вашей модели моделировать нелинейные отношения.

nn.Linear(hidden_sizes[0], hidden_sizes[1]),

Из того, что мы обсуждали выше, это еще один пример layer. Он принимает входной сигнал hidden_sizes[0] (такой же формы, что и выходной сигнал последнего слоя) и выдает одномерный вектор длины hidden_sizes[1].

nn.ReLU(),

Снова применяет функцию ReLU.

nn.Linear(hidden_sizes[1], output_size)

То же, что и вышеупомянутые два слоя, но наша выходная форма на этот раз - output_size.

nn.Softmax(dim=1))

Еще одна функция активации. Эта функция активации превращает логиты, выведенные с помощью nn.Linear, в фактическое распределение вероятностей. Это позволяет модели выводить вероятность для каждого класса. На данный момент наша модель построена.

# Forward pass through the network and display output
images, labels = next(iter(trainloader))
images.resize_(images.shape[0], 1, 784)
print(images.shape)

Это просто предварительная обработка обучающих данных и перевод их в правильный формат.

ps = model.forward(images[0,:])

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

0
ответ дан Primusa 17 January 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: