卷积神经网络02(线性模型、穷举法)

步骤:
1 数据集

2 模型选择(根据数据集的情况进行选择)

3 训练(knn等)大部分都需要training

4 推理

卷积神经网络02(线性模型、穷举法)_第1张图片
卷积神经网络02(线性模型、穷举法)_第2张图片
训练好以后对以后的预测和应用
输入 x
预测 y
以上监督学习
训练好了以后需要测试集进行评估
随机猜测(对于权重可以使用随机猜测进行)
卷积神经网络02(线性模型、穷举法)_第3张图片
平均损失,可以看到当预测是3,6,9的时候,平均损失是14/3。
因此为了得到比较好的模型,更好的反应理想分布,这个时候就要找最小的损失。
另外,为什么要使用平方了,为了防止误差有负数,相互抵消了。
卷积神经网络02(线性模型、穷举法)_第4张图片
MSE(Mean Square Error)
卷积神经网络02(线性模型、穷举法)_第5张图片
综上可知,为了解决这个问题,就要找到这样的预测权重值,使得误差最小,这就是我们要求取的权重值。
初中学数学的时候,为了验证,我们采用穷举法,就是尽可能多的列举数据,去验证和计算。
卷积神经网络02(线性模型、穷举法)_第6张图片

# 1 导入所需要的库
import numpy as np
import matplotlib.pyplot as plt

# 2 创建或者导入数据集
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

# 3 前向传播
def forward(x):
    return x * w

# 4 loss计算
def loss(x,y):
    y_pred = forward(x)
    return (y_pred - y) * (y_pred - y)

# 5 定义两个列表用于接收权重和误差
w_list = []
mse_list = []

# 6 穷举进行操作,从0.0,-4.0间隔0.1进行取值
for w in np.arange(0.0,4.1,0.1):
    print("w=",w)
    l_sum = 0
    for x_val,y_val in zip(x_data,y_data):
        y_pred_val = forward(x_val)
        loss_val = loss(x_val,y_val)
        l_sum += loss_val
        print('\t',x_val,y_val,y_pred_val,loss_val)
    print('MSE=',l_sum/3)
    # 7 将权重和误差放入新建的列表中,用于输出绘图使用
    w_list.append(w)
    mse_list.append(l_sum/3)
    l_sum_min = min(mse_list)
    print(l_sum_min)


# 8可视化绘图,将第7步保存的权重和误差用绘图的形式,绘制出来
plt.plot(w_list,mse_list,c='g')
plt.ylabel('loss')
plt.xlabel('w')
plt.show()

# 9总结:正常情况下,不使用w作为可视化的横坐标,而是使用epoch当做横坐标,通过迭代进行。

卷积神经网络02(线性模型、穷举法)_第7张图片
w= 4.0
1.0 2.0 4.0 4.0
2.0 4.0 8.0 16.0
3.0 6.0 12.0 36.0
MSE= 18.666666666666668
0.0
上面每一步的作用我都有注释,有助于各位理解。

学习心得
概括一下就是,学习深度学习的时候,无非就是下面几步
1 准备数据集(生成或者导入)

2 根据数据的情况构建模型

3 定义前向传播和反向传播

4 代入训练模型

5 可视化训练结果

注意:后面学习的是通过epoch作为横坐标,本实验用的是w(权重)作为横坐标,是不一样的,因为在训练的时候,如果模型比较负责,权重就不会是线性的,可能是一个平面的。因此后面就会通过训练的轮数作为训练的结果可视化的横坐标,这样就可以根据每一轮训练的损失作为纵坐标,从而进行展示。

你可能感兴趣的:(深度学习,python,机器学习)