依賴軟件包python
import torch import torch.nn.functional as F import matplotlib.pyplot as plt %matplotlib inline
torch.manual_seed(1) # reproducible
<torch._C.Generator at 0x7f2c68165e90>
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1) y = x.pow(2) + 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1) plt.scatter(x.data.numpy(), y.data.numpy()) plt.show()
x[:10]
tensor([[-1.0000], [-0.9798], [-0.9596], [-0.9394], [-0.9192], [-0.8990], [-0.8788], [-0.8586], [-0.8384], [-0.8182]])
y[:10]
tensor([[1.1515], [1.0159], [1.0014], [1.0294], [0.8508], [0.9682], [0.8517], [0.8880], [0.8168], [0.7572]])
class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) # hidden layer self.predict = torch.nn.Linear(n_hidden, n_output) # output layer def forward(self, x): x = F.relu(self.hidden(x)) # activation function for hidden layer x = self.predict(x) # linear output return x
net = Net(n_feature=1, n_hidden=10, n_output=1) # define the network print(net) # net architecture
Net( (hidden): Linear(in_features=1, out_features=10, bias=True) (predict): Linear(in_features=10, out_features=1, bias=True) )
optimizer = torch.optim.SGD(net.parameters(), lr=0.2) loss_func = torch.nn.MSELoss() # this is for regression mean squared loss
plt.ion() # something about plotting
for t in range(100): prediction = net(x) # input x and predict based on x loss = loss_func(prediction, y) # must be (1. nn output, 2. target) optimizer.zero_grad() # clear gradients for next train loss.backward() # backpropagation, compute gradients optimizer.step() # apply gradients if t % 10 == 0: # plot and show learning process plt.cla() plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'}) plt.show() plt.pause(0.1) plt.ioff()