当前位置: 首页 > news >正文

公司网站建设 wordpress朝阳seo推广

公司网站建设 wordpress,朝阳seo推广,网站后台目录如何保护,b2c网站名称和网址代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 从零开始构建你的第一个神经网络 在本教程中,我们将使用PyTorch框架从零开始构建一个简单的卷积神经网络(CNN),用于图片二分类任务。CNN 是一种深度学习模型&#…

代码以及视频讲解

本文所涉及所有资源均在传知代码平台可获取

从零开始构建你的第一个神经网络

在本教程中,我们将使用PyTorch框架从零开始构建一个简单的卷积神经网络(CNN),用于图片二分类任务。CNN 是一种深度学习模型,特别适用于图像数据。本文将详细介绍如何一步步搭建一个包含4-5层的CNN,并训练它来分类图像。

1.准备工作

在开始之前,需要一些必要的库,本教程中使用的库的版本如下:

packageversion
python3.8.0
torch1.13.0
scikit-learn1.1.3
numpy1.20.1
matplotlib3.3.4

本软件包均是在anaconda虚拟环境中安装的。如果还没该虚拟环境还需要创建一下才可以。准备工作完成后就可以开始正式的神经网络搭建了。

2.数据集准备

在本教程中我们使用1元100元人民币两个类别。其数据集存放格式如下图所示:
在这里插入图片描述

一共分为三个部分train、test和val,即训练验证和测试。“1”和“100”文件夹下面就是数据集图片。下面就来对数据集进行处理:

  • 首先导入必要的包和进行数据的预处理
#导入包
import torch
import torchvision
import torchvision.transforms as transforms
#数据预处理
transform = transforms.Compose([transforms.Resize((64, 64)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
  • 加载数据集
train_data_path = "02-01-data-RMB_data/train" # 数据集存放的相对路径
trainset = datasets.ImageFolder(root=train_data_path, transform=transform)
trainloader = DataLoader(trainset, batch_size=4, shuffle=True)val_data_path = "02-01-data-RMB_data/val"
valset = datasets.ImageFolder(root=val_data_path, transform=transform)
valloader = DataLoader(valset, batch_size=4, shuffle=False)classes = trainset.classes # 获取类别名:这里为“1”和“100”

我们可以使用torchvision.datasets.ImageFolder来加载这些数据。ImageFolder会根据目录名自动将图像归类。

3.定义卷积神经网络结构并实例化模型

接下来,我们将定义一个简单的卷积神经网络。该网络将包含两个卷积层(每层后接池化层)和两个全连接层

# 定义卷积神经网络
class SimpleCNN(nn.Module):def __init__(self, num_classes):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 16, 3, padding=1) #彩色图片输入通道为3:RGB;输出为16self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(16, 32, 3, padding=1)self.fc1 = nn.Linear(32 * 16 * 16, 120)self.fc2 = nn.Linear(120, num_classes)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = x.view(-1, 32 * 16 * 16) #展平操作成为1维x = F.relu(self.fc1(x))x = self.fc2(x)return x# 实例化模型
num_classes = len(classes)
net = SimpleCNN(num_classes).to(device)

上述网络结构中nn.Conv2d(3, 16, 3, padding=1) 表明彩色图片输入通道为3:RGB;输出为16,这里16可以自己定义,但是要与下一卷积层的输入通道数相同。16后面的3为卷积核大小即为3*3卷积。

4.训练和验证模型

4.1.配置训练参数

在开始训练之前,我们需要定义损失函数和优化器。这里我们将使用交叉熵损失函数随机梯度下降SGD)优化器。
这里不同的损失函数和不同的优化器也会影响模型最终的效果。比如可以使用AdamAdamW等优化器。

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

4.2 模型训练与验证

# 存储训练损失和验证损失
train_losses = []
val_losses = []# 训练模型并记录损失和准确率
for epoch in range(10):net.train()running_loss = 0.0correct = 0total = 0for i, data in enumerate(trainloader, 0):inputs, labels = data# 将输入和标签移动到GPUinputs, labels = inputs.to(device), labels.to(device)optimizer.zero_grad()outputs = net(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()train_loss = running_loss / len(trainloader)train_accuracy = 100 * correct / totaltrain_losses.append(train_loss)# 验证模型net.eval()val_loss = 0.0correct = 0total = 0with torch.no_grad():for data in valloader:images, labels = data# 将输入和标签移动到GPUinputs, labels = inputs.to(device), labels.to(device)outputs = net(images)loss = criterion(outputs, labels)val_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()val_loss = val_loss / len(valloader)val_accuracy = 100 * correct / totalval_losses.append(val_loss)print(f'Epoch [{epoch + 1}/10], Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.2f}%, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.2f}%')print('Finished Training')
#保存模型在本地
model_save_path = "simple_cnn.pth"
torch.save(net.state_dict(), model_save_path)
print(f"Model saved to {model_save_path}")

在这里我们将训练模型10个epoch,并在每个epoch结束后输出损失准确率,可以看到每一个epoch上的结果。
训练过程如下图:
在这里插入图片描述

5.性能评估与模型测试

5.1 性能评估

绘制loss曲线

# 绘制损失曲线
plt.figure()
plt.plot(train_losses, label='Train Loss')
plt.plot(val_losses, label='Validation Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Loss Curve')
plt.legend()
plt.show()

查看结果
在这里插入图片描述

绘制混淆矩阵

# 混淆矩阵
net.eval()
all_preds = []
all_labels = []
with torch.no_grad():for data in valloader:images, labels = dataoutputs = net(images)_, predicted = torch.max(outputs.data, 1)all_preds.extend(predicted.cpu().numpy())all_labels.extend(labels.cpu().numpy())# 生成混淆矩阵
cm = confusion_matrix(all_labels, all_preds)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=classes)# 绘制混淆矩阵
plt.figure()
disp.plot(cmap=plt.cm.Blues)
plt.title('Confusion Matrix')
plt.show()

在这里插入图片描述

在val文件夹中1100的数量都是19,所以做到了100%的准确率。

5.2 模型测试

在第四步中我们将训练好的模型进行了保存,那么这里我们将模型加载出来对test数据集进行测试,看看模型效果如何。这里我们需要加载训练好的模型进行测试。

# 加载模型权重
model_path = "simple_cnn.pth"
net.load_state_dict(torch.load(model_path))# 将模型移动到设备上
net.to(device)# 设置模型为评估模式
net.eval()# 加载测试集
test_data_path = "02-01-data-RMB_data/test"
testset = datasets.ImageFolder(root=test_data_path, transform=transform)
testloader = DataLoader(testset, batch_size=4, shuffle=False)# 预测并输出结果
all_preds = []
all_labels = []
with torch.no_grad():for data in testloader:images, labels = data# 将数据移动到GPUimages, labels = images.to(device), labels.to(device)outputs = net(images)_, predicted = torch.max(outputs.data, 1)all_preds.extend(predicted.cpu().numpy())all_labels.extend(labels.cpu().numpy())# 你可以在这里处理预测结果,比如输出预测值或计算准确率
correct = sum(1 for x, y in zip(all_preds, all_labels) if x == y)
total = len(all_labels)
accuracy = correct / total * 100print(f"Test Accuracy: {accuracy:.2f}%")

完整代码和数据集在附件中,可以自行查看

6.总结

在本教程中,我们从零开始构建了一个简单的卷积神经网络,并用它来完成图片的二分类任务。我们介绍了如何定义网络结构,如何训练和评估模型,并讨论了进一步优化模型的方法。

接下来,你可以尝试扩展网络的深度或宽度,使用更大的数据集,或者使用迁移学习等技术来提升模型的性能。祝你学习愉快!

源码下载

http://www.dinnco.com/news/21455.html

相关文章:

  • wordpress注册用户可见济南seo整站优化招商电话
  • wordpress错误500优化设计官方电子版
  • saas微信小程序开发工具西安seo关键词排名
  • 百度网站建设是什么关键词推广效果分析
  • 制作公司的网站互联网推广渠道有哪些
  • 做爰网站爱情岛网络营销环境分析主要包括
  • 无锡微网站已备案域名交易平台
  • 企业网站建设的误区主要有青岛百度快速优化排名
  • 射阳住房和城乡建设局网站最新新闻事件今天国内大事
  • wordpress三级文件目录seo顾问合同
  • wordpress用户功能扩展济南网站优化公司排名
  • 建设企业网站的人员组成汕头网站建设公司哪个好
  • 查询个人房产信息网站职业技能培训
  • 盐城网站优化推广工作室今日国内新闻最新消息大事
  • 酒店网站建设考虑的因素推广工作的流程及内容
  • 皮卡剧网站怎样做网站建设与营销经验
  • 湖州企业网站制作360搜索引擎下载
  • 霞浦建设局总规网站开鲁seo服务
  • 平面设计接单价格表北海seo快速排名
  • 手机网站建设免费网络销售怎么样
  • 网站建设公司做前端山东搜索引擎优化
  • 做网站专家危机舆情公关公司
  • 中山论坛建站模板网站怎么提升关键词排名
  • 网站分辨率做多大网站建设营销推广
  • 手机网站建设经典教程百度查关键词显示排名
  • 国外企业招聘网站营销推广方案模板
  • 男女同房做爰网站外包seo公司
  • 网站开发有很多种吗太原seo计费管理
  • 电脑做ppt一般下载哪个网站好怎样建立自己的网站平台
  • 标书制作难吗seo是什么职业做什么的