13import torch
14from torch import nn
15
16from labml_helpers.module import ModuleQ-අගයන්ගණනය කිරීම සඳහා අපි ඩූලිං ජාලයක් භාවිතා කරමු. ජාල ගෘහ නිර්මාණ ශිල්පය dueling පිටුපස ඇති ප්රතිභානය නම්, බොහෝ ප්රාන්තවල ක්රියාව වැදගත් නොවන අතර සමහර ප්රාන්තවල ක්රියාව සැලකිය යුතු ය. Dueling ජාලය මෙය ඉතා හොඳින් නිරූපණය කිරීමට ඉඩ දෙයි.
එබැවින්අපි ජාල දෙකක් නිර්මාණය කර ඔවුන්ගෙන් ලබා ගනිමු. අපි සහ ජාල වල ආරම්භක ස්ථර බෙදා ගනිමු.
19class Model(Module):50 def __init__(self):
51 super().__init__()
52 self.conv = nn.Sequential(පළමුකැටි ගැසුණු ස්තරය රාමුවක් ගෙන රාමුවක් නිපදවයි
55 nn.Conv2d(in_channels=4, out_channels=32, kernel_size=8, stride=4),
56 nn.ReLU(),දෙවනකැටි ගැසුණු ස්තරය රාමුවක් ගෙන රාමුවක් නිපදවයි
60 nn.Conv2d(in_channels=32, out_channels=64, kernel_size=4, stride=2),
61 nn.ReLU(),තෙවනකැටි ගැසුණු ස්තරය රාමුවක් ගෙන රාමුවක් නිපදවයි
65 nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1),
66 nn.ReLU(),
67 )සම්පුර්ණයෙන්මසම්බන්ධිත තට්ටුවක් පැතලි රාමුව තෙවන කැටි ගැසුණු ස්ථරයෙන් ගන්නා අතර විශේෂාංග ප්රතිදානය කරයි
72 self.lin = nn.Linear(in_features=7 * 7 * 64, out_features=512)
73 self.activation = nn.ReLU()මෙමහිස රාජ්ය වටිනාකම ලබා දෙයි
76 self.state_value = nn.Sequential(
77 nn.Linear(in_features=512, out_features=256),
78 nn.ReLU(),
79 nn.Linear(in_features=256, out_features=1),
80 )මෙමහිස ක්රියාකාරී අගය ලබා දෙයි
82 self.action_value = nn.Sequential(
83 nn.Linear(in_features=512, out_features=256),
84 nn.ReLU(),
85 nn.Linear(in_features=256, out_features=4),
86 )88 def forward(self, obs: torch.Tensor):සංවලිත
90 h = self.conv(obs)රේඛීයස්ථර සඳහා නැවත සකස් කරන්න
92 h = h.reshape((-1, 7 * 7 * 64))රේඛීයස්ථරය
95 h = self.activation(self.lin(h))98 action_value = self.action_value(h)100 state_value = self.state_value(h)103 action_score_centered = action_value - action_value.mean(dim=-1, keepdim=True)105 q = state_value + action_score_centered
106
107 return q