1)第一步准备数据集,第二步设计模型,第三步构造损失和优化器,第四步写训练的周期,前馈(损失)反馈(反馈算梯度)更新(用梯度下降算法更新权重)
2)使用mini-batch风格,使用y_hat = wx+b,minibatch就是一次把三个样本的结果都求 出来。
广播就是把[1,2,3]T,扩充。扩充完了才能运算。下图的w会被广播为3行3列的矩阵(此处相乘为矩阵对应元素相乘,非矩阵乘),b也是3行3列。
3)损失,乘方是按照元素来计算的。
4)
如果loss最后是向量,无法进行backward,loss得是一维张量
5)
样本数相等,特征数可以不相等,行表示样本数,列表示特征数
这边要做转置
6)
self.linear(x)这边表示可调用的对象
__call__(*args) 此处*args表示可有可无的参数,不确定有多少个,可变参数
**两个星号表示词典
7)
此处的model是可调用的。
8)
优化器中的SGD
9)训练过程
打印的时候会自动调用__str__();
梯度归零
optimizer.step()会根据设计的学习率、梯度来自动进行更新。
9)
model下的linear,linear下的权重进行调用。不加item前是矩阵,加了item就是一个数。
训练集的损失会不断减小,
但是测试集可能会减小后上升,可能会过拟合。
-补充知识
1.标量、张量
标量是一个数,张量是坐标间的关系是n*n的