如何解决用于简单字母图像的 PyTorch 分类器:CNN 模型设计问题
寻找有关为文本的 CAPTCHA 图像构建简单图像分类器的技巧,其中每个字母只有两种可能的字体。这是一个示例图片:
迄今为止的方法是尝试将图像分解为 6 个大小相等的图像以尝试获得单个字符图像,并为这些图像构建分类器(示例如下)。
有没有更简单的方法来解决这个问题?关于如何设计实际模型的任何提示? (一个相对简单的 CNN 在这里应该就足够了?)
编辑:关于在下面构建合适模型的问题。
我试图在 resnet50 之上构建一个粗略的模型以达到低于标准的效果......这似乎是一种应该相对微不足道的图像分类任务。
非常感谢有关模型设计的任何提示。
代码如下:
model = models.resnet50(pretrained=True)
for param in model.parameters():
param.requires_grad = False
model.fc = nn.Sequential(nn.Linear(2048,512),nn.ReLU(),nn.Dropout(0.2),nn.Linear(512,26),nn.Logsoftmax(dim=1))
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.fc.parameters(),lr=0.003)
model.to(device)
epochs = 10
steps = 0
running_loss = 0
print_every = 10
train_losses,test_losses = [],[]
for epoch in range(epochs):
for inputs,labels in train_loader:
steps += 1
inputs,labels = inputs.to(device),labels.to(device)
optimizer.zero_grad()
logps = model.forward(inputs)
loss = criterion(logps,labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if steps % print_every == 0:
test_loss = 0
accuracy = 0
model.eval()
with torch.no_grad():
for inputs,labels in val_loader:
inputs,labels.to(device)
logps = model.forward(inputs)
batch_loss = criterion(logps,labels)
test_loss += batch_loss.item()
ps = torch.exp(logps)
top_p,top_class = ps.topk(1,dim=1)
equals = top_class == labels.view(*top_class.shape)
accuracy += torch.mean(equals.type(torch.FloatTensor)).item()
train_losses.append(running_loss/len(train_loader))
test_losses.append(test_loss/len(val_loader))
print(f"Epoch {epoch+1}/{epochs}.. "
f"Train loss: {running_loss/print_every:.3f}.. "
f"Test loss: {test_loss/len(val_loader):.3f}.. "
f"Test accuracy: {accuracy/len(val_loader):.3f}")
running_loss = 0
model.train()
上述结果如下所示,达到
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。