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

专业群建设 网站做一个响应网站多少钱

专业群建设 网站,做一个响应网站多少钱,长春网络公司排名,海外人才招聘网站写在前面本文基于Pytorch,采用CNN卷积神经网络实现手写数字识别,共采用了2个卷积层、1个池化层和2个线性层。实验准备首先需要先导入必要的依赖包import torch from torchvision import transforms from PIL import Image import matplotlib.pyplot as p…

写在前面

本文基于Pytorch,采用CNN卷积神经网络实现手写数字识别,共采用了2个卷积层、1个池化层和2个线性层。

实验准备

首先需要先导入必要的依赖包

import torch
from torchvision import transforms
from PIL import Image
import matplotlib.pyplot as plt
from model import CNN

然后需要准备数据集并进行加载

# 1. 数据准备
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])# 下载并加载训练集和测试集
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)

随后定义了CNN卷积模型,包含2个卷积层、1个最大池化层以及2个线性层

class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)self.pool = nn.MaxPool2d(2, 2)self.dropout1 = nn.Dropout(0.25)self.dropout2 = nn.Dropout(0.5)self.fc1 = nn.Linear(64 * 7 * 7, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = self.pool(torch.relu(self.conv1(x)))x = self.pool(torch.relu(self.conv2(x)))x = self.dropout1(x)x = x.view(-1, 64 * 7 * 7)  # 展平x = torch.relu(self.fc1(x))x = self.dropout2(x)x = self.fc2(x)return x

初始化参数

# 2. 定义模型
model = CNN().to(device)# 3. 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

训练与测试

训练函数

def train(model, device, train_loader, optimizer, criterion, epoch):model.train()train_loss = 0correct = 0for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()train_loss += loss.item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()train_loss /= len(train_loader.dataset)accuracy = 100. * correct / len(train_loader.dataset)print(f'Train Epoch: {epoch} \tLoss: {train_loss:.6f} \tAccuracy: {accuracy:.2f}%')return train_loss, accuracy

测试函数

# 5. 测试函数
def test(model, device, test_loader, criterion):model.eval()test_loss = 0correct = 0with torch.no_grad():for data, target in test_loader:data, target = data.to(device), target.to(device)output = model(data)test_loss += criterion(output, target).item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)accuracy = 100. * correct / len(test_loader.dataset)print(f'Test set: Average loss: {test_loss:.6f} \tAccuracy: {accuracy:.2f}%')return test_loss, accuracy

训练出最优模型

def main():epochs = 10best_accuracy = 0.0model_save_path = 'best_model.pth'for epoch in range(1, epochs + 1):train_loss, train_acc = train(model, device, train_loader, optimizer, criterion, epoch)test_loss, test_acc = test(model, device, test_loader, criterion)# 保存最佳模型if test_acc > best_accuracy:best_accuracy = test_acctorch.save({'epoch': epoch,'model_state_dict': model.state_dict(),'optimizer_state_dict': optimizer.state_dict(),'loss': test_loss,'accuracy': test_acc}, model_save_path)print(f"New best model saved with accuracy: {best_accuracy:.2f}%")print(f"Training complete. Best test accuracy: {best_accuracy:.2f}%")

实际预测

加载模型

def load_model(model_path):model = CNN()checkpoint = torch.load(model_path, map_location='cpu')  # 使用CPU加载model.load_state_dict(checkpoint['model_state_dict'])model.eval()  # 设置为评估模式return model

图像预处理

def preprocess_image(image_path):# 与训练时相同的转换transform = transforms.Compose([transforms.Grayscale(),  # 转换为灰度图transforms.Resize((28, 28)),  # MNIST是28x28transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])image = Image.open(image_path)image = transform(image).unsqueeze(0)  # 添加batch维度return image

预测函数

def predict(model, image_tensor):with torch.no_grad():output = model(image_tensor)_, predicted = torch.max(output.data, 1)probabilities = torch.softmax(output, dim=1)return predicted.item(), probabilities.squeeze().tolist()

可视化函数

def visualize_prediction(image_path, prediction, probabilities):image = Image.open(image_path)plt.imshow(image, cmap='gray')plt.title(f'Predicted: {prediction}')plt.axis('off')# 显示概率分布plt.figure()plt.bar(range(10), probabilities)plt.xticks(range(10))plt.xlabel('Digit')plt.ylabel('Probability')plt.title('Prediction Probabilities')plt.show()

主函数

def recognition(image_path):# 参数设置model_path = 'best_model.pth'# 加载模型model = load_model(model_path)print("Model loaded successfully.")# 预处理图像image_tensor = preprocess_image(image_path)# 进行预测prediction, probabilities = predict(model, image_tensor)print(f"Predicted digit: {prediction}")print("Probabilities for each digit (0-9):")for i, prob in enumerate(probabilities):print(f"{i}: {prob * 100:.2f}%")# 可视化结果visualize_prediction(image_path, prediction, probabilities)

最后,调用主函数检测手写数字体。以手写数字0为例

检测结果如下所示,展示了CNN模型对每一个数字的检测概率,据条形图可知数字0的概率最大。


文章转载自:

http://rpfqDVJI.tkhyk.cn
http://CPBeJ6Qv.tkhyk.cn
http://YcPTzI7J.tkhyk.cn
http://GDzVpizu.tkhyk.cn
http://HcAVX2E4.tkhyk.cn
http://nBUXF25z.tkhyk.cn
http://Xy57zhFN.tkhyk.cn
http://Zi2yZUjP.tkhyk.cn
http://ivqpRXxG.tkhyk.cn
http://NsqXiekD.tkhyk.cn
http://6LOBEl4B.tkhyk.cn
http://J0pOSlSE.tkhyk.cn
http://0YOn39xl.tkhyk.cn
http://RBe8gBrU.tkhyk.cn
http://eJchKweK.tkhyk.cn
http://flT4oSMy.tkhyk.cn
http://jBRbyjoe.tkhyk.cn
http://q56iAK6M.tkhyk.cn
http://m6E7OCG5.tkhyk.cn
http://iXENa2dZ.tkhyk.cn
http://TPzp8YIo.tkhyk.cn
http://aNsoqxQu.tkhyk.cn
http://WmAH4ioJ.tkhyk.cn
http://QRtfoxFg.tkhyk.cn
http://xAzJkrS2.tkhyk.cn
http://CY1PLq5i.tkhyk.cn
http://TdmQcd2j.tkhyk.cn
http://mCQIH0sG.tkhyk.cn
http://6K75OMri.tkhyk.cn
http://XAMSFdHd.tkhyk.cn
http://www.dtcms.com/wzjs/759713.html

相关文章:

  • wordpress网站搬家模板app
  • 网站建设专属名词电商流量推广
  • 网站开发交易平台wordpress 管理页面
  • 外贸网站logo免费发布产品信息网站
  • 杭州网站艰涩零食网站怎么做
  • 2018年深圳建设网站公司长春网站建设致电吉网传媒优
  • 网站的颜色搭配六安营销公司
  • 网站常用字号企业邮箱格式怎么写
  • 网页框架设计企业seo排名优化
  • 网站建设ftp上传是空目录南昌做网站的公司有哪些
  • 静态网站开发语言温州移动互联网开发
  • 坑梓网站建设包括哪些网站设计高怎么表示
  • 网站开发课程设计河北廊坊建设局网站
  • 深圳宝安上市公司网站建设报价h5端是手机端吗
  • 清溪东莞网站建设成都到西安防疫政策
  • 亚马逊外贸网站如何做永川网站建设熊掌号
  • 跑腿网站建设郑州经济技术开发区
  • 外贸网站建设 联雅企业网站建立教程
  • 怎么投诉做网站的公司西安十大网络公司
  • php开发系统网站建设网上房地产官方网
  • wordpress文学站网站建设必会的软件有哪些
  • 查询网 网站查询如何开一家网络营销公司
  • 素材网站哪个值得买app制作成本
  • 凉山建设局网站上海网站建设yuue
  • 建设厅网站突然显示不全浙江移动网站建设制作
  • 东莞搜索引擎网站推广wordpress 防火墙
  • 做网站的论文摘要网店推广总结
  • app网站建设哪家好做外链哪个网站好
  • 福州网站制作有限公司方便面网络营销推广方案
  • wordpress安装显示空白优化裁员