Back to Annotated Deep Learning Paper Implementations

දර්ශනට්රාන්ස්ෆෝමර් (VIT)

docs/si/transformers/vit/index.html

latest13.1 KB
Original Source

hometransformersvit

[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/transformers/vit/ init.py)

#

දර්ශනට්රාන්ස්ෆෝමර් (VIT)

මෙයඅ පයිටෝච් කඩදාසි ක්රියාත්මක කිරීම රූපයක් වටිනවා 16x16 වචන: පරිමාණයෙන් රූප හඳුනාගැනීම සඳහා ට්රාන්ස්ෆෝමර් .

දර්ශනට්රාන්ස්ෆෝමරය කිසිදු කැටි ගැසුණු ස්ථර නොමැතිව රූප සඳහා පිරිසිදු ට්රාන්ස්ෆෝමරයක් යොදයි. ඔවුන් රූපය පැච් බවට බෙදී ඇති අතර පැච් කාවැද්දීම් මත ට්රාන්ස්ෆෝමරයක් යොදයි. පැච් කාවැද්දීම් ජනනය කරනු ලබන්නේ පැච් වල පැතලි පික්සල් අගයන් සඳහා සරල රේඛීය පරිවර්තනයක් යෙදීමෙනි. එවිට සම්මත ට්රාන්ස්ෆෝමර් එන්කෝඩරයක් පැච් කාවැද්දීම් සමඟ වර්ගීකරණ ටෝකනයක් සමඟ පෝෂණය [CLS] වේ. රූපය එම්එල්පී සමඟ වර්ගීකරණය කිරීම සඳහා [CLS] ටෝකනයේ කේතනය භාවිතා කරයි.

පැච්සමඟ ට්රාන්ස්ෆෝමරය පෝෂණය කරන විට, පැච් කාවැද්දීම් වලට උගත් ස්ථානීය කාවැද්දීම් එකතු කරනු ලැබේ, මන්ද එම පැච් කාවැද්දීම් වලින් එම පැච් එක කොතැනද යන්න පිළිබඳ කිසිදු තොරතුරක් නොමැති බැවිනි. ස්ථානීය කාවැද්දීම් යනු එක් එක් පැච් ස්ථානය සඳහා දෛශික සමූහයක් වන අතර අනෙක් පරාමිතීන් සමඟ ශ්රේණියේ සම්භවය සමඟ පුහුණු වේ.

විශාලදත්ත කට්ටල පිළිබඳ පූර්ව පුහුණුව ලැබූ විට VITs හොඳින් ක්රියා කරයි. කඩදාසි යෝජනා කරන්නේ එම්එල්පී වර්ගීකරණ හිසක් සමඟ ඒවා පෙර පුහුණු කිරීම සහ හොඳින් සුසර කිරීමේදී තනි රේඛීය තට්ටුවක් භාවිතා කිරීමයි. කඩදාසි මිලියන 300 ක රූප දත්ත කට්ටලයක් මත පෙර පුහුණු කරන ලද VIT සමඟ SOTA පරාජය කරයි. පැච් ප්රමාණය එලෙසම තබා ගනිමින් අනුමානය අතරතුර ඔවුන් ඉහළ විභේදන රූප භාවිතා කරයි. නව පැච් ස්ථාන සඳහා ස්ථානීය කාවැද්දීම් ගණනය කරනු ලබන්නේ ස්ථානීය කාවැද්දීම් ඉගෙනීම අන්තර්ග්රහණය කිරීමෙනි.

CIFA-10 හි VIT පුහුණු කරන අත්හදා බැලීමක් මෙන්න. එය කුඩා දත්ත සමුදාය මත පුහුණු වෙනවා නිසා මෙය ඉතා හොඳින් කරන්නේ නැහැ. එය ඕනෑම කෙනෙකුට VITs සමඟ ධාවනය කර සෙල්ලම් කළ හැකි සරල අත්හදා බැලීමකි.

45importtorch46fromtorchimportnn4748fromlabml\_helpers.moduleimportModule49fromlabml\_nn.transformersimportTransformerLayer50fromlabml\_nn.utilsimportclone\_module\_list

#

පැච්කාවැද්දීම් ලබා ගන්න

කඩදාසිරූපය සමාන ප්රමාණයේ පැච් වලට බෙදී ඇති අතර එක් එක් පැච් එක සඳහා පැතලි පික්සල් මත රේඛීය පරිවර්තනයක් සිදු කරයි.

අපිඑකම දේ ක්රියාත්මක කිරීම සරල නිසා, කැටි ගැසුණු ස්ථරයක් හරහා ක්රියාත්මක කරමු.

53classPatchEmbeddings(Module):

#

  • d_model ට්රාන්ස්ෆෝමර් කාවැද්දීම් ප්රමාණය වේ
  • patch_size පැච් වල ප්රමාණයයි
  • in_channels ආදාන රූපයේ නාලිකා ගණන (rgb සඳහා 3)
65def\_\_init\_\_(self,d\_model:int,patch\_size:int,in\_channels:int):

#

71super().\_\_init\_\_()

#

අපිකර්නල් ප්රමාණයෙන් හා ලප ප්රමාණය සමාන stride දිග සමග convolution ස්ථරය නිර්මාණය කරන්න. මෙය රූපය පැච් වලට බෙදීමට හා එක් එක් පැච් එකේ රේඛීය පරිවර්තනයක් කිරීමට සමාන වේ.

76self.conv=nn.Conv2d(in\_channels,d\_model,patch\_size,stride=patch\_size)

#

  • x යනු හැඩයේ ආදාන රූපයයි [batch_size, channels, height, width]
78defforward(self,x:torch.Tensor):

#

කැටිගැසුණු ස්ථරය යොදන්න

83x=self.conv(x)

#

හැඩයලබා ගන්න.

85bs,c,h,w=x.shape

#

හැඩයටනැවත සකස් කරන්න [patches, batch_size, d_model]

87x=x.permute(2,3,0,1)88x=x.view(h\*w,bs,c)

#

පැච්කාවැද්දීම් ආපසු ලබා දෙන්න

91returnx

#

පරාමිතිකරණයකළ ස්ථානීය කේතීකරණ එකතු කරන්න

මෙයපැච් කාවැද්දීම් සඳහා උගත් ස්ථානීය කාවැද්දීම් එකතු කරයි.

94classLearnedPositionalEmbeddings(Module):

#

  • d_model ට්රාන්ස්ෆෝමර් කාවැද්දීම් ප්රමාණය වේ
  • max_len පැච් වල උපරිම ගණන
103def\_\_init\_\_(self,d\_model:int,max\_len:int=5\_000):

#

108super().\_\_init\_\_()

#

එක්එක් ස්ථානය සඳහා ස්ථානීය කාවැද්දීම්

110self.positional\_encodings=nn.Parameter(torch.zeros(max\_len,1,d\_model),requires\_grad=True)

#

  • x හැඩයේ පැච් කාවැද්දීම් වේ [patches, batch_size, d_model]
112defforward(self,x:torch.Tensor):

#

දීඇති පැච් සඳහා ස්ථානීය කාවැද්දීම් ලබා ගන්න

117pe=self.positional\_encodings[:x.shape[0]]

#

පැච්කාවැද්දීම් වලට එකතු කර ආපසු යන්න

119returnx+pe

#

එම්එල්පීවර්ගීකරණ හිස

[CLS] ටෝකන් කාවැද්දීම මත පදනම්ව රූපය වර්ගීකරණය කිරීම සඳහා ස්ථර දෙකේ එම්එල්පී හිස මෙයයි.

122classClassificationHead(Module):

#

  • d_model ට්රාන්ස්ෆෝමර් කාවැද්දීම ප්රමාණය වේ
  • n_hidden සැඟවුණු ස්ථරයේ ප්රමාණයයි
  • n_classes වර්ගීකරණ කාර්යයේ පන්ති ගණන වේ
130def\_\_init\_\_(self,d\_model:int,n\_hidden:int,n\_classes:int):

#

136super().\_\_init\_\_()

#

පළමුස්ථරය

138self.linear1=nn.Linear(d\_model,n\_hidden)

#

සක්‍රීයකිරීම

140self.act=nn.ReLU()

#

දෙවනස්ථරය

142self.linear2=nn.Linear(n\_hidden,n\_classes)

#

  • x``[CLS] ටෝකනය සඳහා ට්රාන්ස්ෆෝමර් කේතනය වේ
144defforward(self,x:torch.Tensor):

#

පළමුස්ථරය සහ සක්රිය කිරීම

149x=self.act(self.linear1(x))

#

දෙවනස්ථරය

151x=self.linear2(x)

#

154returnx

#

දැක්මට්රාන්ස්ෆෝමර්

මෙය පැච් කාවැද්දීම්, ස්ථානීය කාවැද්දීම්, ට්රාන්ස්ෆෝමර්සහ වර්ගීකරණ හිසඒකාබද්ධ කරයි.

157classVisionTransformer(Module):

#

165def\_\_init\_\_(self,transformer\_layer:TransformerLayer,n\_layers:int,166patch\_emb:PatchEmbeddings,pos\_emb:LearnedPositionalEmbeddings,167classification:ClassificationHead):

#

176super().\_\_init\_\_()

#

පැච්කාවැද්දීම්

178self.patch\_emb=patch\_emb179self.pos\_emb=pos\_emb

#

වර්ගීකරණහිස

181self.classification=classification

#

ට්රාන්ස්ෆෝමර්ස්ථරයේ පිටපත් සාදන්න

183self.transformer\_layers=clone\_module\_list(transformer\_layer,n\_layers)

#

[CLS] කාවැද්දීම ටෝකනය

186self.cls\_token\_emb=nn.Parameter(torch.randn(1,1,transformer\_layer.size),requires\_grad=True)

#

අවසානසාමාන්යකරණ ස්තරය

188self.ln=nn.LayerNorm([transformer\_layer.size])

#

  • x යනු හැඩයේ ආදාන රූපයයි [batch_size, channels, height, width]
190defforward(self,x:torch.Tensor):

#

පැච්කාවැද්දීම් ලබා ගන්න. මෙය හැඩයේ ආතතිකයක් ලබා දෙයි [patches, batch_size, d_model]

195x=self.patch\_emb(x)

#

ස්ථානීයකාවැද්දීම් එකතු කරන්න

197x=self.pos\_emb(x)

#

ට්රාන්ස්ෆෝමරයපෝෂණය කිරීමට පෙර [CLS] ටෝකන් කාවැද්දීම් සංයුක්ත කරන්න

199cls\_token\_emb=self.cls\_token\_emb.expand(-1,x.shape[1],-1)200x=torch.cat([cls\_token\_emb,x])

#

කිසිදුඅවධානයක් ආවරණ සහිත ට්රාන්ස්ෆෝමර් ස්ථර හරහා ගමන් කරන්න

203forlayerinself.transformer\_layers:204x=layer(x=x,mask=None)

#

[CLS] ටෝකනයේ ට්රාන්ස්ෆෝමර් ප්රතිදානය ලබා ගන්න (එය අනුපිළිවෙලෙහි පළමු වේ).

207x=x[0]

#

ස්ථරයසාමාන්යකරණය

210x=self.ln(x)

#

වර්ගීකරණහිස, පිවිසුම් ලබා ගැනීමට

213x=self.classification(x)

#

216returnx

Trending Research Paperslabml.ai