深度学习笔记_2、多种方法定义神经网络

1、nn.Module

python 复制代码
import torch
from torch import nn
import torch.nn.functional as F
class Model_Seq(nn.Module):
    ""
    def __init__(self,in_dim,n_hidden_1,n_hidden_2,n_hidden_3,out_dim):

        super(Model_Seq,self).__init__()
        self.flatten = nn.Flatten()

        self.linear1=nn.Linear(in_dim,n_hidden_1)
        self.bn1=nn.BatchNorm1d(n_hidden_1)

        self.linear2  = nn.Linear(n_hidden_1,n_hidden_2)
        self.bn2 = nn.BatchNorm2d(n_hidden_2)

        self.linear3  = nn.Linear(n_hidden_2,n_hidden_3)
        self.bn3 = nn.BatchNorm3d(n_hidden_3)

        self.out=nn.Linear(n_hidden_3,out_dim)


    def forward(self,x):
        x=self.flatten(x)

        x=self.linear1(x)
        x=self.bn1(x)
        x=F.relu(x)

        x = self.linear2(x)
        x = self.bn2(x)
        x = F.relu(x)

        x = self.linear3(x)
        x = self.bn3(x)
        x = F.relu(x)

        x=self.out(x)
        x=F.softmax(x,dim=1)
        return x

in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000
model_seq=  Model_Seq(in_dim,n_hidden_1,n_hidden_2,n_hidden_3,out_dim)


print(model_seq)

2、Sequential

python 复制代码
import torch
from torch import nn

in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000

Seq_arg=nn.Sequential(
    nn.Flatten(),

    nn.Linear(in_dim, n_hidden_1),
    nn.BatchNorm1d(n_hidden_1),
    nn.ReLU(),

    nn.Linear(n_hidden_1,n_hidden_2 ),
    nn.BatchNorm1d(n_hidden_2),
    nn.ReLU(),

    nn.Linear(n_hidden_2, n_hidden_3),
    nn.BatchNorm1d(n_hidden_3),
    nn.ReLU(),

    nn.Linear(n_hidden_3, out_dim),
    nn.Softmax(dim=1)

)

print(Seq_arg)

3、add_module

python 复制代码
import torch
from torch import nn
from torchsummary import summary


in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000

Seq_module=nn.Sequential()
Seq_module.add_module("flatten",nn.Flatten())

Seq_module.add_module("linear1", nn.Linear(in_dim,n_hidden_1))
Seq_module.add_module("bn1",nn.BatchNorm1d(n_hidden_1))
Seq_module.add_module("relu1",nn.ReLU())

Seq_module.add_module("linear2", nn.Linear(n_hidden_1,n_hidden_2))
Seq_module.add_module("bn2",nn.BatchNorm1d(n_hidden_2))
Seq_module.add_module("relu2",nn.ReLU())

Seq_module.add_module("linear3", nn.Linear(n_hidden_2,n_hidden_3))
Seq_module.add_module("bn3",nn.BatchNorm1d(n_hidden_3))
Seq_module.add_module("relu3",nn.ReLU())

Seq_module.add_module("out",nn.Linear(n_hidden_3,out_dim))
Seq_module.add_module("softmax",nn.Softmax(dim=1))

print(Seq_module)

4、OrderedDict

python 复制代码
import torch
from torch import nn
from collections import OrderedDict
in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000

Seq_dict = nn.Sequential(OrderedDict([
    ("flatten",nn.Flatten()),
    ("linear1",nn.Linear(in_dim,n_hidden_1)),
    ("bn1",nn.BatchNorm1d(n_hidden_1)),
    ("relu1",nn.ReLU()),

    ("linear2",nn.Linear(n_hidden_1, n_hidden_2)),
    ("bn2",nn.BatchNorm1d(n_hidden_2)),
    ("relu2",nn.ReLU()),

    ("linear3",nn.Linear(n_hidden_2, n_hidden_3)),
    ("bn3",nn.BatchNorm1d(n_hidden_3)),
    ("relu3",nn.ReLU()),

    ("out",nn.Linear(n_hidden_3, out_dim)),
    ("softmax",nn.Softmax(dim=1))]))


print(Seq_dict)

5、继承nn.Module基类

python 复制代码
import torch
from torch import nn
import torch.nn.functional as F

in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000

class Model_lay(nn.Module):
    """
    使用sequential构建网络,Sequential()函数的功能是将网络的层组合到一起
    """

    def __init__(self, in_dim, n_hidden_1, n_hidden_2, n_hidden_3,out_dim):
        super(Model_lay, self).__init__()
        self.flatten = nn.Flatten()
        self.layer1 = nn.Sequential(nn.Linear(in_dim, n_hidden_1), nn.BatchNorm1d(n_hidden_1))
        self.layer2 = nn.Sequential(nn.Linear(n_hidden_1, n_hidden_2), nn.BatchNorm1d(n_hidden_2))
        self.layer3 = nn.Sequential(nn.Linear(n_hidden_2, n_hidden_3), nn.BatchNorm1d(n_hidden_3))
        self.out = nn.Sequential(nn.Linear(n_hidden_3, out_dim))

    def forward(self, x):
        x = self.flatten(x)
        x = F.relu(self.layer1(x))
        x = F.relu(self.layer2(x))
        x = F.relu(self.layer3(x))
        x = F.softmax(self.out(x), dim=1)
        return x

model_lay= Model_lay(in_dim, n_hidden_1, n_hidden_2 ,n_hidden_3,out_dim)
print(model_lay)

6、nn.Modulelist模型容器

python 复制代码
import torch
from torch import nn
import torch.nn.functional as F

in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000

class Model_lst(nn.Module):

    def __init__(self, in_dim, n_hidden_1, n_hidden_2,n_hidden_3, out_dim):
        super(Model_lst, self).__init__()
        self.layers = nn.ModuleList([
            nn.Flatten(),
            nn.Linear(in_dim, n_hidden_1),
            nn.BatchNorm1d(n_hidden_1),
            nn.ReLU(),

            nn.Linear(n_hidden_1, n_hidden_2),
            nn.BatchNorm1d(n_hidden_2),
            nn.ReLU(),

            nn.Linear(n_hidden_2, n_hidden_3),
            nn.BatchNorm1d(n_hidden_3),
            nn.ReLU(),

            nn.Linear(n_hidden_3, out_dim),
            nn.Softmax(dim=1)])

    def forward(self, x):
        for layer in self.layers:
            x = layer(x)
        return x

class Model_lst(nn.Module):

    def __init__(self, in_dim, n_hidden_1, n_hidden_2, n_hidden_3,out_dim):
        super(Model_lst, self).__init__()
        self.layers = nn.ModuleList([
            nn.Flatten(),
            nn.Linear(in_dim, n_hidden_1),
            nn.BatchNorm1d(n_hidden_1),
            nn.ReLU(),

            nn.Linear(n_hidden_1, n_hidden_2),
            nn.BatchNorm1d(n_hidden_2),
            nn.ReLU(),

            nn.Linear(n_hidden_2, n_hidden_3),
            nn.BatchNorm1d(n_hidden_3),
            nn.ReLU(),

            nn.Linear(n_hidden_3, out_dim),
            nn.Softmax(dim=1)])

    def forward(self, x):
        for layer in self.layers:
            x = layer(x)
        return x

model_lst = Model_lst(in_dim, n_hidden_1, n_hidden_2, n_hidden_3,out_dim)
print(model_lst)

7、nn.ModuleDict模型容器

python 复制代码
import torch
from torch import nn
in_dim=1000
n_hidden_1=800
n_hidden_2=500
n_hidden_3=800
out_dim=1000
class Model_dict(nn.Module):

    def __init__(self, in_dim, n_hidden_1, n_hidden_2,n_hidden_3, out_dim):
        super(Model_dict, self).__init__()
        self.layers_dict = nn.ModuleDict({"flatten": nn.Flatten(),
                                          "linear1": nn.Linear(in_dim, n_hidden_1),
                                          "bn1": nn.BatchNorm1d(n_hidden_1),
                                          "relu": nn.ReLU(),
                                          "linear2": nn.Linear(n_hidden_1, n_hidden_2),
                                          "bn2": nn.BatchNorm1d(n_hidden_2),
                                          "linear3": nn.Linear(n_hidden_2, n_hidden_3),
                                          "bn2": nn.BatchNorm1d(n_hidden_3),
                                          "out": nn.Linear(n_hidden_3, out_dim),
                                          "softmax": nn.Softmax(dim=1)
                                          })

    def forward(self, x):
        layers = ["flatten", "linear1", "bn1", "relu", "linear2", "bn2", "relu", "out", "softmax"]
        for layer in layers:
            x = self.layers_dict[layer](x)
        return x

model_dict = Model_dict(in_dim, n_hidden_1, n_hidden_2,n_hidden_3, out_dim)
print(model_dict)
相关推荐
LXT7122 小时前
每日英语一读|为什么夏天的雷雨,总爱在傍晚出现?
深度学习·学习
I'mChloe3 小时前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
海带紫菜菠萝汤3 小时前
MemT 1.0 开源:128K 历史装进 40 MiB,记忆从外挂搬进模型里
人工智能·深度学习·ai·开源·大模型
库玛西4 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
摇滚侠4 小时前
《Java并发编程之美》第 2 章 并发编程的其他基础知识 阅读笔记 3
android·java·笔记
ss2735 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 18 PostgreSQL基本索引原理与创建
数据库·笔记·postgresql
qq_284274056 小时前
电气控制笔记:常用低压电器符号原理与异步电动机点动、自锁、多地控制电路(含考点)
笔记·学习·自动化·制造
goehou6 小时前
LoRA 微调实战 - 显存、标签掩码与合并部署的踩坑记录(附清单)
深度学习·lora·大模型·模型微调
坤坤子吖6 小时前
Linux 线程同步与互斥——条件变量与线程同步
linux·开发语言·c++·笔记·学习
Smoothcloud润云6 小时前
GPU算力平台跑知识库问答,模型回答总跑偏?先排查检索链路
人工智能·python·深度学习·gpu算力·gpu