Я создаю модель распознавания лиц. Я уже обучил модель, используя образы двух человек (Криштиану Роналду и Лионеля Месси). Теперь я хочу добавить в модель больше людей (например, Марию Шарапову), не переучивая все с нуля.
Есть ли способ обучить модель новой модели, используя новый набор данных? Если да, то как я могу эффективно объединить новые данные обучения с существующей моделью?
Вот мой существующий код
import torch
import torchvision
from torchvision import datasets, models, transforms
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
data_transforms = {
'train': transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'test': transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
data_dir = './new_dataset'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x])
for x in ['train', 'test']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4, shuffle=True)
for x in ['train', 'test']}
class_names = image_datasets['train'].classes
model = models.resnet18(pretrained=True, progress=True)
num_classes = len(class_names)
model.fc = torch.nn.Linear(model.fc.in_features, num_classes)
device = torch.device("cpu")
model = model.to(device)
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
num_epochs = 10
for epoch in range(num_epochs):
for inputs, labels in dataloaders['train']:
inputs = inputs.to(device)
labels = labels.to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
torch.save(model.state_dict(), 'model.pth')
model.eval()
correct = 0
total = 0
with torch.no_grad():
for inputs, labels in dataloaders['test']:
inputs = inputs.to(device)
labels = labels.to(device)
outputs = model(inputs)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f"Accuracy on the test set: {accuracy}%")
Папка ./new_dataset выглядит следующим образом
new_dataset/
--test/
----cristiano_ronaldo
----lione_messi
--train/
----cristiano_ronaldo
----lione_messi
Подробнее здесь: https://stackoverflow.com/questions/791 ... -from-scra
Как постепенно обучать модель распознавания лиц без переобучения с нуля? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не может обучать контролируемую модель и модель машинного обучения в коде Visual Studio
Anonymous » » в форуме Python - 0 Ответы
- 28 Просмотры
-
Последнее сообщение Anonymous
-