2.2 数据操作
2.2.1 创建NDArray(Mxnet)、Tensor(Pytorch)
|
Mxnet |
Pytorch |
|
from mxnet import nd |
import torch |
创建向量 |
nd.zeros((4,2)), nd.ones((4,2)) |
torch.zeros(4, 2), torch.zeros(4, 2) |
创建向量 |
x = nd.arange(12) |
x = torch.arange(12) |
获取形状 |
x.shape |
x.shape |
获取元素总数 |
x.size |
x.size |
更改形状 |
x.reshape(3, 4) |
x.reshape((3, 4)) |
从list创建 |
nd.array([5.5, 3]) |
torch.tensor([5.5, 3]) |
随机生成 |
nd.random.normal(0, 1, shape=(3, 4)) |
torch.randn(3, 4) |
注:
1、pytorch输入形状参数可用单小括号或双小括号,例如 torch.zeros(4, 2),等同torch.zeros((4, 2)),Mxnet必须为双小括号
2.2.2 运算
|
Mxnet |
Pytorch |
四则运算 |
x+y |
x+y |
指数运算 |
x.exp() |
x.exp() |
矩阵乘法 |
nd.dot(x, y.T) |
torch.mm(x, y.T) |
合并 |
nd.concat(x, y, dim=0) |
torch.cat((x, y), dim=0) |
判断 |
x == y (返回 True 或 Falue) |
x == y (返回 1 或 0) |
2.2.6 和NumPy相互变换
|
Mxnet |
Pytorch |
由np转入 |
nd.array(x) |
torch.from_numpy(x) |
转出到np |
x.asnumpy() |
x.numpy() |
2.3 自动求梯度
|
Mxnet |
Pytorch |
创建变量 |
x = nd.arange(4).reshape((4, 1)) |
x = torch.ones(4, 1, requires_grad=True) |
申请存储梯度所需要的内存 |
x.attach_grad() |
上一步已申请 |
|
with autograd.record(): y = 2 * nd.dot(x.T, x) |
y = 2 * torch.mm(x.T, x) |
自动求梯度 |
y.backward() |
y.backward() |
读取梯度 |
x.grad |
x.grad |