当前位置:网站首页>Neural networks - use sequential to build neural networks

Neural networks - use sequential to build neural networks

2022-07-01 04:46:00 booze-J

Let's take this neural network diagram as an example , To build a comparison to see the normal situation of building a neural network and using Sequential The difference between building Neural Networks , And some points needing attention in building neural network .
 Insert picture description here

Under normal circumstances, build a neural network

Build neural network code :

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential


class Booze(nn.Module):

    def __init__(self):
        super(Booze, self).__init__()
        # 1. When building a network according to the network diagram , Some parameters are not given in the network diagram , It needs to be calculated by yourself , Like padding,stride wait 
        self.conv1 = Conv2d(3,32,5,padding=2)
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32,32,5,padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32,64,5,padding=2)
        self.maxpool3 = MaxPool2d(2)
        self.flatten = Flatten()
        # 2. When setting this linear layer in_feature and out_feature You may also need to do it yourself , This in_feature You can also print flatten Check it out. 
        self.linear1 = Linear(1024,64)
        self.linear2 = Linear(64,10)


    def forward(self,x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

obj = Booze()
print(obj)
'''3. A simple test of the network structure '''
input = torch.ones((64,3,32,32))
output = obj(input)
print(output.shape)

There are some points to note in the above code , It needs to be presented separately .
1. When building a network according to the network diagram , Some parameters are not given in the network diagram , It needs to be calculated by yourself , Like padding,stride wait
It's like building the first convolution layer , You need to calculate by yourself padding and stride. So how to calculate ? We need to use Official documents The calculation formula provided .
 Insert picture description here
2. When building this linear layer in_feature You may also need to do it yourself , This in_feature You can also print flatten Check it out.

torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)

Flatten Can pass Official documents To use the .

# (batch_size,channels,H,W)=(32, 1, 5, 5)
input = torch.randn(32, 1, 5, 5)
# With default parameters
m = nn.Flatten()
output = m(input)
output.size()
# torch.Size([32, 25]) batch_size=32
# With non-default parameters
m = nn.Flatten(0, 2)
output = m(input)
output.size()
# torch.Size([160, 5]) batch_size=160 

Use Sequential Building neural networks

Build neural network code :

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriter


class Booze(nn.Module):

    def __init__(self):
        super(Booze, self).__init__()
        self.model1 = Sequential(
            Conv2d(3, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self,x):
        x = self.model1(x)
        return x

obj = Booze()
print(obj)
''' A simple test of the network structure '''
input = torch.ones((64,3,32,32))
output = obj(input)
print(output.shape)

''' Visualize the network model '''
writer = SummaryWriter("logs")
writer.add_graph(obj,input)
writer.close()

There are also some points to note in the above code , It needs to be presented separately .
3. After setting up the network , A simple test of the network structure is needed

obj = Booze()
print(obj)
''' A simple test of the network structure '''
input = torch.ones((64,3,32,32))
output = obj(input)
print(output.shape)

Just like the code above , After the operation, no error will be reported .

4. After the network is set up , Yes, you can use tensorboard To visualize the network model

''' Visualize the network model '''
writer = SummaryWriter("logs")
writer.add_graph(obj,input)
writer.close()

It's used here add_graph This method , Please refer to Official documents , How to use it and add_images and add_scalar almost .
The results are as follows :
 Insert picture description here

Specific differences

In fact, it is easy to see from the code .
Normal condition :

def __init__(self):
        super(Booze, self).__init__()
        self.conv1 = Conv2d(3,32,5,padding=2)
        self.maxpool1 = MaxPool2d(2)
        self.conv2 = Conv2d(32,32,5,padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32,64,5,padding=2)
        self.maxpool3 = MaxPool2d(2)
        self.flatten = Flatten()
        self.linear1 = Linear(1024,64)
        self.linear2 = Linear(64,10)


    def forward(self,x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x

Sequential build :

class Booze(nn.Module):

    def __init__(self):
        super(Booze, self).__init__()
        self.model1 = Sequential(
            Conv2d(3, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self,x):
        x = self.model1(x)
        return x
```
原网站

版权声明
本文为[booze-J]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/182/202207010435295283.html