协变量(covariate)、特征(feature)
-> 特征的加权和或这说由权重组成的这种关系决定了目标怎么到达
-> 权重决定了每个特征对于预测值的影响,更倾向于那种特征,像谁一点?
-> 权重,是一组模型参数,需要质量的度量方式和提高模型预测质量的方法来寻找最佳参数
度量方式:损失函数(loss function)
-> 量化目标实际和预测之间的差距,一般为非负数
-> 回归问题损失函数一般用平方误差函数
提高方法:随机梯度下降
-> 随机抽取小批量样本,不断地在损失函数递减地方向上更新参数减小误差
超参数(hyperparamter),都是训练时固定的参数
-> 批量大小(batch size),每次小批量的样本数
-> 学习率(learning rate),每次更新的系数
泛化(generalization)
-> 一组能够在从未见过的数据上预测且误差较小的参数
预测(prediction)和推断(inference)
神经网络图
-> 输入层的输入数可以称为特征维度(feature dimensionality)
-> 当每个输入都和每个输出连接,称为全连接层(fully-connected layer)或者稠密层(dense layer)
softmax实践
使用FasionMNIST数据集,显示样本
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
import matplotlib.pyplot as plt
trans = transforms.ToTensor()
mnist_train = torchvision.datasets.FashionMNIST(root = "./data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(root = "./data", train=True, transform=trans, download=True)
# print(len(mnist_train), len(mnist_test), mnist_train, mnist_train[0])
print(mnist_train[0][0].shape)
def get_fasion_mnist_labels(labels):
# labels is num dict
text_lables = ['t-shirt', 'trouser', 'pullover', "dress", "coat", "sandal", "shirt", "sneaker", "bag", "ankle boot"]
return [text_lables[int(i)] for i in labels]
print(get_fasion_mnist_labels([1,2,4]))
def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):
figsize = (num_cols * scale, num_rows * scale)
_, axes = plt.subplots(num_rows, num_cols, figsize=figsize)
# axes is n*m to 1*nm
axes = axes.flatten()
for i, (ax, img) in enumerate(zip(axes, imgs)):
if torch.is_tensor(img):
ax.imshow(img.numpy())
else:
ax.imshow(img)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
if titles:
ax.set_title(titles[i])
plt.show()
return axes
X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))
show_images(X.reshape(18,28,28), 2, 9 ,titles=get_fasion_mnist_labels(y))
使用内置的数据迭代器,进行随机读取小批量
train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers=get_dataloader_workers())
X1, y1 = next(iter(train_iter))
show_images(X1.reshape(batch_size, 28, 28), 16, 16, titles=get_fasion_mnist_labels(y1))
运行1次
再运行1次,和上一次的结果时不一样的