要求

  • 借助np.meshgrid绘制三维曲面图
  • 总体来说,算是一个较为简单的作业

代码如下:

点击查看代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 原始数据
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]


# 前向传播
def forward(x):
return x * w + b # w、b为列表,所以是多次运算,并非只计算了一次w、b


# 损失函数
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) ** 2


w_list = np.arange(0.0, 4.1, 0.1)
b_list = np.arange(-2.0, 2.0, 0.1)
w, b = np.meshgrid(w_list, b_list) # 将w_list,b_list转化为二维坐标

loss_sum = 0
for x_val, y_val in zip(x_data, y_data):
loss_val = loss(x_val, y_val)
loss_sum += loss_val

fig = plt.figure()
ax = Axes3D(fig)
ax.text(0.25, 2, 42, "Cost Value") # 本来以为Cost Value是Z轴标题,结果不是,位置是试出来的
# ax.set_zlabel('Cost Value') 添加Z轴标题
# x、y轴标题
ax.set_xlabel('w')
ax.set_ylabel('b')
z = np.arange(5, 36, 5) # z轴标注范围,为了美观
ax.set_zticks(z)
surf = ax.plot_surface(w, b, loss_sum / 3, cmap='coolwarm')
fig.colorbar(surf, shrink=0.5, aspect=6) # 设置colorbar,shrink为长度,aspect为宽带
plt.show()


运行结果如下:

PyTorch深度学习实践(二)课后作业_深度学习