Tensor
1 | import torch |
Tensor与numpy
1 | # 此处演示tensor和numpy数据结构的相互转换 |
Autograd
1 | from torch.autograd import Variable |
Neural Network
- 定义一个有着可学习的参数(或者权重)的神经网络
- 对着一个输入的数据集进行迭代:
- 用神经网络对输入进行处理
- 计算代价值 (对输出值的修正到底有多少)
- 将梯度传播回神经网络的参数中
- 更新网络中的权重
- 通常使用简单的更新规则: weight = weight + learning_rate * gradient
定义网络1
2
3
4
5
6
7
8
9
10
11
12import torch.nn as nn
import torch.nn.functional as F
class LRModel(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
# linear内置了参数初始化方法,此处无需显式指定
self.linear = torch.nn.Linear(2, 1) # 2 in, 1 out
def forward(self, x):
y_pred = F.sigmoid(self.linear(x))
return y_pred
仅仅需要定义一个forward函数就可以了,backward会自动地生成。
你可以在forward函数中使用所有的Tensor中的操作。
模型中可学习的参数会由net.parameters()返回。
定义loss与optimizer1
2criterion = torch.nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
训练迭代1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17x_data = Variable(torch.Tensor(X))
y_data = Variable(torch.Tensor(T))
model = LRModel()
for epoch in range(1000):
# Forward pass: Compute predicted y by passing x to the model
y_pred = model(x_data)
# Compute and print loss
loss = criterion(y_pred, y_data)
print(epoch, loss.data[0])
# Zero gradients, perform a backward pass, and update the weights.
optimizer.zero_grad()
loss.backward()
optimizer.step()