深さ学習フレームワークPytorch——学習ノート(三)線形回帰

10342 ワード

深さ学習フレームワークPytorch——学習ノート(二)線形回帰
pytorch定義ネットワークによる線形回帰
import torch
from torch.autograd import Variable
from matplotlib import pyplot as plt

# train data
#          (x,y)
x_data = Variable(torch.Tensor([[1.0], [2.0], [3.0]]))
y_data = Variable(torch.Tensor([[2.0], [4.0], [6.0]]))

#          Linear    
class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear = torch.nn.Linear(1, 1) 

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred
model = Model()

#            
criterion = torch.nn.MSELoss(size_average=False) 
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# Training
for epoch in range(1000):
    # Forward pass
    y_pred = model(x_data)

    # Compute loss
    loss = criterion(y_pred, y_data)
    print(epoch, loss.data)

    # Zero gradients
    optimizer.zero_grad()
    # perform backward pass
    loss.backward()
    # update weights
    optimizer.step()

#            
x = torch.arange(0, 20.0).view(-1, 1)
model.eval()
y = model(x)

plt.plot(x.data.numpy(), y.data.numpy())
plt.scatter(x_data.data.numpy(), y_data.data.numpy())

plt.xlim(0, 7)
plt.ylim(0, 7)
plt.show()
plt.pause(0.5)


#        
var = Variable(torch.Tensor([4.0]))
print("predict (after training)", 4, model(var).data[0].numpy())

まとめ
1.            torch.nn.Module   
2. torch.nn.Linear()        ,**y =a*x**              ,    a
3. net()            ,