深度学习

线性神经网络

Posted by 潇湘潞 on April 21, 2026

回归问题的建模:

\[\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\) 网络的流程:

  1. 数据构建,或合成,或读取,获取成对的的数据处理【找到一个数据,DataSet】
  2. 读取数据,构建数据加载器【分批次读取数据,DataLoader】
  3. 定义模型结构,初始化模型参数【w,b】
  4. 损失函数【计算梯度】 预测:MSELoss 分类:softmax【概率归一化】 CrossEntropyLoss
  5. 优化器【根据梯度优化模型参数】 学习率相当于优化参数的权重

小工具:

  • 定时器:
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:李沐