当前位置: 首页 > news >正文

pytorch 学习-2.线性模型

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)) ** 2w_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)# 计算MSEprint("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] = mseprint(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')#修改后,如下图所示

 

相关文章:

  • 树莓派学习专题<14>:树莓派4B:从V4L2驱动直接获取h264码流
  • Flutter基础(Isolate)
  • 构建 AI 系统的 4 大 Agentic AI 设计模式
  • ClickHouse基础知识
  • 嵌入式网络通信与物联网协议全解析:Wi-Fi、BLE、LoRa、ZigBee 实战指南
  • golang pprof性能调试工具
  • 内网对抗之信息收集篇
  • Note2.3 机器学习:Adaptive Learning Rate
  • Java 大视界 -- Java 大数据机器学习模型在金融市场高频交易策略优化与风险控制中的应用(327)
  • springboot+Vue逍遥大药房管理系统
  • SmartETL中数据库操作与流程解耦的设计与应用
  • Stewart并联结构两自由度正逆解计算和工作空间仿真
  • 使用asyncio构建高性能网络爬虫
  • for each循环语句
  • FPGA芯片的配置方法
  • [Java 基础]HashMap
  • Element Plus el-button实例类型详解
  • 什么是数字签名(ECDSA)?
  • 非阻塞 IO
  • Java面试题030:一文深入了解MySQL(2)