pytorch: загрузить данные в нейросеть
Стоит задача: научить нейросеть определять по росту и весу, кто это - мужчина или женщина (в учебных целях). Соответственно, примерно такие входные данные:
data = [[random.randint(168, 185), random.randint(70, 88)] for _ in range(200)]
data.extend([random.randint(155, 168), random.randint(55, 66)] for _ in range(200))
target = [0 for _ in range(200)]
target.extend(1 for _ in range(200))
train_loader = list(zip(data, target))
[([171, 79], 0), # [рост, вес], мужчина
([173, 75], 0),
...
([160, 59], 1), # [рост, вес], женщина
([162, 59], 1)]
Нашел пример (полный код) кода нейросети на pytorch. Мне он идеально подходит, довольно простой: нейросеть и цикл по эпохам. Осталось только передать мои данные в этот цикл:
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(2, 200)
self.fc2 = nn.Linear(200, 200)
self.fc3 = nn.Linear(200, 1)
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return F.log_softmax(x)
net = Net()
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)
criterion = nn.NLLLoss()
epochs = 10
for epoch in range(epochs):
for batch_idx, (data, target) in enumerate(train_loader): # вот этот злополучный train_loader
data, target = Variable(data), Variable(target)
data = data.view(-1, 28 * 28)
optimizer.zero_grad()
net_out = net(data)
loss = criterion(net_out, target)
loss.backward()
optimizer.step()
if batch_idx % 100 == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.data[0]))
Но тут проблема: данный train_loader - объект какого-то замысловатого класса, который подтягивает датасет с MNIST. Вообще, складывается впечатление, что данные берут только оттуда, все примеры в интернете такие...:
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=batch_size, shuffle=True)
Так, собственно, вопрос: как мне мои сырые данные представить в удобном для pytorch виде, чтобы нейросеть их скушала?
И ещё, буду безмерно благодарен, если подскажете какую-нибудь простую библиотечку для нейросетей. Чтобы взял готовую нейросеть, скормил ей данные - и получил, что тебе нужно (define-by-run так сказать). Если не получил, добавил слой нейронов и получил. Я уверен такие есть!