2024年7月9日~2024年7月15日周报

news2024/11/9 2:22:16

目录

一、前言

二、完成情况

2.1 特征图保存方法

2.1.1 定义网络模型

2.1.2 定义保存特征图的钩子函数

2.1.3 为模型层注册钩子

2.1.4 运行模型并检查特征图

2.2 实验情况

三、下周计划


一、前言

        本周的7月11日~7月14日参加了机器培训的学习讨论会,对很多概念有了更深的理解。同时,在空闲时间利用笔记本跑了小批量的数据。

二、完成情况

2.1 特征图保存方法

        在深度学习领域,在网络训练过程中生成每一阶段的特征图是一个常见的需求。

2.1.1 定义网络模型

        首先,需要确定我们当前使用的网络模型,不同的模型结果具有不同的层数和层类型,这将影响特征图的生成。

        这里以InversionNet为例:

class InversionNet(nn.Module):
    def __init__(self, dim1=32, dim2=64, dim3=128, dim4=256, dim5=512, sample_spatial=1.0, **kwargs):
        super(InversionNet, self).__init__()
        self.convblock1 = ConvBlock(5, dim1, kernel_size=(7, 1), stride=(2, 1), padding=(3, 0))
        self.convblock2_1 = ConvBlock(dim1, dim2, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
        self.convblock2_2 = ConvBlock(dim2, dim2, kernel_size=(3, 1), padding=(1, 0))
        self.convblock3_1 = ConvBlock(dim2, dim2, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
        self.convblock3_2 = ConvBlock(dim2, dim2, kernel_size=(3, 1), padding=(1, 0))
        self.convblock4_1 = ConvBlock(dim2, dim3, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
        self.convblock4_2 = ConvBlock(dim3, dim3, kernel_size=(3, 1), padding=(1, 0))
        self.convblock5_1 = ConvBlock(dim3, dim3, stride=2)
        self.convblock5_2 = ConvBlock(dim3, dim3)
        self.convblock6_1 = ConvBlock(dim3, dim4, stride=2)
        self.convblock6_2 = ConvBlock(dim4, dim4)
        self.convblock7_1 = ConvBlock(dim4, dim4, stride=2)
        self.convblock7_2 = ConvBlock(dim4, dim4)
        self.convblock8 = ConvBlock(dim4, dim5, kernel_size=(8, ceil(70 * sample_spatial / 8)), padding=0)

        self.deconv1_1 = DeconvBlock(dim5, dim5, kernel_size=5)
        self.deconv1_2 = ConvBlock(dim5, dim5)
        self.deconv2_1 = DeconvBlock(dim5, dim4, kernel_size=4, stride=2, padding=1)
        self.deconv2_2 = ConvBlock(dim4, dim4)
        self.deconv3_1 = DeconvBlock(dim4, dim3, kernel_size=4, stride=2, padding=1)
        self.deconv3_2 = ConvBlock(dim3, dim3)
        self.deconv4_1 = DeconvBlock(dim3, dim2, kernel_size=4, stride=2, padding=1)
        self.deconv4_2 = ConvBlock(dim2, dim2)
        self.deconv5_1 = DeconvBlock(dim2, dim1, kernel_size=4, stride=2, padding=1)
        self.deconv5_2 = ConvBlock(dim1, dim1)
        self.deconv6 = ConvBlock_Tanh(dim1, 1)

    def forward(self, x):
        # Encoder Part
        x = self.convblock1(x)  # (None, 32, 500, 70)
        x = self.convblock2_1(x)  # (None, 64, 250, 70)
        x = self.convblock2_2(x)  # (None, 64, 250, 70)
        x = self.convblock3_1(x)  # (None, 64, 125, 70)
        x = self.convblock3_2(x)  # (None, 64, 125, 70)
        x = self.convblock4_1(x)  # (None, 128, 63, 70)
        x = self.convblock4_2(x)  # (None, 128, 63, 70)
        x = self.convblock5_1(x)  # (None, 128, 32, 35)
        x = self.convblock5_2(x)  # (None, 128, 32, 35)
        x = self.convblock6_1(x)  # (None, 256, 16, 18)
        x = self.convblock6_2(x)  # (None, 256, 16, 18)
        x = self.convblock7_1(x)  # (None, 256, 8, 9)
        x = self.convblock7_2(x)  # (None, 256, 8, 9)
        x = self.convblock8(x)  # (None, 512, 1, 1)

        # Decoder Part Vmodel
        x = self.deconv1_1(x)  # (None, 512, 5, 5)
        x = self.deconv1_2(x)  # (None, 512, 5, 5)
        x = self.deconv2_1(x)  # (None, 256, 10, 10)
        x = self.deconv2_2(x)  # (None, 256, 10, 10)
        x = self.deconv3_1(x)  # (None, 128, 20, 20)
        x = self.deconv3_2(x)  # (None, 128, 20, 20)
        x = self.deconv4_1(x)  # (None, 64, 40, 40)
        x = self.deconv4_2(x)  # (None, 64, 40, 40)
        x = self.deconv5_1(x)  # (None, 32, 80, 80)
        x = self.deconv5_2(x)  # (None, 32, 80, 80)
        x = F.pad(x, [-5, -5, -5, -5], mode="constant", value=0)  # (None, 32, 70, 70) 125, 100
        x = self.deconv6(x)  # (None, 1, 70, 70)

        return x

2.1.2 定义保存特征图的钩子函数

        接下来,定义特征图保存函数。PyTorch提供了register_forward_hook方法,允许在模型的特定层上注册一个回调函数,该函数将在该层的前向传播之后被调用。因此,我们可以利用这个机制来自动保存每个阶段的特征图。钩子方法(hook method)是回调函数(callback function)的一种,它相当于一个监测器,在消息传递的过程中,捕获自己感兴趣的内容,然后去处理。

import torch  
  
# 全局的字典用于存储特征图  
feature_maps = {}  
  
def save_feature_map(module, input, output):  
    # 'module' 是注册了钩子的模块(在这里以一个convblock为例)  
    # 'input' 是该模块的输入  
    # 'output' 是该模块的输出,即我们要保存的特征图  
    # 我们需要一种方式来唯一标识每个convblock,这里我们简单地使用模块的名称  
    key = module.__class__.__name__ if hasattr(module, '__class__') else type(module).__name__  
    if key.startswith('ConvBlock'):  # 假设所有convblock类的名称都以'ConvBlock'开头  
        feature_maps[key] = output.detach().cpu()  # 保存特征图到CPU  
  
# 注意:上面的key获取方式是基于假设的,需要根据实际的convblock类名来调整

2.1.3 为模型层注册钩子

        然后,需要再模型初始化初始化或某个适当的地方,为这些convblock注册钩子。这里为所有的convblock层注册钩子,也可以单独注册。

# 一个方法来注册所有ConvBlock的钩子
def register_ConvBlock_hooks(self):
    for name, module in self._modules.items():
        if isinstance(module, convblock):
            handle = module.register_forward_hook(self.save_feature_map)
            self.hook_handles.append((name, handle))

2.1.4 运行模型并检查特征图

        在训练循环中,除了正常的梯度计算和参数更新外,还需要确保特征图保存机制被正确触发。在每个epoch或每个batch之后,根据需求保存特征图。

def save_feature_map(self, module, input, output):
    # 打印输出尺寸作为示例
    print(f"Feature map shape from {module._get_name()}: {output.shape}")
    # 假设我们想要保存第一个批次和第一个通道的特征图
    batch_idx, channel_idx = 0, 0

    # 提取特征图的一个批次和一个通道
    feature_map = output[batch_idx, channel_idx, :, :]

    # 将tensor从GPU(如果有)移动到CPU,并转换为numpy数组
    feature_map_np = feature_map.detach().cpu().numpy()

    # 归一化特征图到[0, 1]
    feature_map_np = (feature_map_np - feature_map_np.min()) / (feature_map_np.max() - feature_map_np.min())

    # 使用PIL或其他库保存图像
    # 由于PIL期望的是[0, 255]的整数,需要将归一化后的图像乘以255并转换为uint8
    image = Image.fromarray((feature_map_np * 255).astype(np.uint8))

    # 为模块创建一个唯一的名称(这里只是示例)
    module_name = module.__class__.__name__ + "_" + str(id(module))

    # 保存图像
    image_path = f"{module_name}_feature_map.png"
    image.save(image_path)
    print(f"Saved feature map to {image_path}")

         目前只能生成灰度图像,在生成彩色图片时遇到问题,报错如下所示,下周解决该问题。 

2.2 实验情况

        在本周对设计的实验进行了验证,在验证过程中发现选择合适的学习率很重要,指标相差也很大。

        目前的网络结构效果在5000的 CurveFaultA 数据集上优于InversionNet,但是不知道大数据集上表现如何。

        损失函数的表现在小数据集上不太明显,部分指标较好,但是部分指标不好。

三、下周计划

  1. 利用工作站完成实验;

  2. 验证特征图保存方法是否适用;

  3. 了解高级优化算法;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1928011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iredmail服务器安装步骤详解!如何做配置?

iredmail服务器安全性设置指南?怎么升级邮件服务器? iredmail是一个功能强大的邮件服务器解决方案,它集成了多个开源软件,使您能够快速部署和管理邮件服务。AokSend将逐步引导您完成安装过程,无需深入的编程知识即可轻…

springboot的Filter过滤器拦截资源

配置拦截器,要加上ServletComponentScan和WebFilter(urlPatterns "/*")注解一起使用

基于Java的斗地主游戏案例开发(做牌、洗牌、发牌、看牌

package Game;import java.util.ArrayList; import java.util.Collections;public class PokerGame01 {//牌盒//♥3 ♣3static ArrayList<String> list new ArrayList<>();//静态代码块//特点&#xff1a;随着类的加载而在加载的&#xff0c;而且只执行一次。stat…

如何评估代理的可靠性和安全性

使用IP代理最主要的是要看是否安全&#xff0c;代理IP是否稳定可靠&#xff0c;但是又如何评估一个代理IP的安全性与可靠性呢&#xff0c;下面具体介绍一下。 评估代理的可靠性 服务稳定性 代理服务的稳定性直接影响到业务的连续性和效率。评估代理的服务稳定性重点查看下面…

vue2学习笔记1-官网使用指南和搭建开发环境

官网使用指南 官网地址&#xff1a;介绍 — Vue.js 1、学习 1.1 教程和API 最重要的两个板块。API是VUE的字典&#xff0c;需要时来查阅。 1.2、风格指南 如何写出风格优雅的VUE代码。规则分为四类&#xff1a;必要的&#xff0c;强烈推荐、推荐、谨慎使用。 1.3、示例 …

正点原子STM32(基于HAL库)6

目录 TFTLCD&#xff08;MCU 屏&#xff09;实验TFTLCD 简介TFTLCD 简介液晶显示控制器FSMC 简介FSMC 关联寄存器简介 硬件设计程序设计FSMC 和SRAM 的HAL 库驱动程序流程图程序解析 下载验证 LTDC LCD&#xff08;RGB 屏&#xff09;实验RGBLCD<DC 简介RGBLCD 简介LTDC 简介…

使用Keepalived实现双机热备(虚拟漂移IP地址)详细介绍

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

影响代理运行速度的因素有哪些?

在当今数字化时代&#xff0c;代理服务器被广泛应用于网络接入、数据收集、隐私保护等各种场景。然而代理服务器的运行速度对用户体验和运行效率至关重要。在本文中&#xff0c;我们将讨论影响代理运行速度的主要因素&#xff0c;并介绍如何优化代理服务器以提高运行速度。 第一…

解决ESLint和Prettier冲突的问题

在配置了ESLint的项目中使用Prettier进行格式化可能会出现冲突&#xff0c;不如Prettier配置了使用双引号&#xff0c;ESLint配置了单引号&#xff0c;当然可以一个一个改成一样的配置&#xff0c;但是比较麻烦。我发现可以直接使用ESLint的规则进行格式化。在VSCode配置过程如…

【Orange Pi AIpro测评】基于OrangePi AIpro开发板从零搭建部署小雅影音库

文章目录 一、OrangePi AIpro介绍1.1 OrangePi AIpro 实物图1.2 OrangePi AIpro 示意图1.3 OrangePi AIpro详细信息介绍 二、为 OrangePi 安装 xfce4 桌面及 VNC 服务三、将 Ubuntu 镜像烧写到 TF 卡四、将 Ubuntu 镜像烧写到 NVMe SSD五、远程连接OrangePi AIpro的方式5.1 通过…

[C/C++入门][变量和运算]7、交换变量(空杯思想)

计算机中交换变量的值&#xff0c;可谓是非常常见&#xff0c;常见到几乎考试卷子里都有它。 如图&#xff0c;一杯牛奶&#xff0c;一杯咖啡&#xff0c;如何进行交换呢&#xff1f; 相信懂的都懂&#xff0c;不懂的看完这个图也就懂了。 生活中非常简单的例子&#xff0c;放…

新160个crackme - 003-Cruehead-CrackMe-3

运行分析 发现只有一个退出 PE分析 32位&#xff0c;未知程序&#xff0c;壳未知 静态分析 发现关键字符串 找到关键函数&#xff0c;分析函数&#xff0c;设置断点 动态调试 到断点到if语句&#xff0c;tab键切换至汇编代码 找到跳转语句 右键Assemble jnz改为jz然后回…

Matlab 判断直线上一点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 判断一个点是否位于一直线上有很多方法,这里使用一种很有趣的坐标:Plucker线坐标,它的定义如下所示: 这个坐标有个很有趣的性质,我们可以使用Plucker坐标矢量构建一个Plucker矩阵: 则它与位于对应线上的齐次点…

LaTeX教程(015)-LaTeX文档结构(15)

LaTeX教程(015)- LaTeX \LaTeX LATE​X文档结构(15) 2.4 管理引用 LaTeX \LaTeX LATE​X有一些命令能够很容易的管理文档中的引用。它支持交叉引用(cross-references&#xff0c;文档内部对象的引用)&#xff0c;文献引用(bibliographic&#xff0c;对外部文档的引用)&#xf…

【UNI-APP】阿里NLS一句话听写typescript模块

阿里提供的demo代码都是javascript&#xff0c;自己捏个轮子。参考着自己写了一个阿里巴巴一句话听写Nls的typescript模块。VUE3的组合式API形式 startClient&#xff1a;开始听写&#xff0c;注意下一步要尽快开启识别和传数据&#xff0c;否则6秒后会关闭 startRecognition…

AndroidStudio 删除未使用的资源精简apk体积

历史项目开发下来&#xff0c;会有很多未使用的类、布局xml 、资源文件等。 未使用的图片资源&#xff0c;会增大apk体积。 为了精简应用&#xff0c;需要去掉。 查找未使用的资源 Code – Analyze Code – Run Inspection by Name 输入 Unused 会有提示 选择要查找的目录…

C#环境与数据类型

文章目录 C#环境.NET 框架集成开发环境 创建一个C#项目数据类型值类型引用类型对象类型object动态类型dynamic字符串类型string 指针类型 类型转换隐式转换显示转换&#xff08;强制转换&#xff09;C#提供的类型转换方法Convert类Parse方法TryParse方法 C#环境 .NET 框架 C#是…

ESP32CAM人工智能教学13

ESP32CAM人工智能教学13 openCV 安装 小智发现openCV是一款非常出色的机器视觉软件&#xff0c;可以配合ESP32Cam的摄像头&#xff0c;开发出许许多多的人工智能应用情境。 下载视频服务驱动库 OpenCV是开源的计算机视觉驱动库&#xff0c;可以应用于机器人的图形处理、机器学…

Mac清理软件cleanmymac x4.14.4破解版,2024年有免费cleanmymac x激活码

​ CleanMyMac X 4.14.4破解版可以快速识别并删除占用磁盘空间的无用文件&#xff0c;提升我们系统的存储空间。它还可以优化启动项、修复系统错误和保护隐私等。总之CleanMyMac X十分强大有需要的赶快下载吧&#xff0c; CleanMyMac X 许可证激活码:ak39840506641bjckr 需要…

RK3568笔记三十八:DS18B20驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 DS18B20驱动参考的是讯为电子的单总线驱动第十四期 | 单总线_北京迅为的博客-CSDN博客 博客很详细&#xff0c;具体不描述。 只是记录测试下DS18B20读取温度。 一、介绍 流程基本和按键驱动差不多&#xff0c;主要功能是…