- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
自十一月以来,我一直在自学这一点,对此的任何帮助将非常感激,感谢您的关注,因为我似乎在兜圈子。我正在尝试使用与 Mnist 数据集一起使用的 Pytorch CNN 示例。现在我正在尝试修改CNN以进行面部关键点识别。我使用的 Kaggle 数据集 (CSV) 包含 7048 个训练图像和关键点(每张脸 15 个关键点)和 1783 个测试图像。我分割了训练数据集并将图像转换为 jpeg,为关键点(形状 15、2)制作了单独的文件。我已经制作了数据集和数据加载器,可以迭代并显示图像并绘制关键点。当我运行 CNN 时,我收到此错误。
> Net(
(conv1): Conv2d(1, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(conv2): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(conv2_drop): Dropout2d(p=0.5)
(fc1): Linear(in_features=589824, out_features=100, bias=True)
(fc2): Linear(in_features=100, out_features=30, bias=True)
)
Data and target shape: torch.Size([64, 96, 96]) torch.Size([64, 15, 2])
Data and target shape: torch.Size([64, 1, 96, 96]) torch.Size([64, 15, 2])
Traceback (most recent call last):
File "/home/keith/PycharmProjects/FacialLandMarks/WorkOut.py", line 416, in <module>
main()
File "/home/keith/PycharmProjects/FacialLandMarks/WorkOut.py", line 412, in main
train(args, model, device, train_loader, optimizer, epoch)
File "/home/keith/PycharmProjects/FacialLandMarks/WorkOut.py", line 324, in train
loss = F.nll_loss(output, target)
File "/home/keith/Desktop/PycharmProjects/fkp/FacialLandMarks/lib/python3.6/site-packages/torch/nn/functional.py", line 1788, in nll_loss
.format(input.size(0), target.size(0)))
ValueError: Expected input batch_size (4) to match target batch_size (64).
Process finished with exit code 1
这是我读过的一些链接,我无法找出问题所在但可能会帮助别人。
https://github.com/pytorch/pytorch/issues/11762 How do I modify this PyTorch convolutional neural network to accept a 64 x 64 image and properly output predictions? pytorch-convolutional-neural-network-to-accept-a-64-x-64-im Pytorch Validating Model Error: Expected input batch_size (3) to match target batch_size (4) model-error-expected-input-batch-size-3-to-match-target-ba
这是我的代码:
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=5, stride=1, padding=(2, 2))
self.conv2 = nn.Conv2d(32, 64, kernel_size=5, stride=1, padding=(2, 2))
self.conv2_drop = nn.Dropout2d()
self.fc1 = nn.Linear(64 * 96 * 96, 100)
self.fc2 = nn.Linear(100, 30) # 30 is x and y key points
def forward(self, x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
x = x.view(-1, 64 * 96 * 96)
# x = x.view(x.size(0), -1)
# x = x.view(x.size()[0], 30, -1)
x = F.relu(self.fc1(x))
x = F.dropout(x, training=self.training)
x = self.fc2(x)
return F.log_softmax(x, dim=1)
def train(args, model, device, train_loader, optimizer, epoch):
model.train()
for batch_idx, batch in enumerate(train_loader):
data = batch['image']
target = batch['key_points']
print('Data and target shape: ', data.shape, ' ', target.shape)
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
data = data.unsqueeze(1).float()
print('Data and target shape: ', data.shape, ' ', target.shape)
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
optimizer.step()
if batch_idx % args.log_interval == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.item()))
# def test(args, model, device, test_loader):
# model.eval()
# test_loss = 0
# correct = 0
# with torch.no_grad():
# for data, target in test_loader:
# data, target = data.to(device), target.to(device)
# output = model(data)
# test_loss += F.nll_loss(output, target, reduction='sum').item() # sum up batch loss
# pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability
# correct += pred.eq(target.view_as(pred)).sum().item()
#
# test_loss /= len(test_loader.dataset)
# print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
# test_loss, correct, len(test_loader.dataset),
# 100. * correct / len(test_loader.dataset)))
def main():
# Training settings
parser = argparse.ArgumentParser(description='Project')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',
help='input batch size for testing (default: 1000)')
parser.add_argument('--epochs', type=int, default=10, metavar='N', # ======== epoch
help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR',
help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S',
help='random seed (default: 1)')
parser.add_argument('--log-interval', type=int, default=10, metavar='N',
help='how many batches to wait before logging training status')
args = parser.parse_args()
use_cuda = not args.no_cuda and torch.cuda.is_available()
torch.manual_seed(args.seed)
device = torch.device("cuda" if use_cuda else "cpu")
kwargs = {'num_workers': 1, 'pin_memory': True} if use_cuda else {}
train_data_set = FaceKeyPointDataSet(csv_file='faces/Kep_points_and_id.csv',
root_dir='faces/',
transform=transforms.Compose([
# Rescale(96),
ToTensor()
]))
train_loader = DataLoader(train_data_set, batch_size=args.batch_size,
shuffle=True)
print('Number of samples: ', len(train_data_set))
print('Number of train_loader: ', len(train_loader))
model = Net().to(device)
print(model)
optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)
for epoch in range(1, args.epochs + 1):
train(args, model, device, train_loader, optimizer, epoch)
# test(args, model, device, test_loader)
if __name__ == '__main__':
main()
最佳答案
要了解出了什么问题,您可以在前进的每一步之后打印形状:
# Input data
torch.Size([64, 1, 96, 96])
x = F.relu(F.max_pool2d(self.conv1(x), 2))
torch.Size([64, 32, 48, 48])
x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
torch.Size([64, 64, 24, 24])
x = x.view(-1, 64 * 96 * 96)
torch.Size([4, 589824])
x = F.relu(self.fc1(x))
torch.Size([4, 100])
x = F.dropout(x, training=self.training)
torch.Size([4, 100])
x = self.fc2(x)
torch.Size([4, 30])
return F.log_softmax(x, dim=1)
torch.Size([4, 30])
maxpool2d
层会减少特征图的高度和宽度。x = x.view(-1, 64 * 24 * 24)
self.fc1 = nn.Linear(64 * 24 * 24, 100)
这将为您提供 output = model(data)
最终形状 torch.Size([64, 30])
但是这段代码在计算负对数似然损失时仍然会遇到问题:
The input is expected to contain scores for each class. input has to be a 2D Tensor of size (minibatch, C). This criterion expects a class index (0 to C-1) as the target for each value of a 1D tensor of size minibatch
其中类索引只是标签:
values representing a class. For example:
0 - class0, 1 - class1,
由于您的最后一个 nn 层输出超过 30 个类别的 softmax,我假设这是您想要分类的输出类别,所以目标的转换:
target = target.view(64, -1) # gives 64X30 ie, 30 values per channel
loss = F.nll_loss(x, torch.max(t, 1)[1]) # takes max amongst the 30 values as class label
这是当目标是超过 30 个类别的概率分布时,如果不是可以在此之前进行软最大值。因此,30 个值中的最大值将代表最高概率 - 因此该类正是您的输出所代表的,因此您可以计算两个值之间的 nll。 。
关于python - Pytorch CNN错误: Expected input batch_size (4) to match target batch_size (64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54928638/
R-CNN、fast R-CNN、faster R-CNN 和 YOLO 在以下方面有什么区别: (1) 同一图像集上的精度 (2) 给定 SAME IMAGE SIZE,运行时间 (3) 支持安卓移
我试图比较 CNN 模型和组合 CNN-SVM 模型进行分类的准确性结果。然而我发现 CNN 模型比 CNN-SVM 组合模型具有更好的准确性。这是正确的还是可能发生? 最佳答案 这取决于很多因素,但
我知道这可能是一个愚蠢的问题,但我对机器学习和人工神经网络有点陌生。 深度卷积神经网络和密集卷积神经网络有什么区别吗? 提前致谢! 最佳答案 密集 CNN 是深度 CNN 的一种,其中每一层都与比自身
我正在使用预训练的 CNN 从图片中提取特征。使用这些特征作为新 CNN/NN 的输入有意义吗?以前做过吗?我很高兴得到答复。 最佳答案 这称为微调。这是非常常用的。通常,我们会删除 VGG 或类似网
与 caffe 合作几个月后,我已经能够成功地训练我自己的模型。例如,比我自己的模型更进一步,我已经能够用 1000 个类来训练 ImageNet。 现在在我的项目中,我试图提取我感兴趣的区域。之后我
我正在使用下面的 LeNet 架构来训练我的图像分类模型,我注意到每次迭代都不会提高训练和验证的准确性。这方面的任何专家都可以解释可能出了什么问题吗? 训练样本 - 属于 2 个类别的 110 张图像
我使用剩余连接实现了以下 CNN,用于在 CIFAR10 上对 10 个类进行分类: class ConvolutionalNetwork(nn.Module): def __init__(se
我有一组二维输入数组 m x n即 A,B,C我必须预测两个二维输出数组,即 d,e我确实有预期值。如果您愿意,您可以将输入/输出视为灰色图像。 由于空间信息是相关的(这些实际上是 2D 物理域)我想
我正在开发一个交通跟踪系统,该系统可以分析已经收集的视频。我正在使用opencv,线程,pytorch和dectron2。为了加快从opencv抓帧的速度,我决定使用Thread,该线程运行一个循环,
我正在解决一个问题,需要我构建一个深度学习模型,该模型必须基于某些输入图像输出另一个图像。值得注意的是,这两个图像在概念上是相关的,但它们没有相同的尺寸。 起初我认为具有最终密集层(其参数是输出图像的
我正在制作一个卷积网络来预测 3 类图像:猫、狗和人。我训练了又训练它,但是当我传递猫图像来预测时,它总是给出错误的输出。我尝试了其他猫的照片,但结果没有改变。对于人和狗来说没有问题,只是对于猫来说。
我接到一项任务,要实现一个卷积神经网络,该网络可以评估 MNIST dataset 中找到的手写数字。网络架构如下所示: 我已经实现了一个与架构相匹配的 CNN,不幸的是它的准确率只有 10% 左右。
我正在尝试在 Keras 中重新创建 CNN 来对点云数据进行分类。 CNN 在 this 中描述。纸。 网络设计 这是我当前的实现: inputs = Input(shape=(None, 3))
我想为有 300 个类的数据集设计 CNN。我已经用以下模型对两个类(class)进行了测试。它具有良好的准确性。 model = Sequential([ Conv2D(16, 3, padding
我成功训练了 CNN 模型,但是当我向模型提供图像以使其预测标签时,出现错误。 这是我的模型(我正在使用 saver.restore 恢复它)... # load dataset mnist = in
我恢复了用于人脸检测的预训练模型,该模型一次获取单个图像并返回边界框。如果这些图像具有不同的尺寸,如何才能获取一批图像? 最佳答案 您可以使用tf.image.resize_images方法来实现这一
我有大约 8200 张图像用于人脸检测任务。其中 4800 个包含人脸。其他 3400 张图像包含 3D 人脸面具(由橡胶/ latex 制成)、卡通人脸、猴子脸的图像。我想检测给定的图像是否包含真实
我有一组合成噪声图像。示例如下: 我还有它们相应的干净文本图像作为我的地面实况数据。下面的例子: 两个图像的尺寸为4918 x 5856。它的大小是否适合训练我的执行图像去噪的卷积神经网络?如果没有,
大家好! 由于我正在尝试制作一个将灰度图像转换为 RGB 图像的全卷积神经网络,所以我想知道是否可以在不同大小的图像(不同的像素和比率)上训练和测试模型。通常你只会下采样或上采样,这是我不想做的。我听
我正在研究 CNN 特征的早期和晚期融合。我从 CNN 的多层中获取了特征。对于早期融合,我捕获了三个不同层的特征,然后水平连接它们 F= [F1' F2' F3']; 对于后期融合,我正在阅读此 p
我是一名优秀的程序员,十分优秀!