python/pytorch杂聊

Dataset

  • 是否需要自己定义:如果你使用的数据集不是 PyTorch 提供的标准数据集(如 MNIST、CIFAR-10 等),那么你需要继承 torch.utils.data.Dataset 类并实现两个方法:__len__() 和 __getitem__()
  • __len__() 应该返回数据集的总大小。
  • __getitem__() 应该根据索引返回一个数据样本。

DataLoader

  • 是否需要自己定义DataLoader 不需要自己定义,它是 PyTorch 提供的一个类,用于包装 Dataset 并在数据集上提供迭代功能。它支持批量处理、打乱数据、多线程加载等。
  • 使用 DataLoader 时,你可以指定批处理大小(batch_size)、是否打乱数据(shuffle)、数据加载的线程数(num_workers)等。

model定义【继承nn.module父类】

forward:input--forward-->output

forward(self,x)中x表示输入,即x->卷积->relu->卷积-->relu-->输出

class HeightPredictor(nn.Module):def __init__(self):super(HeightPredictor, self).__init__()self.conv1 = nn.Conv2d(1,20,5)self.conv2 = nn.Conv2d(20,20,5)def forward(self, x):x = F.relu(self.conv1(x))return F.relu(self.conv2(x))

Dict

building_info = {}【dict,key--value】

这是一个字典(dictionary)的创建语句。在Python中,字典是一种可变的、无序的、键值对(key-value pairs)的集合。每个键(key)都是唯一的,且必须是不可变的类型(如字符串、数字或元组),而值(value)可以是任何类型的数据。字典通过键来访问对应的值,提供了快速查找和插入的能力。

特殊:defaultdict:defaultdict是Python标准库collections模块中的一个类。defaultdict与普通字典类似,但它在创建时提供了一个默认工厂函数【比如defaultdict(list):当访问一个不存在的键时,defaultdict会自动为该键创建一个空列表作为默认值。】,当尝试访问一个不存在的键时,defaultdict会自动为该键创建一个默认值,而不会抛出KeyError

整理csv

df = pd.read_csv(file_path, encoding="utf-8")#读取csv

#根据某个属性分组

area_bins = [0, 100, 200, 300, 400, np.inf]

area_labels = [f"{left}-{right}" if right != np.inf else f">{left}"

              for left, right in zip(area_bins[:-1], area_bins[1:])]

df['area_bins'] = pd.cut(df['area'], bins=area_bins, labels=area_labels)

methods = ["a","b"]

attributes = ['material', 'height_bin']

for attr in attributes:

    results = []

    for method in methods:

            Num_col = f"{method}_Num"

            predict_col = f"{method}_predict"

            if Num_col not in df.columns or predict_col not in df.columns:

                print(f"跳过 {method},缺少必要列")

                continue

           

            valid_data = df[['true_Num', Num_col, predict_col, attr]].dropna()

            if valid_data.empty:

                print(f"{method} 在属性 {attr} 下无有效数据")

                continue

           

            # 计算完整指标

            grouped = valid_data.groupby(attr).apply(

                lambda x: pd.Series({

                    'Ori_RMSE': np.sqrt(mean_squared_error(x['true_Num'], x[Num_col])),

                    'Pred_RMSE': np.sqrt(mean_squared_error(x['true_Num'], x[predict_col])),

                    'Ori_MAE': mean_absolute_error(x['true_Num'], x[Num_col]),

                    'Pred_MAE': mean_absolute_error(x['true_Num'], x[predict_col]),

                    'Group_Size': len(x),

                    'Sample_Optimized': np.sum(

                        np.abs(x[Num_col] - x['true_Num']) >

                        np.abs(x[predict_col] - x['true_height'])

                    )

                })

            ).reset_index()

       

        grouped['method'] = method

        results.append(grouped)

   

    if not results:

        print(f"属性 {attr} 无数据,跳过")

        continue

   

    # 合并结果

    combined_df = pd.concat(results, ignore_index=True)

   

    # 生成透视表

    pivot_df = combined_df.pivot(

        index=attr,

        columns='method',

        values=['Ori_RMSE', 'Pred_RMSE', 'Ori_MAE', 'Pred_MAE']

    )

   

    # 扁平化列名并填充NaN

    pivot_df.columns = [f"{method}_{metric}" for metric, method in pivot_df.columns]

    pivot_df = pivot_df.fillna(0)

   

    # 保存到CSV

    csv_path = os.path.join(output_dir, f"{attr}.csv")

    pivot_df.reset_index().to_csv(csv_path, index=False)

实现了分别对每个方法依据不同属性评估的功能

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

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

相关文章

PHP 安全 E-mail

PHP 安全 E-mail 引言 随着互联网的普及和电子商务的发展,电子邮件成为了人们日常生活中不可或缺的通信工具。PHP作为一种广泛使用的服务器端脚本语言,也经常被用于发送和接收电子邮件。然而,在PHP中处理电子邮件时,安全性问题不容忽视。本文将深入探讨PHP安全发送电子邮…

【夜话系列】DelayQueue延迟队列(下):实战应用与面试精讲

🔥 本文是DelayQueue系列的下篇,聚焦实战应用场景和性能优化。通过多个真实案例,带你掌握DelayQueue在项目中的最佳实践和性能调优技巧。 📚 系列专栏推荐: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战小游戏开发文章目录 一、DelayQueue实战应用1.1 订单超…

Redis(笔记)

简介: 常用数据类型: 常用操作命令: Redis的Java客户端: 操作字符串类型的数据: 操作Hash类型的数据: 操作列表类型的数据: 操作集合类型的数据: 操作有序集合类型数据: 通用命令…

PhotoShop学习05

1.选区基础知识 选区,就是选定一些区域,我们对图片的更改只在选区内生效,这样可以精细调整图片的部分而不会影响整体。它的快捷键是M。 我们用点击鼠标后滑动就会出现虚线框,虚线框内的就是我们选定的区域。这时我们再滑动就会创…

使用Redission实现分布式锁

分布式锁在分布式系统中非常重要,主要用于解决多个进程/服务并发访问共享资源时的数据一致性问题。在日常开发中常用于: 1. 防止重复操作(幂等性控制) 场景:用户重复提交订单、重复支付、重复点击等。 示例&#xff1…

VScode 画时序图(FPGA)

1、先安装插件: 2、然后就可以编写一个.js文件,如下: {signal: [{name: clk, wave: p.......|..},{name: rstn, wave: 01......|..},{name: din_vld, wave: 0.1.0...|..},{name: din, wave: "x.x...|..", data: ["D0", …

嵌入式学习笔记——I2C

IIC协议详解 一、IIC协议简介二、IIC总线结构图三、IIC通信流程详解1. 空闲状态 : 双高空闲2. 起始信号(START): 时高数下开始3. 停止信号(STOP): 时高数上结束4. 数据传输格式 : 时高数稳,时低数变5. 应答信号 四、写…

Apifox Helper 与 Swagger3 区别

核心定位差异 Apifox Helper 定位:基于 IDEA 的代码注释解析工具,与 Apifox 平台深度集成,实现文档自动生成接口管理测试协作的一体化流程。 特点: 通过解析 Javadoc、KDoc 等注释生成文档,代码零侵入(无…

单片机实现多线程的方法汇总

在单片机上实现“多线程”的方法有几种,下面按照从简单到复杂、从轻量到系统性来列出常见的方案: 🧵 一、伪多线程(最轻量) 方法:主循环 状态机 / 定时器轮询 主循环中轮流调用各个任务的处理函数&#x…

网络:华为数通HCIA学习:静态路由基础

文章目录 前言静态路由基础静态路由应用场景 静态路由配置静态路由在串行网络的配置静态路由在以太网中的配置 负载分担配置验证 路由备份(浮动静态路由)配置验证 缺省路由配置验证 总结 华为HCIA 基础实验-静态路由 & eNSP静态路由 基础…

[项目总结] 在线OJ刷题系统项目技术应用(下)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

Qt音频输出:QAudioOutput详解与示例

1. 简介 QAudioOutput是Qt多媒体框架中的一个关键类,它提供了将PCM(脉冲编码调制)原始音频数据发送到音频输出设备的接口。作为Qt多媒体组件的一部分,QAudioOutput允许开发者在应用程序中实现音频播放功能,支持多种音…

【计算机网络】Linux配置SNAT/DNAT策略

什么是NAT? NAT 全称是 Network Address Translation(网络地址转换),是一个用来在多个设备共享一个公网 IP上网的技术。 NAT 的核心作用:将一个网络中的私有 IP 地址,转换为公网 IP 地址,从而…

Redis淘汰策略详解!

目录 一、为什么需要淘汰策略? 🤔二、Redis 的淘汰策略详解 👇三、如何选择合适的淘汰策略? 🤔➡️✅四、如何切换 Redis 的淘汰策略? ⚙️🔧五、总结 🎉 🌟我的其他文章…

存储基石:深度解读Linux磁盘管理机制与文件系统实战

Linux系列 文章目录 Linux系列前言一、磁盘1.1 初识磁盘1.2 磁盘的物理结构1.3 磁盘的存储结构1.4 磁盘的逻辑结构 二、文件系统2.1 系统对磁盘的管理2.2 文件在磁盘中的操作 前言 Linux 文件系统是操作系统中用于管理和组织存储设备(如硬盘、SSD、USB 等&#xff…

本节课课堂总结

匿名子类: 说明 和 Java 一样,可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类。 单例对象(伴生对象) Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概念&a…

I²C、SPI、UART、CAN 通信协议详解

一、协议基本特性对比 特性ICSPIUARTCAN通信类型同步、半双工同步、全双工异步、全双工异步、多主多从信号线SDA(数据)、SCL(时钟)MOSI、MISO、SCK、SS(片选)TX(发送)、RX&#xff…

【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法

系列文章目录 【diffusers 极速入门(一)】pipeline 实际调用的是什么? call 方法!【diffusers 极速入门(二)】如何得到扩散去噪的中间结果?Pipeline callbacks 管道回调函数【diffusers极速入门&#xff0…

第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》

第十三章 持久化存储 一、Kubernetes存储设计核心概念 (1)存储抽象模型 PersistentVolume (PV):集群级别的存储资源抽象(如NFS卷/云存储盘)PersistentVolumeClaim (PVC):用户对存储资源的声明请求&#…

以太网安全

前言: 端口隔离可实现同一VLAN内端口之间的隔离。用户只需要将端口加入到隔离组中,就可以实现隔离组内端口之间的二层数据的隔离端口安全是一种在交换机接入层实施的安全机制,旨在通过控制端口的MAC地址学习行为,确保仅授权设备能…