我开始研究神经网络,但我无法完成这样的任务。这是作业。
创建一个名为MyModel的类,用它可以创建一个神经网络,如图所示。在此模型中,每个后续线性层的神经元都比前一层少一个。创建 MyModel 类时,使用
nn.ModuleList
类。
创建一个输入张量大小为 20、输出张量大小为 10 的神经网络模型。将结果写入模型变量。
这是我得到的代码:
import torch
import torch.nn as nn
class MyModel(nn.Module):
def __init__(self, inp, out):
super(MyModel, self).__init__()
layers = []
for i in range(9):
layers.append(nn.Linear(inp, inp - 1))
layers.append(nn.ReLU())
inp -= 1
layers.append(nn.Linear(inp, out))
self.layers = nn.ModuleList(layers)
def forward(self, x):
for layer in self.layers:
x = layer(x)
return x
model = MyModel(inp=20, out=10)
这是执行此代码时出现的错误:“创建的模型与图中的模型不匹配。请注意,内层上的输入和输出张量的大小不取决于位于处的张量的大小网络的入口和出口。”
但是我不知道错误在哪里,请帮我找出来
您可以使用
nn.Sequential
轻松组合所有层,并使用 nn.LazyLinear
组合第一层,它接受所有输入尺寸。
class MyModel(nn.Module):
def __init__(self, out_first=19):
super(MyModel, self).__init__()
layers = [nn.LazyLinear(out_first)]
out = out_first
for _ in range(9):
layers.append(nn.ReLU())
layers.append(nn.Linear(out, out - 1))
out -= 1
self.fc = nn.Sequential(*layers)
def forward(self, x):
return self.fc(x)
model = MyModel()