【发布时间】:2020-09-24 20:33:45
【问题描述】:
我有一个工作和平的代码,它从 32 个图像中获取一个 256*256 形状的 Batchsize,我可以训练我的神经元网络。
class Netz(nn.Module):
def __init__(self):
super(Netz,self).__init__()
self.conv1 = nn.Conv2d(3, 6, kernel_size=5)
self.conv2 = nn.Conv2d(6, 12, kernel_size=3)
self.conv3 = nn.Conv2d(12, 18, kernel_size=3)
self.conv4 = nn.Conv2d(18, 24, kernel_size=3)
self.fc1 = nn.Linear(4704, 1000)
self.fc2 = nn.Linear(1000, 350)
self.fc3 = nn.Linear(350,43)
def forward (self,x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2(x), 2))
x = F.relu(F.max_pool2d(self.conv3(x), 2))
x = F.relu(F.max_pool2d(self.conv4(x), 2))
x = x.view(-1,4704)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return torch.sigmoid(x)
# Traningsalgorithmus
optimizer = optim.Adam(model.parameters(), lr=0.001)
def train(epoch):
model.train()
batch_id = 0
for data, target in train_data_set:
data = Variable(data)
target = torch.Tensor(target)
target = Variable(target)
optimizer.zero_grad()
out = model(data)
criterion = F.binary_cross_entropy
loss = criterion(out,target)
loss.backward()
optimizer.step()
print ('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_id * len(data), len(train_data_set)*32,
100. * batch_id / len(train_data_set), loss.item()))
batch_id = batch_id + 1
当我将图像的大小更改为 50*50 并像这样更改代码 Net 时:
class Netz(nn.Module):
def __init__(self):
super(Netz,self).__init__()
self.conv1 = nn.Conv2d(3, 6, kernel_size=5)
self.conv2 = nn.Conv2d(6, 12, kernel_size=3)
self.conv3 = nn.Conv2d(12, 18, kernel_size=3)
self.conv4 = nn.Conv2d(18, 24, kernel_size=3)
self.fc1 = nn.Linear(768, 1000)
self.fc2 = nn.Linear(1000, 350)
self.fc3 = nn.Linear(350,43)
def forward (self,x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2(x), 2))
x = F.relu(F.max_pool2d(self.conv3(x), 2))
x = F.relu(F.max_pool2d(self.conv4(x), 2))
x = x.view(-1,768)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return torch.sigmoid(x)
我会得到错误: ValueError:目标和输入必须具有相同数量的元素。目标 nelement (1376) != 输入 nelement (43)
到目前为止,我认为问题出现在 x = x.view(-1,768) 之后,它返回一个带有 torch.Size ([1,768]) 的张量。当我使用图像大小 256*256 时,它会返回带有 torch.Size ([32,4704]) 的张量,但我没有收到错误消息。
有人知道我可以如何解决我的问题吗?
【问题讨论】:
标签: python resize pytorch reshape valueerror