1、
((x_train, y_train), (x_valid, y_valid), _) = pickle.load(f, encoding="latin-1")
从 MNIST 或 CIFAR 等经典数据集加载的数据。
print( type(x_train), x_train.dtype)
<class 'numpy.ndarray'> float32
这里的x_train是'numpy.ndarray'类型,数值类型是float32.
float32 是单精度浮点数的表示方式,占用 32 位(4字节)内存.
x_train, y_train, x_valid, y_valid = map(torch.tensor, (x_train, y_train, x_valid, y_valid))
使用 map 函数一次性将所有数据转换为 PyTorch 张量。
print(type(x_train), x_train.dtype)
<class 'torch.Tensor'> torch.float32
type()函数返回的是对象的python类型,dtype返回的是元素的数值类型。
2、
import torch.nn.functional as F
loss_func = F.cross_entropy #损失函数
#1.函数定义时:Python 只检查语法,不执行函数体内部代码
def model(xb):
return xb.mm(weights) + bias #mm是矩阵乘法函数,表示 x * w + b
bs = 64
xb = x_train[0:bs]
yb = y_train[0:bs]
#创建一个 784×10 的随机张量,float类型,并计算这个张量的梯度
weights = torch.randn([784, 10], dtype = torch.float, requires_grad = True)
bias = torch.zeros(10, requires_grad = True)
#2.函数调用时:才真正执行内部代码,此时会查找变量
print(loss_func(model(xb), yb))
#另外,在Python 中定义类时不需要显式定义成员变量,可以直接通过 self.变量名 来使用