看来不少实现的代码,自己也总结思考了一下,记录一下。
import numpy as np
import matplotlib.pyplot as plt
# 数据集,先给出准确模型y=2x + 1
x_data = [1.0, 2.0, 3.0, 4.0]
y_data = [3.0, 5.0, 7.0, 9.0]
# 定义模型
def forward(x):
return x * W + B
# 定义损失函数:这里使用均方误差(MSE)作为损失函数
def loss(x, y):
y_val = forward(x)
return ((y_val - y) ** 2)
w = np.arange(0, 4.1, 0.1)
b = np.arange(-2, 2.1, 0.1)
# 将w,b组合成一个二维矩阵,这样设定的好处就是避免再去写循环进行遍历
[W,B] = np.meshgrid(w,b)
l_sum = 0
# 由于定义了二维矩阵,所以说在for循环中调用forward函数时会将所有w,b的组合都进行运算,例如y_pred_val其实就是一个包含多个预测值的数组
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
# 引入matplotlib 3D画图
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(projection='3d')
# 设置 x、y、z 轴的标签
ax.set_xlabel('W (Weight)')
ax.set_ylabel('B (Bias)')
ax.set_zlabel('Loss')
#设置标题
ax.set_title('Cost Value')
# surface中的数必须是二维矩阵
ax.plot_surface(W, B, l_sum/4)
plt.show()
我觉得要仔细的了解一下np.meshgrid()函数的作用
运行结果图: