当前位置: 首页 > 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.jsqmd.com/news/87423/

相关文章:

  • Maven
  • 30分钟掌握Ocelot网关:从零搭建微服务API网关的完整指南
  • MudBlazor组件库布局优化实战指南:从间距失调到完美适配
  • Granite Docling 258M:重新定义文档智能处理的终极解决方案
  • 5分钟打造AI会议助手:基于ChatGLM3-6B的零代码企业级解决方案
  • GLM-4.6技术深度解析:200K上下文窗口与智能体工具调用的革命性突破
  • 安卓Utility V200.00.0000维修解锁工具
  • 行为型模式:观察者模式
  • 8、Ubuntu Unity桌面使用指南
  • 防腐涂料哪家生产厂家
  • 开源AI智能名片多商户商城系统中的标题引流策略研究
  • 16、Ubuntu 命令行使用全攻略
  • 企业即时通讯软件有哪些?(主流产品盘点) - 企业数字化观察家
  • 38、软件开发核心概念与技术解析
  • 17、Ubuntu Server使用与安装全面指南
  • AI绘画版权检测:从问题诊断到合规实践的全流程指南
  • arXiv LaTeX Cleaner 终极指南:一键清理你的论文代码
  • 25、深入探索Ubuntu社区:活动、团队与治理体系
  • 从“搅局”到“重构”:开源AI智能名片多商户商城小程序对电商生态的范式转型研究
  • MySQL内置函数
  • FlashAttention如何实现3-5倍LLM推理加速?KV缓存与增量解码深度解析
  • Dexed合成器终极指南:从零开始掌握经典DX7模拟
  • 26、Ubuntu社区:团队、流程与参与指南
  • GitHub教程图片为何无法显示?一键排查与修复指南
  • 27、Ubuntu系统全方位指南:功能、配置与社区参与
  • 从臃肿到轻量:Gridea助你打造极速静态博客新体验
  • 5步掌握GDevelop游戏引擎:从零开始构建2D平台游戏
  • 10分钟快速上手Ocelot中间件扩展:新手终极指南
  • 22、Ubuntu 相关项目、版本及 Launchpad 介绍
  • 36、服务器存储与网络容错技术全解析