深度学习之线性模型
y = w * x模型
思路
这里求权重w , 求最适合的权重,就是求损失值最小的时候
这里用穷举法:在一个范围内,列出w的所有值,并且计算出每组数据的平均损失值,以w 为横坐标, 损失值为纵坐标,作图,找到损失值最低的点,对应的就是最适合 的w
import numpy as np
import matplotlib.pyplot as plt
#线性模型: y = w · ···* x
# 此次数据集模型: y = 2x
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
def forward(x):
return x*w
#预测的损失值,预测的y值到真实y值的之差
# 由于可能是正的,也有可能是负的,这里的损失值用它们的平方来表示
def loss(x, y):
return (forward(x) - y)**2
#穷举法:金肯列举一个范围的所有的w值,求出每个w值的时,三组数据的loss值的平均值,
#以每组数据的w和平均损失值值为 x, y坐标,选出损失值最小的w 作为合适的w
w_list = []
mse_list = []
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_pred_val = loss(x_val, y_val)
l_sum += loss_pred_val
print('\t', x_val, y_val, y_pred_val, loss_pred_val)
print("MSE= ", l_sum / 3)
w_list.append(w)
mse_list.append(l_sum/3)
plt.plot(w_list, mse_list)
plt.xlabel("w")
plt.ylabel("ylable")
plt.show()
如图,w = 2时,损失值最小,所以w = 2是该训练数据合适的权重
y = w * x + b模型
思路
y = w * x + b模型,就需要3D绘图
先利用mershgrid函数, Axes3D函数,建立网格坐标
在利用plot_surface进行绘图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#这里设函数为y=3x+2
x_data = [1.0,2.0,3.0]
y_data = [5.0,8.0,11.0]
def forward(x):
return x * w + b
def loss(x,y):
y_pred = forward(x)
return (y_pred-y)*(y_pred-y)
mse_list = []
W=np.arange(0.0,4.1,0.1)
B=np.arange(0.0,4.1,0.1)
[w,b]=np.meshgrid(W,B) #生成2维的网格坐标
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val)
print(y_pred_val)
loss_val = loss(x_val, y_val)
l_sum += loss_val
fig = plt.figure()
#ax = Axes3D(fig)
#pycharm版本原因,需要用这样的代码绘制坐标图
ax= Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(ax)
ax.plot_surface(w, b, l_sum/3)
plt.show()
如果所示,这是该训练数据的图