2017-09-12 1 views
0

저는 pytorch의 기초를 배우고 있으며, 분류를 위해 IRIS 데이터 세트를 학습하기 위해 드롭 아웃이있는 간단한 4 계층 네이럴 네트워크를 만들려고합니다. 많은 자습서를 참조한 후에이 코드를 작성했습니다.numpy 데이터 및 배치 크기로 pytorch 모델을 교육하는 방법은 무엇입니까?

import pandas as pd 
from sklearn.datasets import load_iris 
import torch 
from torch.autograd import Variable 

epochs=300 
batch_size=20 
lr=0.01 

#loading data as numpy array 
data = load_iris() 
X=data.data 
y=pd.get_dummies(data.target).values 

#convert to tensor 
X= Variable(torch.from_numpy(X), requires_grad=False) 
y=Variable(torch.from_numpy(y), requires_grad=False) 
print(X.size(),y.size()) 

#neural net model 
model = torch.nn.Sequential(
    torch.nn.Linear(4, 10), 
    torch.nn.ReLU(), 
    torch.nn.Dropout(), 
    torch.nn.Linear(10, 5), 
    torch.nn.ReLU(), 
    torch.nn.Dropout(), 
    torch.nn.Linear(5, 3), 
    torch.nn.Softmax() 
) 

print(model) 

# Loss and Optimizer 
optimizer = torch.optim.Adam(model.parameters(), lr=lr) 
loss_func = torch.nn.CrossEntropyLoss() 

for i in range(epochs): 
    # Forward pass 
    y_pred = model(X) 

    # Compute and print loss. 
    loss = loss_func(y_pred, y) 
    print(i, loss.data[0]) 

    # Before the backward pass, use the optimizer object to zero all of the 
    # gradients for the variables it will update (which are the learnable weights 
    # of the model) 
    optimizer.zero_grad() 

    # Backward pass 
    loss.backward() 

    # Calling the step function on an Optimizer makes an update to its parameters 
    optimizer.step() 

현재 내가 직면 한 두 가지 문제가 있습니다.

  1. 배치 크기를 20으로 설정하고 싶습니다. 어떻게해야합니까? 이 단계 y_pred = model(X)에서
  2. 는이 에러를 나타내는

오류

TypeError: addmm_ received an invalid combination of arguments - got (int, int, torch.DoubleTensor, torch.FloatTensor), but expected one of: 
* (torch.DoubleTensor mat1, torch.DoubleTensor mat2) 
* (torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2) 
* (float beta, torch.DoubleTensor mat1, torch.DoubleTensor mat2) 
* (float alpha, torch.DoubleTensor mat1, torch.DoubleTensor mat2) 
* (float beta, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2) 
* (float alpha, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2) 
* (float beta, float alpha, torch.DoubleTensor mat1, torch.DoubleTensor mat2) 
     didn't match because some of the arguments have invalid types: (int, int, torch.DoubleTensor, !torch.FloatTensor!) 
* (float beta, float alpha, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2) 
     didn't match because some of the arguments have invalid types: (int, int, !torch.DoubleTensor!, !torch.FloatTensor!) 
+0

문제를 해결합니까? – jdhao

+0

죄송합니다.이 문제를 해결할 수 없습니다. 해결 방법이 있다면 – Eka

답변

0

아마도 동일한 문제 : 요컨대 Pytorch: Convert FloatTensor into DoubleTensor

: 값이 최적화하면서 DoubleTensor에 저장된 NumPy와 변환 할 때 FloatTensor가 필요합니다. 그 중 하나를 변경해야합니다. PyTorch 두 클래스를 제공하는 데이터 처리 및 로딩

0

I want to set a batch size of 20. How should I do this?

는 하나의 데이터 세트를 나타내는 데 사용된다 Dataset이다. 특히 Dataset은 샘플 인덱스를 사용하여 전체 데이터 세트에서 하나의 샘플을 가져 오는 인터페이스를 제공합니다.

그러나 큰 데이터 세트의 경우 Dataset은 충분하지 않습니다. 일괄 처리를 수행해야합니다. 따라서 PyTorch는 이라는 두 번째 클래스를 제공합니다. 이는 배치 크기 및 기타 매개 변수가 제공된 Dataset에서 배치를 생성하는 데 사용됩니다.

구체적인 경우에는 TensorDataset을 시도해야한다고 생각합니다. 그런 다음 Dataloader을 사용하여 일괄 처리 크기를 20으로 설정하십시오. PyTorch official examples을 살펴보고 어떻게해야하는지 이해하십시오.

At this step y_pred = model(X) its showing this error

오류 메시지는 매우 유익한 정보입니다. 모델에 입력 XDoubleTensor입니다. 그러나 모델 매개 변수의 유형은 FloatTensor입니다. PyTorch에서는 다른 유형의 텐서 사이에서 작업을 수행 할 수 없습니다. 당신이 할 일은 이제

X= Variable(torch.from_numpy(X).float(), requires_grad=False) 

와 라인

X= Variable(torch.from_numpy(X), requires_grad=False) 

을 대체하고, XFloatTensor 입력이 오류 메시지가 사라집니다.

또한 부드러운 알림으로 인터넷에 문제에 대한 충분한 자료가있어 문제를 충분히 해결할 수 있습니다. 혼자 힘으로 해결해야합니다.

+0

게시하십시오. 이제이 오류가 TypeError : FloatClassNLLCriterion_updateOutput에 잘못된 조합을 받았습니다. 확인을하면 완전히 해결 된 코드를 공유 할 수 있습니다. 지난 2 달 동안 나는 여기에 갇혀 있고, 과거에 이것 저것 마약을 쟁취 할 수 없었다. 때때로 우리는 해결책을 찾지 못하는 곳에서 붙잡히고 나는 현재이 위치에 있습니다. 어떤 도움을 주시면 감사하겠습니다. – Eka

+0

코드를 업데이트하십시오. 그러면 코드에 무엇이 잘못된 것인지 알 수 있습니다. 나 자신을 실행하려고, 그것은 잘 작동합니다. 훈련이 진행됨에 따라 손실은 감소합니다. [here] (https://ibb.co/kQH0TR) – jdhao

관련 문제