首页 > 其他分享 >2024.4.8 pytorch框架初上手

2024.4.8 pytorch框架初上手

时间:2024-04-08 14:22:05浏览次数:20  
标签:loss 2024.4 torch pytorch print import model grad 初上

pytorch

PyTorch 是一个针对深度学习, 并且使用 GPU 和 CPU 来优化的 tensor library (tensor库)

中文文档: https://pytorch.org/resources

梯度/导数计算

# linear.py

import torch
import numpy as np

x = torch.tensor(3,)
w = torch.tensor(4.,requires_grad=True)
b = torch.tensor(5.,requires_grad=True)

y = w * x + b
y.backward()

print('dy/dx:', x.grad)
print('dy/dw:', w.grad)
print('dy/db:', b.grad)

# print(x,w.item,b)

线性回归

# linear_stastic.py

import numpy as np
import torch

# Input (temp, rainfall, humidity)
inputs = np.array([[73, 67, 43], 
                   [91, 88, 64], 
                   [87, 134, 58], 
                   [102, 43, 37], 
                   [69, 96, 70]], dtype='float32')

# Targets (apples, oranges)
targets = np.array([[56, 70], 
                    [81, 101], 
                    [119, 133], 
                    [22, 37], 
                    [103, 119]], dtype='float32')

inputs = torch.from_numpy(inputs)
targets = torch.from_numpy(targets)

# 随机生成满足shape类型的tensor,并加入grad传导
w = torch.randn(2,3,requires_grad=True)
b = torch.randn(2,requires_grad=True)

# 加载线性函数
def model(x):
    return x @ w.t() + b

# print(predict)
# 求均值方差
def mes(t1,t2):
    diff = t1 - t2
    return torch.sum(diff * diff) / diff.numel()

# epoch = 1000
for i in range(1000):
    predict = model(inputs)
    loss = mes(predict,targets)
    print("loss",i+1,"=",loss)
    loss.backward()
    with torch.no_grad():
        # 1e-5 means learning rate
        w -= w.grad * 1e-5
        b -= b.grad * 1e-5
        w.grad.zero_()
        b.grad.zero_()
        print("w,b",i+1,"=",w,b)

print(targets,'\n',predict)

torch内置函数实现线性回归

# linear_stastic_intorch.py

import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
import torch.nn.functional as F

# 加载训练集和测试集
# Input (temp, rainfall, humidity)
inputs = np.array([[73, 67, 43], 
                   [91, 88, 64], 
                   [87, 134, 58], 
                   [102, 43, 37], 
                   [69, 96, 70], 
                   [74, 66, 43], 
                   [91, 87, 65], 
                   [88, 134, 59], 
                   [101, 44, 37], 
                   [68, 96, 71], 
                   [73, 66, 44], 
                   [92, 87, 64], 
                   [87, 135, 57], 
                   [103, 43, 36], 
                   [68, 97, 70]], 
                  dtype='float32')

# Targets (apples, oranges)
targets = np.array([[56, 70], 
                    [81, 101], 
                    [119, 133], 
                    [22, 37], 
                    [103, 119],
                    [57, 69], 
                    [80, 102], 
                    [118, 132], 
                    [21, 38], 
                    [104, 118], 
                    [57, 69], 
                    [82, 100], 
                    [118, 134], 
                    [20, 38], 
                    [102, 120]], 
                   dtype='float32')

inputs = torch.from_numpy(inputs)
targets = torch.from_numpy(targets)

# 利用内置数据集类型加载数据
train_dataset = TensorDataset(inputs,targets)
# print(train_dataset[0:5])
batch_size = 5
train_dataloader = DataLoader(train_dataset,batch_size,shuffle=True)
'''
for x,y in train_dataloader:
    print(x,y)
'''

# 使用nn.linear自动完成初始化,随机生成model.weight和model.bias
model = nn.Linear(3,2)
# print(model.weight,model.bias)
# print(list(model.parameters()))
# 声明均值平方差loss函数
loss_fn = F.mse_loss
loss = loss_fn(model(inputs),targets)

# 声明优化函数(误差梯度下降)
opt = torch.optim.SGD(model.parameters(),lr=1e-5)

# 定义训练过程
def fit(num_epoch,model,loss_fn,opt):
    for epoch in range(num_epoch):
        for xb,yb in train_dataloader:
            # 线性计算
            predict = model(xb)
            # 损失计算
            loss = loss_fn(predict,yb)
            # 梯度计算
            loss.backward()
            梯度下降实现
            opt.step()
            # 梯度初始化
            opt.zero_grad()
        # 日志
        if epoch % 10 == 0:
            print("Epoch:{}/{},Loss:{:.4f}".format(epoch+1,num_epoch,loss.item()))

fit(100,model,loss_fn,opt)

标签:loss,2024.4,torch,pytorch,print,import,model,grad,初上
From: https://www.cnblogs.com/jibinghu/p/18121044

相关文章

  • 2024.4.7 训练1(rating) Codeforces Global Round 25
    https://codeforces.com/contest/1951题解参考:https://zhuanlan.zhihu.com/p/691034931A题一开始的思路比较绕,wa很多发卡了半小时才过。hansun的思路比较硬直,他在极短的时间内过了Ahansun的题解:https://codeforces.com/contest/1951/submission/255262403我的想法是分奇偶情......
  • 从零开始的深度学习项目(PyTorch识别人群行为)
    PyTorch识别人群行为系统环境介绍环境版本Python3.11.5pandas2.0.3numpy1.24.3torch2.1.2+cu121注意:2.1.2+cu121这样的版本号通常用于描述TensorFlow等深度学习框架的版本信息,其中:2.1.2是TensorFlow的主要版本号,表示主要的功能和接口的变化。cu121表示该Tenso......
  • [护网必备]知攻善防实验室蓝队应急响应工具箱v2024.4
    前言蓝队工具箱是为打造一款专业级应急响应的集成多种工具的工具集,由真实应急响应环境所用到的工具进行总结打包而来,由ChinaRan404,W啥都学,清辉等开发者编写.把项目现场中所用到的工具连同环境一同打包,并实现“可移植性”“兼容性”“使用便捷”等优点。集成模块:“常用工具......
  • 每天五分钟掌握深度学习框架pytorch:本专栏说明
    专栏大纲专栏计划更新章节在100章左右,之后还会不断更新,都会配备代码实现。以下是专栏大纲部分代码实现代码获取为了方便用户浏览代码,本专栏将代码同步更新到github中,所有用户可以读完专栏内容和代码解析之后,下载对应的代码,跑一跑模型算法,这样会加深自己对算法模型......
  • 日记 2024.4.7:子集卷积
    日记2024.4.7:子集卷积记号\(F(x)=\sum_{S\subseteq[n]}f_Sx^{S}\)是一个集合幂级数,其中\([n]=\{1,2,\cdots,n\}\),\(f_S\)是一个数组,然后写成像生成函数(其实是“形式幂级数”)的形式,\(x^S\)的这个指数是没意义的。FWT/FMT即两个集合幂级数的并、交、异或卷积运算。h......
  • Pytorch张量的数学运算:向量基础运算
    文章目录一、简单运算二、广播运算1.广播的基本规则2.广播操作的例子三、运算函数参考:与凤行  张量的数学运算是深度学习和科学计算中的基础。张量可以被视为一个多维数组,其在数学和物理学中有广泛的应用。这些运算包括但不限于加法、减法、乘法、除法、内积、......
  • 2024.4.7每日一题
    mysql1.创建索引idx_emp_no,查询emp_no为10005,使用强制索引forceindex(idx_emp_no)2.现在在last_update后面新增加一列名字为create_date,类型为datetime,NOTNULL,默认值为'000000:00:00'这里的默认值要写成,我还不知道为什么要这样default'2020-10-0100:00:00'java1......
  • 2024.4 做题纪要
    aaaaaaaaaaaaaaaaa大致是在成七集训,虽然挺多都是3月底的不过还是整一下。目录2024.3.30T2简单题2024.4.1T3木棍AGC059EGrid3-coloring2024.4.2T1斩首(Gym104901F)T3战争2024.4.5T3Text2024.4.7CF1707DPartialVirtualTreesCF1874EJellyfishandHack2024.3.30T2......
  • 2024.4.7
    2024.4.7【南天寂静亮星少,北落师门赛明灯。】Sunday二月三十<theme=oi-"search">A.填充单词题目描述小C认识很多单词,但是他并不喜欢其中的一些单词。具体地说,如果一个单词包含连续的3个元音字母,或连续的3个辅音字母,或者1个“L”字母都不包含的话,这个单词是不被小C喜......
  • 2024.4.7 向量化编程AVX/NEON
    基本介绍X86:Intelx86是英特尔公司于1978年推出的16位微处理器;而x86泛指一系列基于Intel8086且向后兼容的中央处理器指令集架构IntelICC和开源的GCC编译器支持SSE/AVX指令的C语言接口(intrinsic,内置函数),在intrinsic.h头文件中(头文件可能有所不同)函数命名:第一部分:mm/mm256......