warm_up 热身训练
代码是使用numpy进行的模型训练,目的是通过这样一个我们熟悉的矩阵计算过程模拟神经网络的运算,实质上的过程基本一致,就是中间的实现不同
import numpy N, D_in, H, D_out = 64, 1000, 100, 10 分别代表,N:每次训练的样本个数 D_in:输入 D_out:输出 H:隐藏层 x = np.random.randn(N, D_in) y = np.random.randn(N, D_out) w1 = np.random.randn(D_in, H) w2 = np.random.randn(H, D_out) 构建四个随机生成的长和宽分别是括号里面的数字的矩阵 x:输入 y:输出 w1:输入和隐藏层的 learning_rate = 1e-6 学习率0.好多零6
训练过程
for t in range(500):#训练500次 h = x.dot(w1) h_relu = np.maximum(h, 0) y_pred = h_relu.dot(w2) 计算预测值,也可以说是正向传播的过程 loss = np.square(y_pred - y).sum() 计算丢失率 # Backprop to compute gradients of w1 and w2 with respect to loss 反向传播的过程,算法要学习的话找教程看,要是没记错应该是bp, grad_y_pred = 2.0 * (y_pred - y) grad_w2 = h_relu.T.dot(grad_y_pred) grad_h_relu = grad_y_pred.dot(w2.T) grad_h = grad_h_relu.copy() grad_h[h < 0] = 0 grad_w1 = x.T.dot(grad_h) # Update weights 更新权值矩阵 w1 -= learning_rate * grad_w1 w2 -= learning_rate * grad_w2
通俗的来说,我们保存的模型就是一个矩阵,后面的预测值只是根据预测数据和矩阵进行计算得到的结果,比如分类问题就是计算每一个种类的概率,选择最大的概率作为预测结果
感兴趣的话,可以把最开始的参数调小,并输出每一步的结果,这样可以有一个更直观的了解