回归问题的建模:
\[\hat{y} = W^Tx + b\] 其中,对于单个样本:$x \in \mathcal{R}^{b}, W \in \mathcal{R}^{b}, b\in \mathcal{R}^{1}$,当为多个样本的时候,$X \in \mathcal{R}^{n × b}$,$\hat{y} = XW + b, y \in \mathcal{R}^{n}$。
损失函数: \(\mathcal{l}(w, b) = \frac{1}{2}(\hat{y}^{(i)} - y^{(i)})^2\) 求$\mathcal{l}(w, b)$的最小值,将b合并到对应的参数w中时,$\mathcal{l}(w)$对应的解析式子: \(w^* = (X^TX)^{-1}X^Ty\) 网络的流程:
- 数据构建,或合成,或读取,获取成对的的数据处理【找到一个数据,DataSet】
- 读取数据,构建数据加载器【分批次读取数据,DataLoader】
- 定义模型结构,初始化模型参数【w,b】
- 损失函数【计算梯度】 预测:MSELoss 分类:softmax【概率归一化】 CrossEntropyLoss
- 优化器【根据梯度优化模型参数】 学习率相当于优化参数的权重
小工具:
- 定时器:
class Timer:
def __init__(self) -> None:
self.times = []
self.start()
def start(self):
self.tik = time.time()
def stop(self):
self.times.append(time.time() - self.tik)
return self.times[-1]
def avg(self):
return sum(self.times) / len(self.times)
def cumsum(self):
return np.array(self.times).cumsum().tolist()
- 正确率统计: ```python def accuracy(y_hat, y): “"”批处理的正确率统计””” if len(y_hat.shape) > 1 and y_hat.shape[1] > 1: y_hat = y_hat.argmax(axis=1) cmp = y_hat.type(y.dtype) == y return float(cmp.type(y.type).sum())
class Accumulator: “"”在n个变量上累加””” def init(self, n): self.data = [0.0] * n def add(self, *args): self.data = [a + float(b) for a, b in zip(self.data, args)] def reset(self): self.data = [0.0] * len(self.data) def getitem(self, idx): return self.data[idx] ```
Ref:李沐