Pytorch框架学习笔记-数据处理-菜鸟进阶艰难之路

### python学习笔记

  • [@[TOC](python学习笔记)](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [笔记](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [2.dataset.values---- 从DataFrame类型转换为Numpy数组](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [4.if name == "main": 用于判断当前脚本是否作为主程序直接运行](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [5.](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [总结](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)
  • [以上暂时是我总结的笔记,后续会继续更新](#python学习笔记 @TOC 笔记 1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题 2.dataset.values---- 从DataFrame类型转换为Numpy数组 3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。 4.if name == "main": 用于判断当前脚本是否作为主程序直接运行 5. 总结 以上暂时是我总结的笔记,后续会继续更新)

笔记

在学习python的numpy,pandas,matplotlib,sklearn,pytorch,opencv等第三方库时,代码有很多需要理解的地方,故写下此笔记来帮助自己学习,并有助于以后回顾。这可能是比较笨且慢的办法,但对我是有效的。


1.解决的是Matplotlib 绘图时可能出现的中文字符和负号 乱码的问题

python 复制代码
mpl.rcParams[u'font.sans-serif'] = ['SimHei']:**设置绘图时所使用的字体为宋体**(SimHei)。
mpl.rcParams['axes.unicode_minus'] = False:**解决负号显示为方块的问题**。

2.dataset.values---- 从DataFrame类型转换为Numpy数组

python 复制代码
file_path = "../datasets/Freestyle100m.csv"
dataset = pd.read_csv(file_path)
dataset_tensor = torch.tensor(dataset.values)  # 转换为tensor
x = dataset_tensor[:, :-1]
y = dataset_tensor[:, -1] 

如果你的代码文件位于与数据集文件相同的目录 下,只需使用一个点即可表示当前目录。例如:

python 复制代码
file_path = "./datasets/Freestyle100m.csv"

如果你的代码文件位于数据集文件的上一级目录 下,则可以使用两个点来表示上级目录。例如:

python 复制代码
file_path = "../datasets/Freestyle100m.csv"

3.使用 Matplotlib 库中的 plot 函数,绘制了一个散点图。

其中,x 和 y 是两个张量,通过调用 numpy() 方法将它们转换为了 NumPy 数组,以便能够在 Matplotlib 中进行绘图。

具体来说,plot 函数的参数如下:

x:横坐标数据,可以是 NumPy 数组、Python 列表、Pandas Series 对象或其他可迭代对象。

y:纵坐标数据,与 x 对应,必须具有相同的长度。
'o' :指定绘图所使用的符号类型,这里使用的是散点 符号。可以根据需要更改为其他符号类型,例如折线符号 '-' 或者曲线符号 '.' 等等。

python 复制代码
plt.plot(x.numpy(),y.numpy(),'o')

4.if name == "main": 用于判断当前脚本是否作为主程序直接运行

python 复制代码
def main():
    # 主要逻辑代码

if __name__ == "__main__":
    main()

5.

python 复制代码
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'

import torch
from matplotlib import pyplot as plt
import pandas as pd
import matplotlib as mpl

# 防止plt汉字乱码
mpl.rcParams[u'font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False


def main():
    # 加载奥运会数据
    file_path = "../datasets/Freestyle100m.csv"
    dataset = pd.read_csv(file_path)
    dataset_tensor = torch.tensor(dataset.values)  # 转换为tensor
    x = dataset_tensor[:, :-1]
    y = dataset_tensor[:, -1]

    # 绘图
    plt.plot(x.numpy(), y.numpy(), 'o')
    plt.xlabel('奥运会(年)')  #设置标签
    plt.ylabel('取胜时间(秒)')
    plt.show()   

if __name__ == "__main__":
    main()
python 复制代码
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
import torch
from matplotlib import pyplot as plt
import pandas as pd
import matplotlib as mpl

mpl.rcParams[u'font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

def model(x,w,b):
    return w*x+b

#损失函数
def loss_fn(y_pred,y):
    loss = (y_pred - y)**2
    return loss.mean()

#损失函数求导
def grad_loss_fn(y_pred,y):
    return (y_pred - y) * 2

#梯度函数
def grad_fn(x,y,y_pred):
    grad_w = grad_loss_fn(y_pred,y)*x
    grad_b = grad_loss_fn(y_pred,y)
    return torch.stack([grad_w.mean(),grad_b.mean()])

def model_training(x,y,n_epoches,learning_rate,params,print_params = True):
    for epoch in range(1,n_epoches+1):
        w, b = params

        #前向传播
        y_pred = model(x,w,b)

        #计算损失
        loss = loss_fn(y_pred,y)

        #梯度
        grad = grad_fn(x,y,y_pred)

        #更新参数
        params = params - learning_rate * grad

        if epoch == 1 or epoch % 500 == 1:
            print("轮次:%d,\t损失:%f"%(epoch,float(loss)))
            if print_params:
                print(f"参数:{params.detach().numpy()}")
                print(f"梯度:{grad.detach().numpy()}")
    return params

def main():
    file_path = "../datasets/Freestyle100m.csv"
    dataset = pd.read_csv(file_path)
    dataset_tensor = torch.tensor(dataset.values)
    xx = dataset_tensor[:,0]
    y = dataset_tensor[:,-1]

    x = xx - xx[0]

    w = torch.zeros(1)
    b = torch.zeros(1)

    y_pred = model(x,w,b)
    print("未优化模型的预测结果:",y_pred.detach().numpy())

    loss = loss_fn(y_pred,y)
    print("未优化模型的损失:",loss.detach().numpy())

    params = model_training(
        x = x,
        y = y,
        n_epoches = 50000,
        learning_rate = 0.00017,
        params = torch.tensor([0.0,0.0])
    )
    print("梯度下降找到的w和b:%f %f\n"%(params[0],params[1]))

    y_pred = model(x,*params)
    print(f"优化后的模型预测结果:{y_pred.detach().numpy()}\n")

    #绘图
    plt.plot(xx.numpy(),y_pred.detach().numpy(),label="模型")
    plt.plot(xx.numpy(),y.numpy(),'o',label = "数据")
    plt.xlabel("奥运会(年)")
    plt.ylabel("取胜时间(秒")
    plt.legend()
    plt.show()


if __name__ == "__main__":
    main()

总结

以上暂时是我总结的笔记,后续会继续更新

相关推荐
Red Red1 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
贰十六2 小时前
笔记:Centos Nginx Jdk Mysql OpenOffce KkFile Minio安装部署
笔记·nginx·centos
知兀2 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
Natural_yz3 小时前
大数据学习17之Spark-Core
大数据·学习·spark
qq_172805593 小时前
RUST学习教程-安装教程
开发语言·学习·rust·安装
一只小小汤圆3 小时前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
醉陌离3 小时前
渗透测试笔记——shodan(4)
笔记
虾球xz3 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer7774 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz4 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法