当前位置: 首页 > 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.gsyq.cn/news/97679.html

相关文章:

  • 安卓Utility V200.00.0000维修解锁工具
  • 8、Ubuntu Unity桌面使用指南
  • 16、Ubuntu 命令行使用全攻略
  • FlashAttention如何实现3-5倍LLM推理加速?KV缓存与增量解码深度解析
  • 26、Ubuntu社区:团队、流程与参与指南
  • 从臃肿到轻量:Gridea助你打造极速静态博客新体验
  • 22、Ubuntu 相关项目、版本及 Launchpad 介绍
  • 10分钟快速上手Ocelot中间件扩展:新手终极指南
  • PrivateGPT终极部署指南:3步打造企业级私密文档大脑
  • notepad--终极指南:从零开始的跨平台文本编辑解决方案
  • 16、CGI:让网页交互更灵活的技术
  • TA-Lib快速安装终极指南:告别编译错误的完整解决方案
  • 蓝易云 - ubuntu上安装boost库为SOMEIP的X86和ARM下编译做准备(编译两种版本)
  • 17、使用Shell脚本开发CGI程序
  • 18、利用 Perl 开发 CGI 程序全解析
  • 蓝易云 - Error: PostCSS plugin autoprefixer requires PostCSS 8问题解决办法
  • Vue3 + TypeScript终极指南:prompt-optimizer性能调优完整教程
  • Neovim智能补全:告别手残党,3步打造你的AI编程助手
  • LightRAG技术解析:从理论到实践的3大突破性功能
  • React Native Vision Camera终极指南:打造60FPS流畅AR滤镜的完整实战手册
  • 11、主动防御与网络流量管理
  • LFM2-350M-ENJP-MT:重新定义边缘端英日翻译的新标杆
  • 技术专家加入国家人工智能咨询委员会
  • 革新智能家居体验:hass-xiaomi-miot如何重新定义小米设备接入HomeAssistant
  • 12、网络队列、流量整形与冗余性配置全解析
  • R480-X8面向下一代AI集群的高密度算力模块:技术架构与应用分析
  • 终极攻略:用Taskbar11轻松定制你的Windows 11任务栏
  • 性价比高的厦门考研机构
  • 26、提升Ubuntu系统图形化体验的实用指南
  • NIST SP800-53中文翻译指南:信息安全专家的终极参考宝典