pytorch 学习-2.线性模型

发布于:2025-07-02 ⋅ 阅读:(22) ⋅ 点赞:(0)

1.pytorch安装

2.线性模型_哔哩哔哩_bilibili

2.1 代码复现:

# numpy是一个用于科学计算的库,提供了多维数组对象和各种派生的对象(如掩码数组和矩阵),以及用于数组操作的各种函数。
import numpy as np
# matplotlib是一个绘图库,pyplot是它的一个子模块,用于创建简单的图表、直方图、功率谱、条形图、错误图、散点图等。
import matplotlib.pyplot as plt

# 定义数据集
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

# 定义模型 预测函数
def predict(w, x):
    return w * x
# 定义损失函数 均方误差
def loss(w, x, y):
    return (y - predict(w, x)) ** 2


w_list = []
mse_list = []

# 遍历w的取值范围
for w in np.arange(0.0, 4.1, 0.1):
    print("w =", w)
    w_list.append(w)
    l_sum = 0    #在w取值下,损失函数的和
    # 遍历训练数据集
    for x_val, y_val in zip(x_data, y_data):
        y_pred_val = predict(w, x_val)   # 计算预测值
        loss_val = loss(w, x_val, y_val)    # 计算损失值
        l_sum += loss_val    # 累加损失值
        print("\t", x_val, y_val, y_pred_val, loss_val)
    # 计算MSE
    print("MSE =", l_sum / len(x_data))
    mse_list.append(l_sum / len(x_data))


# 绘制损失函数图像
plt.plot(w_list, mse_list)
plt.xlabel('w')   # x轴标签
plt.ylabel('loss')   # y轴标签
plt.show()   # 显示图像

运行结果: 

2.2 出现的问题: 

2.2.1 缺少numpy库

Traceback (most recent call last): File "D:\桌面\pythonProject2\main.py", line 1, in <module> import numpy as np ModuleNotFoundError: No module named 'numpy'

出现原因:系统中同时安装了多个 Python 环境(例如,系统自带的 Python 和 Anaconda),可能会导致冲突。确保你在运行脚本时使用的是 Anaconda 的 Python 环境。

解决方法:

在设置中找到python编辑器,添加本地编辑器,并在下载的Anaconda中找到python.exe,点击确定即可。

2.2.2 缺少matplotlib

File "D:\桌面\pythonProject2\main.py", line 3, in <module> import matplotlib.pyplot as plt ModuleNotFoundError: No module named 'matplotlib'

 这个错误表明你的 Python 环境中缺少matplotlib库。matplotlib是一个第三方库,需要先安装才能导入使用。

pip install matplotlib

 

 2.2.3 NumPy 2.3.1 与某些模块(如 Matplotlib)的兼容性问题。 

我尝试了一下重新安装matplotlib后它自动帮我解决了兼容问题。如上图所示

2.3 作业:

import numpy as np
import matplotlib.pyplot as plt
#np.array()函数用于将列表或元组转换为数组。不用for循环来逐一调用函数,可以直接将列表或元组转换为数组。
# 由于x_data和y_data是一个NumPy数组,函数中的操作会逐元素进行。

x_data = np.array([1.0, 2.0, 3.0])
y_data = np.array([2.0, 4.0, 6.0])


# 定义线性回归模型
def predict(w, x, b):
    return w * x + b
# 定义损失函数
def loss(w, b, x, y):
    return (y - predict(w, x, b)) ** 2
#w,b的预测范围
# np.arange 用于生成一系列数字,在这里用于生成w和b的预测范围
w_list = np.arange(0.0, 4.1, 0.1)
b_list = np.arange(-2.0, 2.1, 0.1)

# 创建一个二维数组来存储mse值
mse_list = np.zeros((w_list.size, b_list.size))

# enumerate 是一个 Python 内置函数,它允许你在遍历列表的同时获取每个元素的索引值。
for i, w in enumerate(w_list):
    for j, b in enumerate(b_list):
        # np.mean是NumPy库中的一个函数,用于计算数组中所有元素的平均值
        # np.mean(a, axis=None, dtype=None, out=None, keepdims= < novalue >)
        # a : 输入数组。
        # axis : 数组的轴,默认为None,表示沿所有轴计算。
        # dtype : 输出数组的数据类型,默认为None,表示保持原始数据类型。
        # out : 输出数组,默认为None,表示不输出。
        # keepdims : 如果为True,则保留输出数组的维度,即使原数组的维度为1。

        mse = np.mean(loss(w, b, x_data, y_data))# 计算均方误差
        mse_list[i, j] = mse
        print(f"w={w:.1f} b={b:.1f} mse={mse:.2f}")

# 绘制MSE值
fig = plt.figure()# 创建一个图形框
ax3d = fig.add_subplot(projection='3d') # 创建一个三维的绘图工程,add_subplot()方法用于向图形中添加子图。
w_list_grid, b_list_grid = np.meshgrid(w_list, b_list)  # 生成网格数据

ax3d.plot_wireframe(w_list_grid, b_list_grid, mse_list, cmap='rainbow') # 绘制曲面图
plt.xlabel('w') # 设置x轴标签
plt.ylabel('b') # 设置y轴标签
plt.title('MSE as a function of w and b')   # 设置标题
plt.show()  # 显示图形

运行结果:

 

# ax.plot_wireframe(w,b,mse_list,cmap='rainbow')
ax.plot_surface(w,b,mse_list,cmap='rainbow')#修改后,如下图所示