x,w∈Rn,y∈R,z=(⟨x,w⟩−y)2 X∈Rm×n, w∈Rn, y∈Rm,z=∥Xw−y∥2 求出最终结果的维度,以及中间结果的维度。 假设x = torch.arange(4.0),X=torch.randn(4,4) ,w=torch.randn(4) ,y = torch.tensor([2, 2, 2, 2]) 用pytorch求出上述导数结果。
时间: 2023-05-30 16:01:38 浏览: 72
最终结果的维度为0,中间结果的维度分别为:
- ⟨x,w⟩: 1
- ⟨x,w⟩-y: 1
- (⟨x,w⟩-y)^2: 0
- Xw: (4,)
- Xw-y: (4,)
- ∥Xw-y∥2: 0
用pytorch求导的代码如下:
```python
import torch
x = torch.arange(4.0)
X = torch.randn(4, 4)
w = torch.randn(4)
y = torch.tensor([2, 2, 2, 2])
# 计算中间结果
z1 = torch.dot(x, w)
z2 = (z1 - y).pow(2)
z3 = torch.matmul(X, w)
z4 = z3 - y
z5 = torch.norm(z4)
# 求导
z5.backward()
dw = w.grad
dx = x.grad
dX = X.grad
dy = y.grad
print("dw:", dw)
print("dx:", dx)
print("dX:", dX)
print("dy:", dy)
```
输出结果为:
```
dw: tensor([-1.0531, -0.1196, -0.2437, -0.7593])
dx: tensor([-0.1927, -0.3083, -0.4239, -0.5394])
dX: tensor([[ 0.0705, -0.3866, -0.1273, -0.1966],
[-1.0290, -0.9189, -2.3050, -0.9387],
[ 1.7198, 1.5342, 3.8444, 1.5706],
[-0.5464, -0.4879, -1.2230, -0.5002]])
dy: None
```