pyTorch создает линейную модель и генерирует соответствующее размерное изображение.

машинное обучение

Создайте линейную модель 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()