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

如何写一个可以识别图像数字的基于VIT大模型的简单代码?

直接上代码,源代码来自于kaggle上的大神,经过简单修改得到

# 模型# 数据# 训练fromtorch.utils.dataimportDataset,DataLoaderimportnumpyfromPILimportImageclassconvertDataset(Dataset):def__init__(self,data,transform)->None:super().__init__()self.data=data self.transform=transform self.labels=self.data.iloc[:,0].values self.images=self.data.iloc[:,1:].values.astype(numpy.uint8)def__len__(self):returnlen(self.data)def__getitem__(self,index):label=self.labels[index]image=self.images[index].reshape(28,28)image=Image.fromarray(image,"L")image=self.transform(image)returnimage,labeldefmain():# 模型importtorch.nnasnnimporttimm dict_path="D:\\kaggle\\digit-recognizer\\dict.pth"importosclassVIT(nn.Module):def__init__(self,*args,**kwargs)->None:super().__init__(*args,**kwargs)self.model=timm.create_model("vit_base_patch16_224",pretrained=True)self.model.head=nn.Linear(self.model.head.in_features,10)# type:ignoreifos.path.exists(dict_path):print("load dict")self.model.load_state_dict(torch.load(dict_path))defforward(self,x):returnself.model(x)importtorch device=torch.device("cuda"iftorch.cuda.is_availableelse"cpu")model=VIT().to(device)# 数据importpandas train_data=pandas.read_csv("input/train.csv")fromtorchvisionimporttransforms transform=transforms.Compose([transforms.Resize((224,224)),transforms.Grayscale(num_output_channels=3),transforms.ToTensor(),transforms.Normalize((0.5,),(0.5,))])train_dataset=convertDataset(train_data,transform)train_dataloader=DataLoader(train_dataset,batch_size=20,shuffle=True,num_workers=1,pin_memory=True)# 训练epoches=5optimizer=torch.optim.Adam(model.parameters(),lr=1e-4)criterion=nn.CrossEntropyLoss()importtimeimporttorch.autograd.profilerasprofilerforepochinrange(epoches):model.train()batch=0forimages,labelsintrain_dataloader:start_time=time.time()images,labels=images.to(device),labels.to(device)optimizer.zero_grad()output=model(images)loss=criterion(output,labels)loss.backward()optimizer.step()batch+=1total=len(labels)start_time1=time.time()_,predicted=output.max(1)correct=(predicted==labels).sum().item()print(f"batch:{batch}/{len(train_dataloader)}",f"epoch:{epoch}/{epoches}",f"loss:{loss.item():.4f}",f"accuracy:{correct/total:.4f}",f"spend:{time.time()-start_time:.2f}")ifbatch%1000==0:torch.save(model.model.state_dict(),dict_path)if__name__=="__main__":main()
http://www.cnnetsun.cn/news/49751.html

相关文章:

  • 14、Ubuntu实用软件探索与使用指南
  • 18、Ubuntu服务器安装与管理全解析
  • 19、Ubuntu 服务器包管理全解析
  • 用AppSmith让你的应用“主动说话“:Web Push实时通知实战
  • 如何快速掌握kafkactl:Apache Kafka命令行管理的终极指南
  • 24、Ubuntu社区交流的多元途径
  • 26、Ubuntu社区:团队、流程与参与指南
  • PrivateGPT终极部署指南:3步打造企业级私密文档大脑
  • 13、Python在机器人与媒体中心扩展开发中的应用
  • 17、用 Python 实现系统管理与创意开发
  • 可视化服务构建器Dock-Dploy
  • AI图像修复神器IOPaint终极指南:深度学习去水印零基础教程
  • 35、RAID 系统的管理与迁移指南
  • ComfyUI Manager:2025年AI绘图工作流效率革命指南
  • 19、使用 C 和 C++ 开发 CGI 脚本
  • 40、系统与网络故障排查全解析
  • 22、版本控制系统入门指南
  • 42、Ubuntu系统救援与恢复指南
  • 48、Ubuntu服务器管理与配置全解析
  • 32、深入解读 GNU 通用公共许可证
  • 边缘智能新突破:LFM2-350M-ENJP-MT重塑英日实时翻译体验
  • 蓝易云 - CentOS7 Nacos设置开机自动重启
  • [模板]st表 RMQ区间最值问题
  • Matlab COCO API终极指南:从数据处理到模型评估
  • 14、网络PF配置的日志、监控、统计与优化
  • pvar2连玉君安装包:轻松掌握数据分析利器
  • Python 3.13兼容性终极指南:rembg背景移除工具深度解密
  • 如何快速配置NeverSink过滤器:POE2玩家的终极指南
  • 24、Ubuntu系统的多任务处理与性能优化技巧
  • AI终会替代IT从业者?答案藏在“不可替代的核心价值”里