Создайте линейную модель y = w * x и сгенерируйте изображение
# 线性模型
import numpy as np
# graph plugin
import matplotlib.pyplot as plt
# 数据集dataset
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 计算出 y_pred = x * w 即预测值
def forward(x):
return x * w
# 计算出当前w对应的预测值y_pred与实际值y之间的损失
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
# 权重
w = np.arange(0.0, 4.1, 0.1)
print('w=',w)
l_sum = 0
# 对于选取的大量w值,计算出其对应的损失值的均值MSE
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('MSE=', l_sum / 3)
# Draw the graph
# 该plugin是将训练结果画到图中
# 为实现实时画图,可以参考Visdom
plt.plot(w, l_sum / 3)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()
Основы построения трехмерных графиков в Matplotlib
Создайте 3D-координатный объект Axes3D
#Способ 1, используя ключевые слова
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#定义坐标轴
fig = plt.figure()
ax1 = plt.axes(projection='3d')
#ax = fig.add_subplot(111,projection='3d') #这种方法也可以画多个子图
#Метод второй, с использованием метода трехмерной оси
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#定义图像和三维格式坐标轴
fig=plt.figure()
ax2 = Axes3D(fig)
Создание трехмерных кривых и точечных диаграмм
import numpy as np
from matplotlib import 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
def loss(x,y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
w_list = np.arange(0.0, 4.1, 0.1)
b_list = np.arange(0.0, 4.1, 0.1)
[w,b] = np.meshgrid(w_list, b_list)
print('[w,b]=',[w,b])
# 对于某一对data数据(x,y),计算得到w, b, l_sum的关系曲线
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('MSE=', l_sum / 3)
fig = plt.figure()
ax = Axes3D(fig)
# row和cloum_stride为横竖方向的绘图采样步长,越小绘图越精细
# alpha 用于控制透明度
ax.plot_surface(w, b, l_sum / 3, rstride=1, cstride=1, alpha=0.3, cmap='rainbow')
# 产生的投影默认是在图像上的,为了使投影落到x-y....平面上,设置offset值平移量,根据坐标轴的最大值最小值进行设置
ax.contour(w, b, l_sum / 3, zdir='z', offset=0, cmap="rainbow") # 生成z方向投影,投到x-y平面
ax.contour(w, b, l_sum / 3, zdir='x', offset=4, cmap="rainbow") # 生成x方向投影,投到y-z平面
ax.contour(w, b, l_sum / 3, zdir='y', offset=4, cmap="rainbow") # 生成y方向投影,投到x-z平面
ax.set_xlabel('w') # 为坐标轴命名
ax.set_xlim(0, 4) # 拉开坐标轴范围显示投影,两个参数为坐标轴的max及min
ax.set_ylabel('b')
ax.set_ylim(0, 4)
ax.set_zlabel('MSE')
ax.set_zlim(0, 70)
plt.show()