当前位置: 首页 > news >正文

pytorch建模的三种方式

# 可以使用以下3种方式构建模型:
#
# 1,继承nn.Module基类构建自定义模型。
#
# 2,使用nn.Sequential按层顺序构建模型。
#
# 3,继承nn.Module基类构建模型并辅助应用模型容器进行封装(nn.Sequential,nn.ModuleList,nn.ModuleDict)。
#
# 其中 第1种方式最为常见,第2种方式最简单,第3种方式最为灵活也较为复杂。
# 一、继承nn.Module基类构建自定义模型
from torch import nn
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3)self.pool1 = nn.MaxPool2d(kernel_size = 2,stride = 2)self.conv2 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5)self.pool2 = nn.MaxPool2d(kernel_size = 2,stride = 2)self.dropout = nn.Dropout2d(p = 0.1)self.adaptive_pool = nn.AdaptiveMaxPool2d((1,1))self.flatten = nn.Flatten()self.linear1 = nn.Linear(64,32)self.relu = nn.ReLU()self.linear2 = nn.Linear(32,1)def forward(self,x):x = self.conv1(x)x = self.pool1(x)x = self.conv2(x)x = self.pool2(x)x = self.dropout(x)x = self.adaptive_pool(x)x = self.flatten(x)x = self.linear1(x)x = self.relu(x)y = self.linear2(x)return y
net = Net()
print(net)
#查看参数
from torchkeras import summary
summary(net,input_shape= (3,32,32));

 # 二、使用nn.Sequential按层顺序构建模型 # 利用add_module方法

net = nn.Sequential()
net.add_module("conv1",nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3))
net.add_module("pool1",nn.MaxPool2d(kernel_size = 2,stride = 2))
net.add_module("conv2",nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5))
net.add_module("pool2",nn.MaxPool2d(kernel_size = 2,stride = 2))
net.add_module("dropout",nn.Dropout2d(p = 0.1))
net.add_module("adaptive_pool",nn.AdaptiveMaxPool2d((1,1)))
net.add_module("flatten",nn.Flatten())
net.add_module("linear1",nn.Linear(64,32))
net.add_module("relu",nn.ReLU())
net.add_module("linear2",nn.Linear(32,1))
print(net)
# 利用变长参数
net = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3),nn.MaxPool2d(kernel_size = 2,stride = 2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5),nn.MaxPool2d(kernel_size = 2,stride = 2),nn.Dropout2d(p = 0.1),nn.AdaptiveMaxPool2d((1,1)),nn.Flatten(),nn.Linear(64,32),nn.ReLU(),nn.Linear(32,1)
)
print(net)
# 三、继承nn.Module基类构建模型并辅助应用模型容器进行封装
# nn.Sequential作为模型容器
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv = nn.Sequential(nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3),nn.MaxPool2d(kernel_size = 2,stride = 2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5),nn.MaxPool2d(kernel_size = 2,stride = 2),nn.Dropout2d(p = 0.1),nn.AdaptiveMaxPool2d((1,1)))self.dense = nn.Sequential(nn.Flatten(),nn.Linear(64,32),nn.ReLU(),nn.Linear(32,1))def forward(self,x):x = self.conv(x)y = self.dense(x)return y
net = Net()
print(net)
# nn.ModuleList作为模型容器
# 注意下面中的ModuleList不能用Python中的列表代替。(即不用省略)
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.layers = nn.ModuleList([nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3),nn.MaxPool2d(kernel_size = 2,stride = 2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5),nn.MaxPool2d(kernel_size = 2,stride = 2),nn.Dropout2d(p = 0.1),nn.AdaptiveMaxPool2d((1,1)),nn.Flatten(),nn.Linear(64,32),nn.ReLU(),nn.Linear(32,1)])def forward(self,x):for layer in self.layers:x = layer(x)return x
net = Net()
print(net)
# nn.ModuleDict作为模型容器
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.layers_dict = nn.ModuleDict({"conv1":nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3),"pool": nn.MaxPool2d(kernel_size = 2,stride = 2),"conv2":nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5),"dropout": nn.Dropout2d(p = 0.1),"adaptive":nn.AdaptiveMaxPool2d((1,1)),"flatten": nn.Flatten(),"linear1": nn.Linear(64,32),"relu":nn.ReLU(),"linear2": nn.Linear(32,1)})def forward(self,x):layers = ["conv1","pool","conv2","pool","dropout","adaptive","flatten","linear1","relu","linear2","sigmoid"]for layer in layers:x = self.layers_dict[layer](x) # 只找有的 sigmoid是没有的return x
net = Net()
print(net)

http://www.lryc.cn/news/306474.html

相关文章:

  • GO-ICP的使用(一)
  • FPS游戏漫谈System.GC.Collect()强制进行垃圾回收
  • 第3集《灵峰宗论导读》
  • java面试设计模式篇
  • 桥接模式:解耦抽象与实现,实现灵活多变的扩展结构
  • HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)
  • Heap sorting
  • 开源模型应用落地-qwen2模型小试-入门篇(六)
  • c#程序,oracle使用Devart驱动解决第第三方库是us7ascii,数据乱码的问题
  • 代码随想录算法训练营第四一天 | 背包问题
  • AIDL的工作原理与使用示例 跨进程通信 远程方法调用RPC
  • K8S部署Java项目 pod报错 logs日志内容:no main manifest attribute, in app.jar
  • SQL实现模糊查询的四种方法总结
  • 爬虫基本库的使用(urllib库的详细解析)
  • 【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
  • react useMemo 用法
  • python学习笔记 - 标准库函数
  • 校招失败后,在小公司熬了 2 年终于进了字节跳动,竭尽全力....
  • PYTHON-使用正则表达式进行模式匹配
  • Fiddler工具 — 19.Fiddler抓包HTTPS请求(二)
  • 架构设计:流式处理与实时计算
  • Linux系统安装zookeeper
  • 【前端素材】推荐优质后台管理系统Modernize平台模板(附源码)
  • 二、Vue组件化编程
  • JVM跨代引用垃圾回收
  • AI:135-基于卷积神经网络的艺术品瑕疵检测与修复
  • C++标准头文件汇总及功能说明
  • glTF 添加数据属性(extras)
  • linux系统消息中间件rabbitmq普通集群的部署
  • TextCNN:文本分类卷积神经网络