65
北京交通大学《深度学习》课件 主讲教师:丛润民 助教:杨宁 北京交通大学 《深度学习》课程组 实验1 PyTorch实践与前馈神经网络

实验1 PyTorch实践与前馈神经网络

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

PowerPoint AnacondaPythonLinuxMacWindow Python
Anaconda[1]Anaconda [2]Anaconda2020.02-Windowsx86_ 64.exe.
[1] https://www.anaconda.com/ [2] https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
Anaconda NavigatorAnaconda
6
Anaconda->->->-> Path Win+R cmdconda info
7
CPU
8

cmd
10
conda install pytorch torchvision cpuonly -c pytorchcmd
11
import torch Import torchvision x =torch.rand(2,3) print(x)

AnacondaJupyterpythonnew->python3
pytorchjupyter
15

Out [2]: tensor([[1.1710e+32, 4.5782e-41, 1.1710e+32],
[4.5782e-41, 2.1459e+20, 9.2489e-04]])
PyTorchtorch.Tensor
Tensor
17
print(x)
[0.8943, 0.6942, 0.1651]])
print(x)
[0, 0, 0]])
Out [5]: tensor([[5.5000, 3.0000],
[2.2000, 5.0000]])
print(x.shape)
torch.Size([2, 2])
print(x)
print(x)
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.5344, 0.5095, 0.3691],
y = torch.rand(2, 3)
[1.2661, 1.2059, 1.4899]])
y += 1
tensor([1.0910, 1.5265, 1.3833])

masked_select(input, mask) a[a>0]ByteTensor
nonzero(input) 0
API
Out [3]: torch.Size([2, 3]) torch.Size([6]) torch.Size([3, 2])
view()Tensor
In [4]: x += 1
[1.4564, 1.3117, 1.5181]])
23
[0.4564, 0.3117, 0.5181]])
data
print(x)
tensor([[1],
[3, 4],
[4, 5]])
x y 1231 x + y x 2 y 3 232

26
tensor([2., 2., 2.]) [2. 2. 2.]
tensor([3., 3., 3.]) [3. 3. 3.]
NumPyarrayTensortorch.tensor(), Tensor
a = np.ones(3)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)
Out [1]: [1. 1. 1.] tensor([1., 1., 1.], dtype=torch.float64)
[2. 2. 2.] tensor([2., 2., 2.], dtype=torch.float64)
[3. 3. 3.] tensor([3., 3., 3.], dtype=torch.float64)
NumPyTensor
a += 1
print(a, c)
Out [2]: [4. 4. 4.] tensor([3., 3., 3.], dtype=torch.float64)
28
device = torch.device("cuda") # GPU y = torch.ones_like(x, device=device) # GPUTensor x = x.to(device) # .to("cuda") z = x + y
print(z)
tensor([[2., 3.]], dtype=torch.float64)
GPU CPU
gradientPyTorchautograd
.detach() with torch.no_grad() requires_grad=True
30
print(x)
print(x.grad_fn)
[1., 1.]], requires_grad=True)
print(y)
print(y.grad_fn)
<AddBackward0 object at 0x7fab97795828>
out = z.mean()
tensor(27., grad_fn = <MeanBackward0>)
a = ((a * 3) / (a - 1))
print(a.requires_grad) # False
y = x + 2
[4.5000, 4.5000]])
= 1
out2.backward()
print(x.grad)
[5.5000, 5.5000]])

x1

× × ×




. ()
= . ( ∗ )
35
In [1]: x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True)
y = 2 * x
z = y.view(2, 2)
In [2]: v = torch.tensor([[1.0, 0.1], [0.01, 0.001]], dtype=torch.float)
z.backward(v)
print(x.grad)
36

Linear Regression
x ∈ y y ∈
x;, = + ,
x;,
38
import numpy as np
= + +
labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float)
00.01
1
2
3
4
5
6
7
8
9
41
1
2
3
4
5
6
7
8
9
yield features.index_select(0, j), labels.index_select(0, j)

42
1
2
b = torch.zeros(1, dtype=torch.float32)
requires_grad = True
1
2
sgd
1
2
3

44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#
l = loss(net(X, w, b), y).sum() # lXy
l.backward() #
w.grad.data.zero_() #
print('epoch %d, loss %f' % (epoch + 1, train_l.mean().item()))

45
4.2
API
1
2
3
4
5
6
7
8
9
10
11
12
13
shuffle=True, # ()
num_workers=2, # Windows0
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#
1
2
3
4
init.constant_(net[0].bias, val=0) #biasdatanet[0].bias.data.fill_(0)
00.01
51
1 loss = nn.MSELoss()
1
2
3
4
5
6
7
8
9
#
() ()
1
2
3
4
5
6
7
8
9
for X, y in data_iter:
output = net(X)
epoch 1, loss: 0.000457
epoch 2, loss: 0.000081
epoch 3, loss: 0.000198


54
1
σ=1 ()log () + (1 − ()) log(1 − ())
1 loss = nn.BCEWithLogitsLoss() # sigmoid
1
σ=1 ()logσ( ()) + (1 − ()) log(1 − σ(()))
sigmoid
torch.nn
55

n
y: shape is (batch_size, )
Returns
1
2
1
2
= 1

57
accuracy
1
2
acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()
58

y1 = torch.zeros(50) # 0 shape=(50, 1)
x2 = torch.normal(-2 * n_data, 1) # 1 shape=(50, 1)
y2 = torch.ones(50) # 1 shape=(50, 1)
# x, y (torch.cat )
x = torch.cat((x1, x2), 0).type(torch.FloatTensor)
y = torch.cat((y1, y2), 0).type(torch.FloatTensor)
60
cmap='RdYlGn')
28*28*1**
10dresscoatsandalshirt
sneakerbagankle boot
1
2
3
1
2
3
4
5
num_workers=num_workers)
4.2
Pytorch
1. × ×


2. 1) × × 0
0.01 2) ^ 3)
^
3. 3 = 1 + 2 = 2 + 3 = 1Tensor3
3
with torch.no_grad():
loss

loss
loss