假设我现在要使用pytorch框架做深度学习,已知我有一些火焰图像,还有一张excel表格,命名为"CDS.csv",在表格中有一列参数,标题为“temperature”,一张火焰图像对应表格中的一行参数,也就是说,我要通过图像识别,使卷积神经网络在接收到火焰图像时,自动判断它对应的参数是多少,不使用CUDA,改成使用CPU加速,请以此为背景,写出完整的代码,并加上注释,并且解释每个变量代表的含义

时间: 2023-06-16 14:02:48 浏览: 49
好的,以下是代码: ```python import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms import pandas as pd import os from PIL import Image # 定义数据集类,继承自torch.utils.data.Dataset class FlameDataset(torch.utils.data.Dataset): def __init__(self, csv_file, root_dir, transform=None): """ csv_file: 包含参数的csv文件 root_dir: 包含图像的文件夹路径 transform: 可选的图像变换操作 """ self.flame_frame = pd.read_csv(csv_file) # 读取csv文件 self.root_dir = root_dir self.transform = transform def __len__(self): return len(self.flame_frame) def __getitem__(self, idx): if torch.is_tensor(idx): idx = idx.tolist() img_name = os.path.join(self.root_dir, self.flame_frame.iloc[idx, 0]) # 获取图像文件名 image = Image.open(img_name) # 打开图像 temperature = self.flame_frame.iloc[idx, 1] # 获取对应参数 if self.transform: image = self.transform(image) return image, temperature # 定义卷积神经网络模型 class FlameCNN(nn.Module): def __init__(self): super(FlameCNN, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) # 第一个卷积层,输入通道数为3,输出通道数为6,卷积核大小为5x5 self.pool = nn.MaxPool2d(2, 2) # 最大池化层,池化核大小为2x2 self.conv2 = nn.Conv2d(6, 16, 5) # 第二个卷积层,输入通道数为6,输出通道数为16,卷积核大小为5x5 self.fc1 = nn.Linear(16 * 5 * 5, 120) # 第一个全连接层,输入节点数为16*5*5,输出节点数为120 self.fc2 = nn.Linear(120, 84) # 第二个全连接层,输入节点数为120,输出节点数为84 self.fc3 = nn.Linear(84, 1) # 第三个全连接层,输入节点数为84,输出节点数为1,即对应的参数 def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) # 第一层卷积、激活、池化 x = self.pool(torch.relu(self.conv2(x))) # 第二层卷积、激活、池化 x = x.view(-1, 16 * 5 * 5) # 展开 x = torch.relu(self.fc1(x)) # 第一个全连接层、激活 x = torch.relu(self.fc2(x)) # 第二个全连接层、激活 x = self.fc3(x) # 第三个全连接层,无激活 return x # 创建数据集 transform = transforms.Compose([transforms.Resize((32, 32)), transforms.ToTensor()]) dataset = FlameDataset(csv_file="CDS.csv", root_dir="flame_images", transform=transform) # 创建数据加载器 dataloader = torch.utils.data.DataLoader(dataset, batch_size=4, shuffle=True, num_workers=0) # 创建模型 model = FlameCNN() # 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, data in enumerate(dataloader, 0): # 获取输入和目标参数 inputs, targets = data # 将参数转为浮点数张量 targets = targets.float() # 将梯度清零 optimizer.zero_grad() # 前向传播、计算损失、反向传播、更新参数 outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step() # 统计损失 running_loss += loss.item() if i % 2000 == 1999: # 每2000个小批量数据打印平均损失 print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training') # 测试模型 dataiter = iter(dataloader) images, labels = dataiter.next() # 输出预测结果 outputs = model(images) predicted = outputs.detach().numpy().flatten() print("Predicted values: ", predicted) print("Actual values: ", labels.numpy()) ``` 注释如下: 1. `FlameDataset`:定义数据集类,包括读取csv文件和图像文件的操作,以及可选的图像变换操作。 2. `FlameCNN`:定义卷积神经网络模型,包括卷积层、池化层和全连接层。 3. `transform`:图像变换操作,包括调整尺寸和转换为张量。 4. `dataset`:创建数据集对象,包括csv文件和图像文件的路径以及图像变换操作。 5. `dataloader`:创建数据加载器对象,包括数据集对象、批量大小、是否打乱数据和使用的进程数。 6. `model`:创建卷积神经网络模型对象。 7. `criterion`:定义损失函数,使用均方误差。 8. `optimizer`:定义优化器,使用随机梯度下降法。 9. 训练模型:使用数据加载器迭代训练数据,每个小批量数据进行前向传播、计算损失、反向传播和更新参数的操作。在每个epoch结束后,打印平均损失。 10. 测试模型:使用数据加载器获取一批测试数据,并输出模型的预测结果和实际结果。

相关推荐

最新推荐

recommend-type

Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式

主要介绍了Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

Pytorch提取模型特征向量保存至csv的例子

今天小编就为大家分享一篇Pytorch提取模型特征向量保存至csv的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

使用PyTorch训练一个图像分类器实例

今天小编就为大家分享一篇使用PyTorch训练一个图像分类器实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

pytorch学习教程之自定义数据集

在训练深度学习模型之前,样本集的制作非常重要。在pytorch中,提供了一些接口和类,方便我们定义自己的数据集合,下面完整的试验自定义样本集的整个流程。 开发环境 Ubuntu 18.04 pytorch 1.0 pycharm 实验目的 ...
recommend-type

PyTorch学习笔记(二)图像数据预处理

Environment OS: macOS Mojave Python version: 3.7 ...本文记录了使用 PyTorch 实现图像数据预处理的方法,包括数据增强和标准化。主要的工具为 torchvision.transform 模块中的各种类,要求传入的图片为 PI
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。