给定 groups=1,大小为 16 16 3 3 的权重,预期输入 [16, 64, 222, 222] 有 16 个通道,但得到的是 64 个通道?
Given groups=1, weight of size 16 16 3 3, expected input[16, 64, 222, 222] to have 16 channels, but got 64 channels instead?
我尝试运行以下程序来解决 Pytorch 中的图像class化问题。
我是 PyTorch 的新手,我不知道代码有什么问题。我尝试重塑图像但没有帮助。
我正在 运行 使用 Cuda 编写此代码。我在一个 class 中有大约 750 classes 和 10-20 张图像。我的数据集是基准数据集,每张图片的大小都是 60*160。
class Net(nn.Module):
def __init__(self):
super().__init__()
self.ConvLayer1 = nn.Sequential(
nn.Conv2d(3, 64, 3), # inp (3, 512, 512) changes doing here original (3, 64, 3)
nn.Conv2d(8, 16, 3), # original (8,16,3)
nn.MaxPool2d(2),
nn.ReLU() # op (16, 256, 256)
)
self.ConvLayer2 = nn.Sequential(
nn.Conv2d(16, 32, 5), # inp (16, 256, 256)
nn.Conv2d(32, 32, 3),
nn.MaxPool2d(4),
nn.ReLU() # op (32, 64, 64)
)
self.ConvLayer3 = nn.Sequential(
nn.Conv2d(32, 64, 3), # inp (32, 64, 64) original (32,64,3)
nn.Conv2d(64, 64, 5),
nn.MaxPool2d(2),
nn.ReLU() # op (64, 32, 32)
)
self.ConvLayer4 = nn.Sequential(
nn.Conv2d(64, 128, 5), # inp (64, 32, 32)
nn.Conv2d(128, 128, 3),
nn.MaxPool2d(2),
nn.ReLU() # op (128, 16, 16)
)
self.Lin1 = nn.Linear(15488, 15)
self.Lin2 = nn.Linear(1500, 150)
self.Lin3 = nn.Linear(150, 15)
def forward(self, x):
x = self.ConvLayer1(x)
x = self.ConvLayer2(x)
x = self.ConvLayer3(x)
x = self.ConvLayer4(x)
x = x.view(x.size(0), -1)
x = self.Lin1(x)
return F.log_softmax(x, dim = 1)
'''
'''
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.0001, momentum=0.5)
for epoch in tqdm(range(2)): # loop over the dataset multiple times
running_loss = 0.0
for i, data in enumerate(dataloaders['train']):
# get the inputs; data is a list of [inputs, labels]
inputs, class_names = data
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs = model(inputs)
loss = criterion(outputs, class_names)
loss.backward()
optimizer.step()
# print statistics
running_loss += loss.item()
# if i % 10 == 0: # print every 10 mini-batches
# print('[%d, %5d] loss: %.3f' %
# (epoch + 1, i + 1, running_loss / 2000))
# running_loss = 0.0
break
print('Finished Training')
收到此错误,我不知道在哪里进行更改。
给定 groups=1,大小为 16 16 3 3 的权重,预期输入 [16, 64, 222, 222] 有 16 个通道,但得到的却是 64 个通道。
一个卷积层中的输出通道数需要与下一个卷积层中的输入通道数相匹配。假设你有 nn.Conv(3, 64, 3)
那么下一个转换层需要开始 nn.Conv(64, ...
。现在的问题是您正在尝试将 64 通道结果传递到您定义为期望 8 通道输入的转换层。
我尝试运行以下程序来解决 Pytorch 中的图像class化问题。 我是 PyTorch 的新手,我不知道代码有什么问题。我尝试重塑图像但没有帮助。 我正在 运行 使用 Cuda 编写此代码。我在一个 class 中有大约 750 classes 和 10-20 张图像。我的数据集是基准数据集,每张图片的大小都是 60*160。
class Net(nn.Module):
def __init__(self):
super().__init__()
self.ConvLayer1 = nn.Sequential(
nn.Conv2d(3, 64, 3), # inp (3, 512, 512) changes doing here original (3, 64, 3)
nn.Conv2d(8, 16, 3), # original (8,16,3)
nn.MaxPool2d(2),
nn.ReLU() # op (16, 256, 256)
)
self.ConvLayer2 = nn.Sequential(
nn.Conv2d(16, 32, 5), # inp (16, 256, 256)
nn.Conv2d(32, 32, 3),
nn.MaxPool2d(4),
nn.ReLU() # op (32, 64, 64)
)
self.ConvLayer3 = nn.Sequential(
nn.Conv2d(32, 64, 3), # inp (32, 64, 64) original (32,64,3)
nn.Conv2d(64, 64, 5),
nn.MaxPool2d(2),
nn.ReLU() # op (64, 32, 32)
)
self.ConvLayer4 = nn.Sequential(
nn.Conv2d(64, 128, 5), # inp (64, 32, 32)
nn.Conv2d(128, 128, 3),
nn.MaxPool2d(2),
nn.ReLU() # op (128, 16, 16)
)
self.Lin1 = nn.Linear(15488, 15)
self.Lin2 = nn.Linear(1500, 150)
self.Lin3 = nn.Linear(150, 15)
def forward(self, x):
x = self.ConvLayer1(x)
x = self.ConvLayer2(x)
x = self.ConvLayer3(x)
x = self.ConvLayer4(x)
x = x.view(x.size(0), -1)
x = self.Lin1(x)
return F.log_softmax(x, dim = 1)
'''
'''
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.0001, momentum=0.5)
for epoch in tqdm(range(2)): # loop over the dataset multiple times
running_loss = 0.0
for i, data in enumerate(dataloaders['train']):
# get the inputs; data is a list of [inputs, labels]
inputs, class_names = data
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs = model(inputs)
loss = criterion(outputs, class_names)
loss.backward()
optimizer.step()
# print statistics
running_loss += loss.item()
# if i % 10 == 0: # print every 10 mini-batches
# print('[%d, %5d] loss: %.3f' %
# (epoch + 1, i + 1, running_loss / 2000))
# running_loss = 0.0
break
print('Finished Training')
收到此错误,我不知道在哪里进行更改。 给定 groups=1,大小为 16 16 3 3 的权重,预期输入 [16, 64, 222, 222] 有 16 个通道,但得到的却是 64 个通道。
一个卷积层中的输出通道数需要与下一个卷积层中的输入通道数相匹配。假设你有 nn.Conv(3, 64, 3)
那么下一个转换层需要开始 nn.Conv(64, ...
。现在的问题是您正在尝试将 64 通道结果传递到您定义为期望 8 通道输入的转换层。