pytorch ReSet18模型

server/2025/2/8 23:46:03/

import torch
import torch.nn as nn
from torchsummary import summary

class Residual(nn.Module):
def init(self,in_channel,out_channel,use_1conv = False,strides=1):
super(Residual,self).init()
self.Relu = nn.ReLU()
#################conv1和CONV2的 stride必须是相同的,才能保证相同的像素宽度和高度
self.conv1 = nn.Conv2d(in_channels=in_channel,out_channels=out_channel,kernel_size=3,padding=1,stride=strides)
self.conv2= nn.Conv2d(in_channels=out_channel,out_channels=out_channel,kernel_size=3,padding=1)
self.bn1 = nn.BatchNorm2d(out_channel)
self.bn2 = nn.BatchNorm2d(out_channel)
if use_1conv:
self.conv3 = nn.Conv2d(in_channels=in_channel,out_channels=out_channel,kernel_size=1,stride=strides)
else:
self.conv3 = None

def forward(self,x):y= self.Relu(self.bn1(self.conv1(x)))y =self.bn2(self.conv2(y))if self.conv3:x = self.conv3(x)y=self.Relu(y+x)return y

class ResNet18(nn.Module):
def init(self,Residual):
super(ResNet18,self).init()
self.b1 = nn.Sequential(
nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),
nn.ReLU(),
nn.BatchNorm2d(64),
nn.MaxPool2d(kernel_size=3,stride=2,padding=1)
)

    self.b2 = nn.Sequential(Residual(64,64,use_1conv = False,strides=1),Residual(64,64,use_1conv = False,strides=1),)self.b3 =nn.Sequential(Residual(64, 128, use_1conv=True, strides=2),Residual(128, 128, use_1conv=False, strides=1),)self.b4 = nn.Sequential(Residual(128, 256, use_1conv=True, strides=2),Residual(256, 256, use_1conv=False, strides=1),)self.b5 = nn.Sequential(Residual(256, 512, use_1conv=True, strides=1),Residual(512, 512, use_1conv=False, strides=1),)self.b6 =nn.Sequential(nn.AdaptiveAvgPool2d((1,1)),nn.Flatten(),nn.Linear(512,10))
def forward(self,x):x = self.b1(x)x = self.b2(x)x = self.b3(x)x = self.b4(x)x = self.b5(x)x = self.b6(x)return x

if name==“main”:
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
model1 = ResNet18(Residual).to(device)
print(summary(model1,(1,224,224)))


http://www.ppmy.cn/server/166061.html

相关文章

深度学习-第五章机器学习基础

前言 5.1 学习算法 5.1.1 任务 5.1.2 性能度量 5.1.3 经验 5.1.4 示例: 线性回归 5.2 容量、过拟合和欠拟合 5.2.1 没有免费午餐定理5.2.2 正则化 5.3 超参数和验证集 5.3.1 验证集的作用5.3.2 交叉验证 5.4 估计、偏差和方差 5.4.1 点估计5.4.2 偏差5.4.4 权衡偏差和方差以…

Docker在安装时遇到的问题(第一部分)

一、在用docker-config-manager安装yum源时出现错误 [rootlocalhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 已加载插件:fastestmirror, langpacks adding repo from: https://download.docker.com/linux/ce…

【React】路由处理的常见坑与解决方法,React Router 的动态路由与懒加载问题

在使用 React Router 时,动态路由和懒加载是非常常见的需求,但也可能会遇到一些坑。以下是常见问题以及对应的解决方法。 一、React Router 动态路由常见问题 1. 动态路由匹配问题 动态路由通常通过 :param 定义路径参数,但如果路径参数与静态路由有重叠,可能会导致匹配问…

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目,admin是8087,gateway是8088,consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目,那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…

【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据

利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…

Racecar Gym

Racecar Gym 参考:https://github.com/axelbr/racecar_gym/blob/master/README.md 1. 项目介绍 Racecar Gym 是一个基于 PyBullet 物理引擎的 reinforcement learning (RL) 训练环境,模拟微型 F1Tenth 竞速赛车。它兼容 Gym API 和 PettingZoo API&am…

嵌入式面试题 C/C++常见面试题整理_7

一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思…

Itext pdf reader解析

本文基于Itext 5,Itext7相较itext5虽然有较大变化,但是原理是一样的。 参考资料: 使用iText处理pdf文件的入门级教程_itextpdf 教程-CSDN博客 比较详实的介绍了长用的itext 的pdf处理。 深入iText7:第5章源代码实践指南-CSDN博…