pytorch 가 자체 데이터 세트 를 읽 는 데 발생 한 문 제 를 해결 합 니 다.
질문 설명:
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found
해결 방법
데이터 형식 이 틀 렸 습 니 다.image 를 tensor 로 바 꾸 고 인자 transform 을 다음 과 같이 설정 하면 됩 니 다.transform=transform.Totensor().transform 검사 에 주의 하 세 요.
문제
질문 설명:
TypeError: append() takes exactly one argument (2 given)
문제점
imgs.append(words[0], int(words[1]))
해결 방법괄호 를 달다
imgs.append((words[0], int(words[1])))
질문문제 설명
RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same
해결 방법
데이터 와 모델 은 같은 장치 에 있 지 않 습 니 다.모두 GPU 에서 실행 되 거나 CPU 에 있 을 것 입 니 다.
문제
문제 설명
RuntimeError: Given groups=1, weight of size [64, 1, 3, 3], expected input[1, 3, 512, 512] to have 1 channels, but got 3 channels instead
해결 방법
그림 이 RGB 라 니............................................................................
보충:신경 망 pytorch 데이터 세트 읽 기(데이터 세트 자동 읽 기,수 동 으로 자신의 데 이 터 를 읽 기)
pytorch 에 대해 저 희 는 이미 포 장 된 데이터 세트 를 사용 할 수 있 고 자신의 데이터 세트 를 만 들 수 있 습 니 다.대체적으로 세 가지 방법 이 있 습 니 다.그 중에서 사용 하 는 두 개의 가방 은 datasets 와 DataLoader 입 니 다.
datasets:데이터 와 라벨 을 데이터 세트 로 포장 하 는 데 사용 합 니 다.
DataLoader:데이터 세트 를 고급 처리 하 는 데 사 용 됩 니 다.예 를 들 어 그룹,흐 트 러 짐,처리 등 은 훈련 과 테스트 에서 DataLoader 를 직접 사용 하여 처리 할 수 있 습 니 다.
첫 번 째 이미 만들어 진 포장 데이터 세트
이런 비교적 간단 한 대답 은 기 존의 몇 줄 코드 와 하나의 경로 만 있 으 면 완성 할 수 있 지만 보통 cifar-10 과 같은 자주 사용 된다.
상용 데이터 세트 에 대해 서 는 torchvision.datasets 를 사용 하여 직접 읽 을 수 있 습 니 다.이것 은 자주 사용 하 는 처리 입 니 다.이 클래스 도 torch.utils.data.dataset 에 계승 되 었 습 니 다.
# root
#
# CIFAR10
#
transform = transform.Compose([transform.ToTensor(), transform.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
#
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=False, transform=transform)
# DataLoader
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=1)
#
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=False, transform=transform)
testloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=False, num_workers=1)
classes = (1,2,3,4,5,6,7,8,9,10) #
#
for epoch in range(3):
running_loss = 0.0 # loss
for i, data in enumerate(trainloader, 0):
# get the inputs
inputs, labels = data #trainloader :id,image,labels
# inputs labels Variable
inputs, labels = Variable(inputs), Variable(labels)
# print
print("epoch:", epoch, " ", i, " inputs", inputs.data.size(), "labels", labels.data.size())
두 번 째 자신의 이미지 분류
이것 도 편리 한 방법 입 니 다.pytorch 에서 torchvision.datasets.ImageFolder 를 제공 하여 자신의 이미 지 를 훈련 시 킵 니 다.
요구:train 과 test 폴 더 를 만 들 고 폴 더 마다 분류 이름 에 따라 그림 을 저장 하면 dataloader 를 실현 할 수 있 습 니 다.
여기 서 는 그래도 예 를 들 어 보 자.사실은 우리 의 데이터 세트 일 수도 있다.
각 아래 의 배 치 는 이렇다.
#
transform = transform.Compose([transform.ToTensor(), transform.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
# torchvision.datasets.ImageFolder train test
img_data = torchvision.datasets.ImageFolder('data/cifar-10/train/', transform=transform)
data_loader = torch.utils.data.DataLoader(img_data, batch_size=4, shuffle=True, num_workers=1)
testset = torchvision.datasets.ImageFolder('data/cifar-10/test/', transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=True, num_workers=1)
for epoch in range(3):
for i, data in enumerate(trainloader, 0):
# get the inputs
inputs, labels = data #trainloader :id,image,labels
# inputs labels Variable
inputs, labels = Variable(inputs), Variable(labels)
# print
print("epoch:", epoch, " ", i, " inputs", inputs.data.size(), "labels", labels.data.size())
세 번 째 1 차원 벡터 데이터 세트이것 은 비교적 난감 한 것 이다.우선 우리 는
txt 등 파일 에 수 를 저장 하고 그 를 먼저 읽 으 면 읽 은 부분 은 자세히 말 하지 않 고 목록 에 읽 으 면 됩 니 다.
목록
trainlist = [] #
targetpath = 'a/b/b'
filelist = os.listdir(targetpath) #
filecount = len(filelist)
# list
for i in range(filecount):
filepath = os.path.join(targetpath, filelist[j])
with open(filepath, 'r') as f:
line = f.readline()
# 1,2,3,4,5,6
templist = list(map(int, line.split(',')))
trainlist.append(templist)
# filecount
# Tensor
# list0 list1
split = len(list0) #
# numpy.array torch.from_numpy tensor torch.cat
train0_numpy = numpy.array(list0)
train1_numpy = numpy.array(list1)
train_tensor = torch.cat([torch.from_numpy(train0_numpy), torch.from_numpytrain1_numpy)], 0)
# 【 , 】 【 , , 】
# RGB 【3, , 】
#
#
shaper = train_tensor.shape # 【 , 】
aa = torch.ones((shaper[0], 1, shaper[1])) #
for i in range(shaper[0]): #
・ aa[i][0][:] = train_tensor[i][:]
train_tensor = aa # 【 , , 】
# 【 , ,size_w,size_h】
#
# split
#
total = len(list0) + len(list1)
train_label = numpy.zeros(total)
train_label[split+1:total] = 1
train_label_tensor = torch.from_numpy(train_label).int()
# print(train_tensor.size(),train_label_tensor.size())
# dataloader
train_dataset = TensorDataset(train_tensor, train_label_tensor)
train_loader = DataLoader(dataset=train_dataset, batch_size=4, shuffle=True)
for epoch in range(3):
for i, data in enumerate(trainloader, 0):
# get the inputs
inputs, labels = data #trainloader :id,image,labels
# inputs labels Variable
inputs, labels = Variable(inputs), Variable(labels)
# print
print("epoch:", epoch, " ", i, " inputs", inputs.data.size(), "labels", labels.data.size())
네 번 째 경로 와 탭 을 저장 하 는 방식 으로 데이터 세트 를 만 듭 니 다.이 방법 은 약간의 번 거 로 움 이 필요 합 니 다.우선 txt 가 있 습 니 다.파일 이름과 대응 하 는 탭 을 저장 하 였 습 니 다.아마도 이 뜻 일 것 입 니 다.
그리고 프로그램 에서 주어진 루트 디 렉 터 리 에 따라 파일 을 찾 고 탭 을 저장 합 니 다.
class Dataset(object):
"""An abstract class representing a Dataset.
All other datasets should subclass it. All subclasses should override
``__len__``, that provides the size of the dataset, and ``__getitem__``,
supporting integer indexing in range from 0 to len(self) exclusive.
"""
def __getitem__(self, index):
raise NotImplementedError
def __len__(self):
raise NotImplementedError
def __add__(self, other):
return ConcatDataset([self, other])
이것 은 dataset 의 원래 내용 입 니 다.getitem 은 요 소 를 가 져 오 는 부분 으로 index 에 대응 하 는 데이터 와 탭 을 되 돌려 줍 니 다.그러면 대개 해 야 할 일 은 txt 의 내용 을 읽 고 프로그램 으로 태그 와 데 이 터 를 처리 하 는 것 입 니 다.
# coding: utf-8
from PIL import Image
from torch.utils.data import Dataset
class MyDataset(Dataset):
# txt
def __init__(self, txt_path, transform = None, target_transform = None):
fh = open(txt_path, 'r')
imgs = []
for line in fh:
line = line.rstrip()
words = line.split()
#
imgs.append((words[0], int(words[1])))
self.imgs = imgs
self.transform = transform
self.target_transform = target_transform
def __getitem__(self, index):
fn, label = self.imgs[index]
img = Image.open(fn).convert('RGB')
if self.transform is not None:
img = self.transform(img)
#
return img, label
def __len__(self):
return len(self.imgs)
# myImageFloder txt
import os
import torch
import torch.utils.data as data
from PIL import Image
def default_loader(path):
return Image.open(path).convert('RGB')
class myImageFloder(data.Dataset):
def __init__(self, root, label, transform = None, target_transform=None, loader=default_loader):
fh = open(label) # label
c=0
imgs=[] #
class_names=[]
for line in fh.readlines(): #
if c==0:
class_names=[n.strip() for n in line.rstrip().split(' ')]
else:
cls = line.split() #
fn = cls.pop(0) #
if os.path.isfile(os.path.join(root, fn)): #
imgs.append((fn, tuple([float(v) for v in cls]))) #
c=c+1
#
self.root = root
self.imgs = imgs
self.classes = class_names
self.transform = transform
self.target_transform = target_transform
self.loader = loader
def __getitem__(self, index): #
fn, label = self.imgs[index] # label
img = self.loader(os.path.join(self.root, fn))
if self.transform is not None: #
img = self.transform(img)
return img, torch.Tensor(label) # label
def __len__(self):
return len(self.imgs)
def getName(self):
return self.classes
#
#
trainset = MyDataset(txt_path=pathFile,transform = None, target_transform = None)
# trainset = torch.utils.data.DataLoader(myFloder.myImageFloder(root = "../data/testImages/images", label = "../data/testImages/test_images.txt", transform = mytransform ), batch_size= 2, shuffle= False, num_workers= 2)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True, num_workers=8)
데이터 세트 를 계승 하여 초기 화 에서 txt 텍스트 데 이 터 를 처리 하고 해당 하 는 데 이 터 를 저장 하 며 해당 하 는 기능 을 실현 하 는 것 이 요점 입 니 다.그 중의 원 리 는 바로 이와 같 지만 약간 부적 절 한 부분 이 있 을 수 있 으 므 로 그때 현장 테스트 가 필요 할 것 이다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.