如何解决在 Pytorch 中获得正确的尺寸/形状以输入神经网络时遇到问题
我正在尝试将特定大小的张量输入到我的线性层中,但我正在努力获得正确的维度(对此没有太多经验)
我意识到我必须更改线性层 (self.linear1) 的尺寸,但我不知道应该将线性层设置为什么尺寸。我目前正在输入大小为 [32,1164] 的向量。
这是打印输出的摘要以及我得到的错误。
torch.Size([32,1152])
torch.Size([32,1])
x.shape: torch.Size([32,1164])
File "/home/vanstorm/Documents/Programming/reinforcement-learning/curiousModule.py",line 113,in forward
y = F.relu(self.linear1(x))
File "/home/vanstorm/.local/lib/python3.8/site-packages/torch/nn/modules/module.py",line 727,in _call_impl
result = self.forward(*input,**kwargs)
File "/home/vanstorm/.local/lib/python3.8/site-packages/torch/nn/modules/linear.py",line 93,in forward
return F.linear(input,self.weight,self.bias)
File "/home/vanstorm/.local/lib/python3.8/site-packages/torch/nn/functional.py",line 1690,in linear
ret = torch.addmm(bias,input,weight.t())
RuntimeError: mat1 dim 1 must match mat2 dim 0
显然我的尺寸不正确,而且我在 Pytorch 中处理不同的尺寸尺寸方面经验不足。设置我的 self.linear1 和 self.linear2 的合适尺寸是多少?
任何人都可以解释正确维数的逻辑,以便我可以避免这种情况。我将如何计算线性层的所需尺寸?
我正在使用的代码:
class Fnet(nn.Module): #C Forward network
def __init__(self):
super(Fnet,self).__init__()
self.linear1 = nn.Linear(300,256)
self.linear2 = nn.Linear(256,288)
def forward(self,state,action):
action = action.unsqueeze(1)
action_ = torch.zeros(action.to(device).shape[0],12).to(device) #D
indices = torch.stack( (torch.arange(action.shape[0]).to(device),action.squeeze().to(device)),dim=0)
indices = indices.tolist()
action_[indices] = 1.
x = torch.cat( (state,action_),dim=1)
print(state.shape)
print(action.shape)
x = torch.flatten(x,start_dim = 1)
print('x.shape: ',x.shape)
y = F.relu(self.linear1(x))
y = self.linear2(y)
return y
有人可以帮我吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。