pytorch+visdom CNN 에서 자체 이미지 데이터 세트 를 처리 하 는 방법
시스템:win 10
cpu:i7-6700HQ
gpu:gtx965m
python : 3.6
pytorch :0.3
데이터 다운로드
Sasank Chilamkurthy 에서 유래 한 튜 토리 얼;데이터:링크 를 다운로드 하 다.
다운로드 후 압축 을 풀 어 프로젝트 루트 디 렉 터 리 에 넣 기:
데이터 세트 는 개미 와 벌 을 분류 하 는 데 쓰 인 다.약 120 개의 훈련 이미지 가 있 으 며,각 종 류 는 75 개의 검증 이미지 가 있다.
데이터 가 져 오기
torchvision.datasets.ImageFolder(root,transforms)모듈 을 사용 하여 그림 을 tensor 로 변환 할 수 있 습 니 다.
transform 을 먼저 정의 합 니 다:
ata_transforms = {
'train': transforms.Compose([
# 224x224
transforms.RandomResizedCrop(224),
#
transforms.RandomHorizontalFlip(),
# totensor (0,255) >> (0,1) normalize channel=(channel-mean)/std
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
]),
"val" : transforms.Compose([
#
transforms.Resize(256),
#
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
}
가 져 오기,데이터 불 러 오기:
data_dir = './hymenoptera_data'
# trans data
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'val']}
# load data
data_loaders = {x: DataLoader(image_datasets[x], batch_size=BATCH_SIZE, shuffle=True) for x in ['train', 'val']}
data_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}
class_names = image_datasets['train'].classes
print(data_sizes, class_names)
{'train': 244, 'val': 153} ['ants', 'bees']훈련 집 244 사진,테스트 집 153 사진.
시각 화 된 부분 그림 을 보 세 요.visdom 은 tensor 입력 을 지원 하기 때문에 numpy 로 바 꾸 지 않 고 tensor 로 계산 하면 됩 니 다.
inputs, classes = next(iter(data_loaders['val']))
out = torchvision.utils.make_grid(inputs)
inp = torch.transpose(out, 0, 2)
mean = torch.FloatTensor([0.485, 0.456, 0.406])
std = torch.FloatTensor([0.229, 0.224, 0.225])
inp = std * inp + mean
inp = torch.transpose(inp, 0, 2)
viz.images(inp)
CNN 만 들 기
net 는 전편 의 처리 에 따라 cifar 10 의 규격 을 바 꾸 었 다.
class CNN(nn.Module):
def __init__(self, in_dim, n_class):
super(CNN, self).__init__()
self.cnn = nn.Sequential(
nn.BatchNorm2d(in_dim),
nn.ReLU(True),
nn.Conv2d(in_dim, 16, 7), # 224 >> 218
nn.BatchNorm2d(16),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2), # 218 >> 109
nn.ReLU(True),
nn.Conv2d(16, 32, 5), # 105
nn.BatchNorm2d(32),
nn.ReLU(True),
nn.Conv2d(32, 64, 5), # 101
nn.BatchNorm2d(64),
nn.ReLU(True),
nn.Conv2d(64, 64, 3, 1, 1),
nn.BatchNorm2d(64),
nn.ReLU(True),
nn.MaxPool2d(2, 2), # 101 >> 50
nn.Conv2d(64, 128, 3, 1, 1), #
nn.BatchNorm2d(128),
nn.ReLU(True),
nn.MaxPool2d(3), # 50 >> 16
)
self.fc = nn.Sequential(
nn.Linear(128*16*16, 120),
nn.BatchNorm1d(120),
nn.ReLU(True),
nn.Linear(120, n_class))
def forward(self, x):
out = self.cnn(x)
out = self.fc(out.view(-1, 128*16*16))
return out
# 3 rgb , 2
model = CNN(3, 2)
loss,최적화 함수:
line = viz.line(Y=np.arange(10))
loss_f = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=LR, momentum=0.9)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)
인자:
BATCH_SIZE = 4
LR = 0.001
EPOCHS = 10
epoch 10 개 실행 하기:[9/10] train_loss:0.650|train_acc:0.639|test_loss:0.621|test_acc0.706
[10/10] train_loss:0.645|train_acc:0.627|test_loss:0.654|test_acc0.686
Training complete in 1m 16s
Best val Acc: 0.712418
20 개 실행 해 보기:
[19/20] train_loss:0.592|train_acc:0.701|test_loss:0.563|test_acc0.712
[20/20] train_loss:0.564|train_acc:0.721|test_loss:0.571|test_acc0.706
Training complete in 2m 30s
Best val Acc: 0.745098
정확도 가 비교적 낮다:74.5%에 불과 하 다.
우 리 는 models 의 resnet 18 을 사용 하여 10 개의 epoch 를 실행 합 니 다.
model = torchvision.models.resnet18(True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2)
[9/10] train_loss:0.621|train_acc:0.652|test_loss:0.588|test_acc0.667[10/10] train_loss:0.610|train_acc:0.680|test_loss:0.561|test_acc0.667
Training complete in 1m 24s
Best val Acc: 0.686275
효과 도 별로 입 니 다.짧 은 시간 안에 효과 가 좋 은 models 를 훈련 시 키 려 면 훈련 된 state 를 다운로드 하여 이 를 바탕 으로 훈련 할 수 있 습 니 다.
model = torchvision.models.resnet18(pretrained=True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2)
[9/10] train_loss:0.308|train_acc:0.877|test_loss:0.160|test_acc0.941[10/10] train_loss:0.267|train_acc:0.885|test_loss:0.148|test_acc0.954
Training complete in 1m 25s
Best val Acc: 0.954248
10 개의 epoch 가 직접 95%까지 의 정확도.
예시 코드:https://github.com/ffzs/ml_pytorch/blob/master/ml_pytorch_hymenoptera
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.