Линейный слой также называют полносвязным слоем. Этот слой помогает преобразовать размерность вывода предыдущего слоя.
В следующем коде мы импортируем модуль torch, из которого мы сможем преобразовать размерность вывода предыдущего слоя:
- inp = torch.randn(15, 9) используется в качестве входного значения.
- вес = torch.randn(7,9) используется для генерации веса.
- torch.mm(inp,weght.t()) используется как умножение матриц.
- lay=nn.Linear(in_features=9,out_features=7,bias=False) используется для создания сети прямой связи.
- lay.weght=nn.Parameter(weght) используется для определения веса.
import torch import torch.nn as nn inp = torch.randn(15, 9) weght = torch.randn(7,9) torch.mm(inp,weght.t()) lay=nn.Linear(in_features=9,out_features=7,bias=False) lay.weght=nn.Parameter(weght) lay.weght lay(inp)
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что на экране отображается полносвязный слой PyTorch.
- Инициализация полносвязного слоя
- Входные данные
- Полносвязный слой CNN
- Полносвязный слой 2d
- Слой со 128 нейронами
- Отсев полносвязного слоя
- Relu
Инициализация полносвязного слоя
Линейный слой используется на последнем этапе нейронной сети. Линейный слой также называют полносвязным слоем.
Линейный слой инициализируется и помогает преобразовать размерность выходных данных предыдущего слоя.
Для этого модель может легко объяснить взаимосвязь между значениями данных.
В следующем коде мы импортируем модуль факела, из которого мы сможем инициализировать полносвязный слой:
- nn.Conv2d() используется для применения 2d-свертки к входным данным.
- nn.Dropout2d() используется для обеспечения независимости между картами объектов.
- self.fc = nn.Linear(9218, 130) используется как первый полносвязный слой.
- self.fc1 = nn.Linear(130, 12) используется как второй полносвязный слой.
- print(nnmodel) используется для печати модели.
import torch as tor import torch.nn as nn import torch.nn.functional as fun class model(nn.Module): def __init__(self): super(model, self).__init__() self.conv = nn.Conv2d(3, 34, 5, 3) self.conv1 = nn.Conv2d(34, 66, 5, 3) self.dropout = nn.Dropout2d(0.27) self.dropout1 = nn.Dropout2d(0.7) self.fc = nn.Linear(9218, 130) # Second fully connected layer that outputs our 10 labels self.fc1 = nn.Linear(130, 12) nnmodel = model() print(nnmodel)
Выход:
В следующем выводе мы видим, что полностью подключенный уровень успешно инициализируется.
Входные данные
«Полносвязный слой» умножает входные данные на матрицу весов и добавляет бай по весу. Входные данные нейронной сети представляют собой тип Batch_size*channel_number*Height*Weight.
В следующем коде мы импортируем модуль torch, из которого мы сможем получить входной размер:
- nn.Conv2d() ожидает, что входные данные будут иметь форму pack_size, input_channels, input_height, input_width.
- nn.Linear() используется в качестве нейронной сети прямого распространения.
- print(fc) используется для печати полностью связанной нейронной сети.
import torch import torch.nn as nn import torch.nn.functional as fun class fcmodel(nn.Module): def __init__(self): super(fcmodel, self).__init__() self.conv = nn.Conv2d(5, 8, 7) self.pool = nn.MaxPool2d(2,2) self.conv1 = nn.Conv2d(8, 18, 7) self.fc = nn.Linear(16*5*5, 120) self.fc1 = nn.Linear(140, 86) self.fc2 = nn.Linear(86, 12) def forward(self, y): y = self.pool(fun.relu(self.conv(y))) y = self.pool(fun.relu(self.conv1(y))) y = y.view(-1, 16*5*5) y = fun.relu(self.fc(y)) y = fun.relu(self.fc1(y)) y = self.fc2(y) return y fc = fcmodel() print(fc)
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что входной размер полностью связанного слоя печатается на экране.
Полносвязный слой CNN
CNN — самый популярный метод решения задач компьютерного зрения, например, обнаружения объектов. CNN ищет закономерности на изображении.
Линейный слой используется на последнем этапе сверточной нейронной сети. Линейный слой также называют полносвязным слоем.
В следующем коде мы импортируем модуль torch, из которого мы сможем создать полносвязный слой cnn:
- def вперед(self, y) здесь y представляет наши данные.
- y = self.conv(y) используется для передачи данных через conv.
- y = func.relu(y) используется выпрямленная линейная функция активации по y.
- y = func.max_pool2d(y, 2) используется для запуска максимального пула по y.
- y = self.dropout(y) используется для передачи данных через исключение.
- y = torch.flatten(y, 1) используется как сглаживание y с start_dim 1.
- y = self.fc(y) используется для передачи данных через fc.
- print(cnn) используется для печати слоя cnn.
import torch import torch.nn as nn import torch.nn.functional as func class cnnfc(nn.Module): def __init__(self): super(cnnfc, self).__init__() self.conv = nn.Conv2d(3, 34, 5, 3) self.conv1 = nn.Conv2d(34, 66, 5, 3) self.dropout = nn.Dropout2d(0.30) self.dropout1 = nn.Dropout2d(0.10) self.fc = nn.Linear(9218, 130) self.fc1 = nn.Linear(130, 15) def forward(self, y): y = self.conv(y) y = func.relu(y) y = self.conv1(y) y = func.relu(y) y = func.max_pool2d(y, 2) y = self.dropout(y) y = torch.flatten(y, 1) y = self.fc(y) y = func.relu(y) y = self.dropout1(y) y = self.fc1(y) cnn = cnnfc() print(cnn)
Выход:
В следующем выводе мы видим, что полностью подключенный слой PyTorch cnn печатается на экране.
Полносвязный слой 2d
2-мерный полносвязный слой помогает изменить размерность вывода предыдущего слоя. Модель может легко определить взаимосвязь между значением данных.
В следующем коде мы импортируем модуль torch, из которого мы сможем инициализировать 2D полносвязный слой:
- nn.Conv2d() используется для выполнения свертки 2D-данных.
- nn.Linear() используется для создания нейронной сети прямого распространения.
- modl = model() используется для запуска модели.
- print(modl) используется для печати модели.
import torch import torch.nn as nn import torchvision import torch.nn.functional as func import torchvision.transforms as transforms class model(nn.Module): def __init__(self): super(model, self).__init__() self.conv = nn.Conv2d(in_channels=3, out_channels=34, kernel_size= 7,stride = 3) self.conv1 = nn.Conv2d(34, 66, 7, 2) self.fc = nn.Linear(66*22*22, 49) def forward(self, y): y = func.relu(self.conv(y)) y = func.relu(self.conv1(y)) y = func.max_pool2d(y, 1) y = torch.flatten(y, 1) y = self.fc(y) out = func.log_softmax(y, dim=1) return out # initiating the model modl = model() print(modl)
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что полносвязный слой PyTorch 2d печатается на экране.
Слой со 128 нейронами
Полностью подключенный уровень определяется как уровень, на котором все входы одного уровня подключены к каждому блоку активации следующего уровня.
В следующем коде мы импортируем модуль torch, из которого сможем создать полносвязный слой со 128 нейронами.
- self.conv = nn.Conv2d(1, 35,(7, 7), дополнение = 0) используется в качестве свертки с 35 картами функций размером 7 x 7 с активацией ReLU.
- self.fc = nn.Linear(20 * 7**4, 128) используется как полносвязный слой со 128 нейронами.
- z = self.conv(y) используется для передачи данных через conv.
- z = func.relu(z) используется как выпрямленно-линейная функция активации по z.
- z = func.max_pool2d(z, 2) выполнить максимальное объединение по z.
- z = self.dropout(z) данные могут передаваться через отсев.
- z = torch.flatten(z, 1) сгладить z с start_dim = 1.
- cnn = cnnwithneurons() используется для запуска модели.
import torch import torch.nn.functional as func from torch import nn class cnnwithneurons(nn.Module): def __init__(self): super(cnnwithneurons, self).__init__() self.conv = nn.Conv2d(1, 35,(7, 7), padding=0) self.conv1 = nn.Conv2d(35, 20,(5, 5), padding=0) self.fc = nn.Linear(20 * 7**4, 128) self.fc1 = nn.Linear(128, 52) self.fc2 = nn.Linear(52, 12) def forward(self, z): z = self.conv(y) z = func.relu(z) z = self.conv1(z) z = func.relu(z) z = func.max_pool2d(z, 2) z = self.dropout(z) z = torch.flatten(z, 1) z = self.fc(z) z = func.relu(z) z = self.dropout1(z) z = self.fc1(z) cnn = cnnwithneurons() print(cnn)
Выход:
В следующем выводе мы видим, что на экране напечатан полносвязный слой со 128 нейронами.
Отсев полносвязного слоя
Техника отсева используется для удаления нейронной сети для имитации одновременного обучения большого количества архитектур.
В следующем коде мы импортируем модуль torch, из которого мы сможем получить полностью связанный слой с выпадением.
- self.conv = nn.Conv2d(5, 34, 5) ожидает ввода в форме pack_size, input_channels, input_height, input_width.
- nn.Linear() используется для создания нейронной сети прямого распространения.
- self.dropout = nn.Dropout(0,27) используется для определения доли выпадающих нейронов.
- model =dropoutmodel() используется для запуска модели.
- print(model) используется для печати модели.
import torch from torch import nn import torch.nn.functional as func from torch import nn class dropoutmodel(nn.Module): def __init__(self, input_shape=(3,32,32)): super(dropoutmodel, self).__init__() self.conv = nn.Conv2d(5, 34, 5) self.conv1 = nn.Conv2d(34, 66, 5) self.conv2 = nn.Conv2d(66, 130, 5) self.pool = nn.MaxPool2d(2,2) self.fc = nn.Linear(20 * 9**4, 218) self.fc1 = nn.Linear(218, 10) # Define proportion or neurons to dropout self.dropout = nn.Dropout(0.27) def forward(self, z): z = self._forward_features(z) z = z.view(z.size(0), -1) z = self.dropout(z) z = func.relu(self.fc1(z)) # Apply dropout z = self.dropout(z) z = self.fc2(z) return z model =dropoutmodel() print(model)
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что полносвязный отсев PyTorch печатается на экране.
Relu
Прежде чем двигаться дальше, нам нужно иметь некоторые знания о relu. ReLu означает выпрямленную линейную функцию активации. Она также известна как нелинейная функция активации, которая используется в многолинейной нейронной сети.
В следующем коде мы импортируем модуль факела, из которого мы сможем создать полносвязный слой relu.
- class fcrmodel(nn.Module) используется для определения класса сети.
- super().__init__() используется для вызова конструктора из суперкласса.
- nn.Linear() используется для создания нейронной сети прямого распространения.
- func.relu(self.fc1(z)) используется для определения прямого прохода.
- rmodl = fcrmodel() используется для запуска модели.
- print(rmodl) используется для печати архитектуры модели.
import torch import torch.nn.functional as func from torch import nn class fcrmodel(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(18, 14) self.fc1 = nn.Linear(14, 12) self.fc2 = nn.Linear(12, 3) def forward(self, z): z = func.relu(self.fc1(z)) z = func.relu(self.fc2(z)) z = torch.sigmoid(self.fc3(z)) return z rmodl = fcrmodel() print(rmodl)
Выход:
В следующем выводе мы видим, что активация relu полностью подключенного слоя PyTorch печатается на экране.