docs/si/rl/dqn/model.html
13importtorch14fromtorchimportnn1516fromlabml\_helpers.moduleimportModule
Q-අගයන්ගණනය කිරීම සඳහා අපි ඩූලිං ජාලයක් භාවිතා කරමු. ජාල ගෘහ නිර්මාණ ශිල්පය dueling පිටුපස ඇති ප්රතිභානය නම්, බොහෝ ප්රාන්තවල ක්රියාව වැදගත් නොවන අතර සමහර ප්රාන්තවල ක්රියාව සැලකිය යුතු ය. Dueling ජාලය මෙය ඉතා හොඳින් නිරූපණය කිරීමට ඉඩ දෙයි.
Qπ(s,a)Ea∼π(s)[Aπ(s,a)]=Vπ(s)+Aπ(s,a)=0
එබැවින්අපි ජාල දෙකක් නිර්මාණය V A කර Q ඔවුන්ගෙන් ලබා ගනිමු. Q(s,a)=V(s)+(A(s,a)−∣A∣1a′∈A∑A(s,a′)) අපි V සහ A ජාල වල ආරම්භක ස්ථර බෙදා ගනිමු.
19classModel(Module):
50def\_\_init\_\_(self):51super().\_\_init\_\_()52self.conv=nn.Sequential(
පළමුකැටි ගැසුණු ස්තරය 84×84 රාමුවක් ගෙන 20×20 රාමුවක් නිපදවයි
55nn.Conv2d(in\_channels=4,out\_channels=32,kernel\_size=8,stride=4),56nn.ReLU(),
දෙවනකැටි ගැසුණු ස්තරය 20×20 රාමුවක් ගෙන 9×9 රාමුවක් නිපදවයි
60nn.Conv2d(in\_channels=32,out\_channels=64,kernel\_size=4,stride=2),61nn.ReLU(),
තෙවනකැටි ගැසුණු ස්තරය 9×9 රාමුවක් ගෙන 7×7 රාමුවක් නිපදවයි
65nn.Conv2d(in\_channels=64,out\_channels=64,kernel\_size=3,stride=1),66nn.ReLU(),67)
සම්පුර්ණයෙන්මසම්බන්ධිත තට්ටුවක් පැතලි රාමුව තෙවන කැටි ගැසුණු ස්ථරයෙන් ගන්නා අතර 512 විශේෂාංග ප්රතිදානය කරයි
72self.lin=nn.Linear(in\_features=7\*7\*64,out\_features=512)73self.activation=nn.ReLU()
මෙමහිස රාජ්ය වටිනාකම ලබා දෙයි V
76self.state\_value=nn.Sequential(77nn.Linear(in\_features=512,out\_features=256),78nn.ReLU(),79nn.Linear(in\_features=256,out\_features=1),80)
මෙමහිස ක්රියාකාරී අගය ලබා දෙයි A
82self.action\_value=nn.Sequential(83nn.Linear(in\_features=512,out\_features=256),84nn.ReLU(),85nn.Linear(in\_features=256,out\_features=4),86)
88defforward(self,obs:torch.Tensor):
සංවලිත
90h=self.conv(obs)
රේඛීයස්ථර සඳහා නැවත සකස් කරන්න
92h=h.reshape((-1,7\*7\*64))
රේඛීයස්ථරය
95h=self.activation(self.lin(h))
A
98action\_value=self.action\_value(h)
V
100state\_value=self.state\_value(h)
A(s,a)−∣A∣1∑a′∈AA(s,a′)
103action\_score\_centered=action\_value-action\_value.mean(dim=-1,keepdim=True)
Q(s,a)=V(s)+(A(s,a)−∣A∣1∑a′∈AA(s,a′))
105q=state\_value+action\_score\_centered106107returnq