PyTorch 深度学习实践-加载数据集

视频指路
参考博客笔记
参考笔记二

目录标题

  • 介绍
  • 课程代码
  • 作业实现

介绍

在深度学习时用min-batch来平衡训练时间和性能上的需求,之后训练周期要写成两层嵌套循环。epoch:所有训练样本进行完一次前向和反向传播,batch-size:训练的时候的样本数量,Iteration:总训练数据/训练样本数

在这里插入图片描述

在这里插入图片描述

集成了dataset之后编写的类就可以用dataset的功能了

在这里插入图片描述

train_loader = DataLoader(dataset=dataset, batch_size=32,shuffle=True, num_workers=2)

训练的代码要用main包装起来

解释:数据集,批数据大小,是否打乱,构成batch读取数据的时候是不是要用多线程,几个并行的线程

1、需要mini_batch 就需要import DataSet和DataLoader

2、继承DataSet的类需要重写init,getitem,len魔法函数。分别是为了加载数据集,获取数据索引,获取数据总量。

3、DataLoader对数据集先打乱(shuffle),然后划分成mini_batch。

4、len函数的返回值 除以 batch_size 的结果就是每一轮epoch中需要迭代的次数。

5、inputs, labels = data中的inputs的shape是[32,8],labels 的shape是[32,1]。表明成功使用mini-batch=32

# class DiabetesDataset(Dataset):
#     def __init__(self, filepath):
#         xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)
#         self.len = xy.shape[0]  # shape(多少行,多少列)
#         self.x_data = torch.from_numpy(xy[:, :-1])
#         self.y_data = torch.from_numpy(xy[:, [-1]])
#
#     def __getitem__(self, index):
#         return self.x_data[index], self.y_data[index]
#
#     def __len__(self):
#         return self.len

在这里插入图片描述

在这里插入图片描述

课程代码

import torch
import numpy as np
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
from sklearn.model_selection import train_test_split# 读取原始数据,并划分训练集和测试集
raw_data = np.loadtxt('diabetes.csv', delimiter=',', dtype=np.float32)
X = raw_data[:, :-1]
y = raw_data[:, [-1]]
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size=0.3)
Xtest = torch.from_numpy(Xtest)
Ytest = torch.from_numpy(Ytest)# 将训练数据集进行批量处理
# prepare datasetclass DiabetesDataset(Dataset):def __init__(self, data, label):self.len = data.shape[0]  # shape(多少行,多少列)self.x_data = torch.from_numpy(data)self.y_data = torch.from_numpy(label)def __getitem__(self, index):return self.x_data[index], self.y_data[index]def __len__(self):return self.lentrain_dataset = DiabetesDataset(Xtrain, Ytrain)
train_loader = DataLoader(dataset=train_dataset, batch_size=32, shuffle=True, num_workers=0)  # num_workers 多线程# design model using classclass Model(torch.nn.Module):def __init__(self):super(Model, self).__init__()self.linear1 = torch.nn.Linear(8, 6)self.linear2 = torch.nn.Linear(6, 4)self.linear3 = torch.nn.Linear(4, 2)self.linear4 = torch.nn.Linear(2, 1)self.sigmoid = torch.nn.Sigmoid()def forward(self, x):x = self.sigmoid(self.linear1(x))x = self.sigmoid(self.linear2(x))x = self.sigmoid(self.linear3(x))x = self.sigmoid(self.linear4(x))return xmodel = Model()# construct loss and optimizer
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# training cycle forward, backward, updatedef train(epoch):train_loss = 0.0count = 0for i, data in enumerate(train_loader, 0):inputs, labels = datay_pred = model(inputs)loss = criterion(y_pred, labels)optimizer.zero_grad()loss.backward()optimizer.step()train_loss += loss.item()count = iif epoch % 200 == 199:print("train loss:", train_loss / count, end=',')def test():with torch.no_grad():y_pred = model(Xtest)y_pred_label = torch.where(y_pred >= 0.5, torch.tensor([1.0]), torch.tensor([0.0]))acc = torch.eq(y_pred_label, Ytest).sum().item() / Ytest.size(0)print("test acc:", acc)if __name__ == '__main__':for epoch in range(5000):train(epoch)if epoch % 200 == 199:test()

作业实现

数据集下载地址,找到train.csv和test.csv,重点是这里的数据,由于数据集中包含非数值数据和缺失值,需要对数据进行清理和转换,这里是问gpt实现的

import torch
import numpy as np
import pandas as pd
from torch.utils.data import Dataset, DataLoader
from sklearn.preprocessing import StandardScaler# 数据预处理
def preprocess_data(df):# 处理缺失值df['Age'].fillna(df['Age'].median(), inplace=True)df['Fare'].fillna(df['Fare'].median(), inplace=True)df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)# 将分类数据转换为数值数据df['Sex'] = df['Sex'].map({'male': 0, 'female': 1})df['Embarked'] = df['Embarked'].map({'C': 0, 'Q': 1, 'S': 2})# 选择特征features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']df = df[features]return df# 读取训练数据并预处理
train_df = pd.read_csv('./dataset/train.csv')
train_df = preprocess_data(train_df)# 提取特征和标签
x_train = train_df.values
y_train = pd.read_csv('./dataset/train.csv')['Survived'].values# 标准化特征
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)# 将测试数据加载并预处理
test_df = pd.read_csv('./dataset/test.csv')
passenger_ids = test_df['PassengerId'].values
test_df = preprocess_data(test_df)
Xtest = scaler.transform(test_df.values)
Xtest = torch.from_numpy(Xtest).float()# 创建自定义数据集
class TitanicDataset(Dataset):def __init__(self, data, labels):self.data = torch.from_numpy(data).float()self.labels = torch.from_numpy(labels).float()def __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.labels[idx]# 创建数据加载器
train_dataset = TitanicDataset(x_train, y_train)
train_loader = DataLoader(dataset=train_dataset, batch_size=32, shuffle=True)# 定义模型
class Model(torch.nn.Module):def __init__(self):super().__init__()self.linear1 = torch.nn.Linear(7, 32)self.linear2 = torch.nn.Linear(32, 16)self.linear3 = torch.nn.Linear(16, 1)self.activate = torch.nn.ReLU()def forward(self, x):x = self.activate(self.linear1(x))x = self.activate(self.linear2(x))x = torch.sigmoid(self.linear3(x))return x# 实例化模型
model = Model()# 定义损失函数和优化器
criterion = torch.nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 训练模型
def train(epoch):model.train()train_loss = 0.0for inputs, labels in train_loader:optimizer.zero_grad()outputs = model(inputs)labels = labels.view(-1, 1)  # 调整标签形状以匹配输出loss = criterion(outputs, labels)loss.backward()optimizer.step()train_loss += loss.item()if epoch % 200 == 199:print(f"Epoch {epoch + 1}, Train Loss: {train_loss / len(train_loader)}")# 训练循环
if __name__ == '__main__':for epoch in range(5000):train(epoch)# 预测测试数据
with torch.no_grad():model.eval()y_pred = model(Xtest)y_pred_label = (y_pred >= 0.5).float().numpy().astype(int)print(y_pred_label)# 将预测结果保存为CSV文件
output = pd.DataFrame({'PassengerId': passenger_ids, 'Survived': y_pred_label.flatten()})
output.to_csv('submission.csv', index=False)

得分:0.72966

让gpt改进了一下网络部分:

import torch
import numpy as np
import pandas as pd
from torch.utils.data import Dataset, DataLoader
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split# 数据预处理
def preprocess_data(df):df['Age'].fillna(df['Age'].median(), inplace=True)df['Fare'].fillna(df['Fare'].median(), inplace=True)df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)df['Sex'] = df['Sex'].map({'male': 0, 'female': 1})df['Embarked'] = df['Embarked'].map({'C': 0, 'Q': 1, 'S': 2})features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']df = df[features]return df# 读取训练数据并预处理
train_df = pd.read_csv('./dataset/train.csv')
train_df = preprocess_data(train_df)
x_train = train_df.values
y_train = pd.read_csv('./dataset/train.csv')['Survived'].values# 标准化特征
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)# 将测试数据加载并预处理
test_df = pd.read_csv('./dataset/test.csv')
passenger_ids = test_df['PassengerId'].values
test_df = preprocess_data(test_df)
Xtest = scaler.transform(test_df.values)
Xtest = torch.from_numpy(Xtest).float()# 创建自定义数据集
class TitanicDataset(Dataset):def __init__(self, data, labels):self.data = torch.from_numpy(data).float()self.labels = torch.from_numpy(labels).float()def __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.labels[idx]# 创建数据加载器
train_dataset = TitanicDataset(x_train, y_train)
train_loader = DataLoader(dataset=train_dataset, batch_size=32, shuffle=True)# 定义改进的模型
class Model(torch.nn.Module):def __init__(self):super().__init__()self.linear1 = torch.nn.Linear(7, 64)self.linear2 = torch.nn.Linear(64, 32)self.linear3 = torch.nn.Linear(32, 16)self.linear4 = torch.nn.Linear(16, 1)self.activate = torch.nn.ReLU()self.dropout = torch.nn.Dropout(p=0.5)def forward(self, x):x = self.activate(self.linear1(x))x = self.dropout(x)x = self.activate(self.linear2(x))x = self.dropout(x)x = self.activate(self.linear3(x))x = torch.sigmoid(self.linear4(x))return x# 实例化模型
model = Model()# 定义损失函数和优化器
criterion = torch.nn.BCELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 训练模型
def train(epoch):model.train()train_loss = 0.0for inputs, labels in train_loader:optimizer.zero_grad()outputs = model(inputs)labels = labels.view(-1, 1)loss = criterion(outputs, labels)loss.backward()optimizer.step()train_loss += loss.item()if epoch % 200 == 199:print(f"Epoch {epoch + 1}, Train Loss: {train_loss / len(train_loader)}")# 训练循环
if __name__ == '__main__':for epoch in range(5000):train(epoch)# 预测测试数据
with torch.no_grad():model.eval()y_pred = model(Xtest)y_pred_label = (y_pred >= 0.5).float().numpy().astype(int)# 将预测结果保存为CSV文件
output = pd.DataFrame({'PassengerId': passenger_ids, 'Survived': y_pred_label.flatten()})
output.to_csv('submission4.csv', index=False)

得分0.75358好吧看上去没有优化多少

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

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

相关文章

Yolo-World网络模型结构及原理分析(更新中)

文章目录 概要一、整体架构分析二、详细结构分析1.YOLO检测器1.1 Backbone1.2 Head1.3 各模块的过程和作用Conv卷积模块C2F模块BottleNeck模块SPPF模块Upsampling模块Concat模块 2.文本编码器 Text Encoder 概要 尽管YOLO(You Only Look Once)系列的对象…

AI(Adobe lliustrator)教程+软件包

简介: 软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等,也可以为线稿提供较高的精度和控制,适合生产任何小型设计到大型的复杂项目。 通常用于创建LOGO(商标或徽标),图标,插图…

实践之K近邻算法实现红酒聚类

前言 K近邻算法是一种用于分类和回归的非参数统计方法,通过计算样本与训练样本的距离,找出最接近的k个样本进行投票来确定分类结果。算法的基本要素包括K值、距离度量和分类决策规则。 K值决定了邻居的影响程度,距离度量反映了样本间的相似度…

基于Java的汽车租赁管理系统设计(含文档、源码)

本篇文章论述的是基于Java的汽车租赁管理系统设计的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。 目录 摘 要 系统运行截图 系统总体设计 系统论文 资源下载 摘 要 近年来,随着改革开放…

旋转编码器 - 从零开始认识各种传感器【第八期】

旋转编码器|从零开始认识各种传感器 1. 什么是旋转编码器? 旋转编码器是一种能够将旋转位置变化转换为数字信号输出的装置,被广泛应用于机械设备、自动化控制、测量仪表等领域。它是电位计的现代数字等效产品,比电位计功能更广泛。 电位计只…

数据结构——堆,堆排序

前提 我们都知道内存分布中的堆区(Heap section),new出来的空间都在堆区上。和堆区有一个名字很相近的数据结构——堆(Heap),虽然名称相近,但两者是完全不同的东西。 因为十大排序算法中有一个堆排序,所以从头开始了解下堆这个数…

JAVASE-医疗管理系统项目总结

文章目录 项目功能架构运行截图数据库设计设计模式应用单列设计模式JDBC模板模板设计模式策略模式工厂设计模式事务控制代理模式注解开发优化工厂模式 页面跳转ThreadLocal分页查询实现统计模块聊天 项目功能架构 传统的MVC架构,JavaFX桌面端项目,前端用…

Linux如何正确安装MySQL数据库

对于Linux安装mysql,如果大家有不会的可以来参考小编的详细安装步骤哦,小编带你一步步走向成功~ 首先对于Linux系统,我们通过小编的上一篇文章中知道安装软件的命令为wget,所以首先需要写出命令获取mysql: wget https://cdn.mys…

高频面试题-CSS

BFC 介绍下BFC (块级格式化上下文) 1>什么是BFC BFC即块级格式化上下文,是CSS可视化渲染的一部分, 它是一块独立的渲染区域,只有属于同一个BFC的元素才会互相影响,且不会影响其它外部元素。 2>如何创建BFC 根元素,即HTM…

【Git远程操作】向远程仓库推送 | 拉取远程仓库

目录 1.向远程仓库推送 ​1.1本地仓库的配置 1.2remote-gitcode本地仓库 1.3推送至远程仓库 2.拉取远程仓库 现阶段以下操作仅在master主分支上。 1.向远程仓库推送 工作区☞add☞暂存区☞commit☞本地仓库☞推送push☞远程仓库注意:本地仓库的某个分支 ☞推…

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

小白新手搭建个人网盘

小白新手搭建个人网盘 序云服务器ECS重置密码远程连接ECS实例 安装OwnCloud安装Apache服务PHP运行环境NAS挂载挂载验证操作体验 序 阿里云文件存储NAS(Apsara File Storage NAS)是一个可大规模共享访问,弹性扩展的分布式文件系统。本文主要是…

(三)原生js案例之滚动到底部解锁按钮状态

业务主要是注册页面&#xff0c;有很长的条款需要用户去读&#xff0c;必须确认用户是不是看到全部的条款&#xff0c;这个场景下可以使用 效果 代码实现 必要的css <style>*{padding: 0;margin: 0;}ul{list-style: none;width: 330px;height: 100%;/* height: 200px;…

Adobe国际认证详解-影视后期

在当今的数字媒体时代&#xff0c;影视后期制作作为创意产业的核心环节&#xff0c;对于专业技能的要求日益提高。Adobe国际认证&#xff0c;作为全球创意设计领域的重要标杆&#xff0c;为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期&#xff1f;…

在学习使用LabVIEW的过程中,需要注意哪些问题?

在学习使用LabVIEW的过程中&#xff0c;需要注意以下问题&#xff1a; 1. 基础知识 图形化编程思维&#xff1a; LabVIEW采用图形化编程方式&#xff0c;与传统的文本编程语言有很大不同&#xff0c;需要适应这种新的编程思维方式。数据流概念&#xff1a; 理解LabVIEW的核心数…

【Git标签管理】理解标签 | 创建标签 | 查看标签 | 删除标签 | 推送标签

目录 1.理解标签 2.创建标签 3.查看标签 4.删除本地仓库的标签 5.推送标签 6.删除远程仓库的标签 1.理解标签 Git提供一个打标签的功能tag&#xff0c;对某一次事务/提交的表示&#xff08;作用/意义&#xff09;。标签 tag &#xff0c;可以简单的理解为是对某次 comm…

免费的数字孪生平台助力产业创新,让新质生产力概念有据可依

关于新质生产力的概念&#xff0c;在如今传统企业现代化发展中被反复提及。 那到底什么是新质生产力&#xff1f;它与哪些行业存在联系&#xff0c;我们又该使用什么工具来加快新质生产力的发展呢&#xff1f;今天我将介绍一款为发展新质生产力而量身定做的数字孪生工具。 新…

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序&#xff0c;使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…

酷炫末世意境背景404单页HTML源码

源码介绍 酷炫末世意境背景404单页HTML源码&#xff0c;背景充满着破坏一切的意境&#xff0c;彷佛末世的到来&#xff0c;可以做网站错误页或者丢失页面&#xff0c;将下面的代码放到空白的HTML里面&#xff0c;然后上传到服务器里面&#xff0c;设置好重定向即可 效果预览 …

PyTorch 深度学习实践-循环神经网络(高级篇)

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限&#xff0c;重看几遍吧&#xff0c;第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…&#xff0c;一个名字是一个序列 rnn用GRU 用ASCII表作为词典&#xff0c;长度为128&#x…