首页 > 其他分享 >pytorch深度学习基础模型

pytorch深度学习基础模型

时间:2023-07-22 21:46:36浏览次数:35  
标签:linear val 模型 nn pytorch train 深度 model seq

激活函数

作用

在网路的中间层,允许输出函数在不同的值上具有不同的斜率,这些不同斜率的部分可以近似任意函数。

在网络的最后一层,可以将线性运算的输出限制在指定范围内。

具有的性质

非线性:非线性允许整个网络可以近似更复杂的函数。

可微:可以通过梯度来更新。

至少有一个敏感区域:输入中,细微的改变对输出有非常大的影响。

大部分是非敏感的区域:输入的改变对结果影响甚微。

输入为正或负无穷都有对应的上下界。

激活函数code

import math
math.tanh(-2.2)

 

线性模型

模型包

import torch.nn as nn

定义模型

linear_model = nn.Linear(1,1) #参数,输入特征数量,输出特征数量
linear_model.weight #查看模型权重,初始权重是随机的
linear_model.bias #查看偏置项,初始偏置项是随机的

 

模型预测

模型的输入神经元个数对应的是一批次数据中单个数据的维度,批次大小默认为第0维不用指定。因此若数据是1维的,那么输入神经元个数也为1。

x = torch.ones(1)
linear_model(x) #模型的输入期望第0维度是一批数据的数量,因此输出也是一个tensor列表形式,每个元素对应一个输出

x = torch.ones(10,1)
linear_model(x)

 

批次训练


t_c = [0.5, 14.0, 15.0, 28.0, 11.0, 8.0, 3.0, -4.0, 6.0, 13.0, 21.0]
t_u = [35.7, 55.9, 58.2, 81.9, 56.3, 48.9, 33.9, 21.8, 48.4, 60.4, 68.4]
t_c = torch.tensor(t_c).unsqueeze(1)
t_u = torch.tensor(t_u).unsqueeze(1)

n_samples = t_u.shape[0]
n_val = int(0.2 * n_samples)
shuffled_indices = torch.randperm(n_samples)#将0~n_samples随机打乱后获得数字序列
train_indices = shuffled_indices[:-n_val]#从0到倒数第n_val-1个
val_indices = shuffled_indices[-n_val:]#从倒数第n_val个到最后

train_t_u = t_u[train_indices]
train_t_c = t_c[train_indices]

val_t_u = t_u[val_indices]
val_t_c = t_c[val_indices]

t_un_train = 0.1 * train_t_u
t_un_val = 0.1 * val_t_u

linear_model = nn.Linear(1,1) #输入为1维,默认第0维是batch大小,batch中每一个元素都是1维
optimizer = optim.SGD(linear_model.parameters(),lr=1e-2)
linear_model.parameters()
list(linear_model.parameters())
def training_loop(n_epochs,optimizer,model,loss_fn,t_u_train,t_u_val,t_c_train,t_c_val):
    for epoch in range(1,n_epochs+1):
        t_p_train = model(t_u_train)
        loss_train = loss_fn(t_p_train,t_c_train)

        t_p_val = model(t_u_val)
        loss_val = loss_fn(t_p_val,t_c_val)

        optimizer.zero_grad()
        loss_train.backward()
        optimizer.step()

        if epoch == 1 or epoch % 1000 == 0:
            print(f"Epoch {epoch}, Training loss {loss_train.item():.4f},"
                  f" Validation loss {loss_val.item():.4f}")
linear_model = nn.Linear(1,1)
optimizer = optim.SGD(linear_model.parameters(),lr=1e-2)
training_loop(
    n_epochs=3000,
    optimizer=optimizer,
    model =linear_model,
    loss_fn=nn.MSELoss(),
    t_u_train=t_un_train,
    t_u_val=t_un_val,
    t_c_train=train_t_c,
    t_c_val=val_t_c
)
print()
print(linear_model.weight)
print(linear_model.bias)

 

顺序模型

使用nn.Sequential来按照顺序添加模型。与keras不同的是在添加一个隐藏层后需要手动添加一个激活层。

seq_model = nn.Sequential( nn.Linear(1,13),
                           nn.Tanh(),
                           nn.Linear(13,1))

 可以通过seq_model.parameters()来查看模型的所有参数以及其名字

[param.shape for param in seq_model.parameters()]

for name,param in seq_model.named_parameters():
    print(name,param.shape)

 

定义中间层名字

OrderedDict 

from collections import OrderedDict
seq_model = nn.Sequential( OrderedDict([
    ('hidden_linear',nn.Linear(1,8)),
    ('hidden_activation',nn.Tanh()),
    ('output_linear',nn.Linear(8,1)),
]))

seq_model

for name,param in seq_model.named_parameters():
    print(name,param.shape)

seq_model.output_linear.bias

 

模型训练

optimizer = optim.SGD(seq_model.parameters(),lr=1e-3)
training_loop(
    n_epochs=5000,
    optimizer=optimizer,
    model=seq_model,
    loss_fn=nn.MSELoss(),
    t_u_train=t_un_train,
    t_u_val=t_un_val,
    t_c_train=train_t_c,
    t_c_val=val_t_c
)

print('output',seq_model(t_un_val))
print('answer',val_t_c)
print('hidden',seq_model.hidden_linear.weight.grad)

 

可视化

import matplotlib.pyplot as plt
t_range = torch.arange(20.,90.).unsqueeze(1)
fig = plt.figure(dpi=100)
plt.xlabel("Fahrenheit")
plt.ylabel("Celsius")
plt.plot(t_u.numpy(),t_c.numpy(),'o')
plt.plot(t_range.numpy(),seq_model(0.1 * t_range).detach().numpy(),'c-')
plt.plot(t_u.numpy(),seq_model(0.1*t_u).detach().numpy(),'kx')

标签:linear,val,模型,nn,pytorch,train,深度,model,seq
From: https://www.cnblogs.com/RedNoseBo/p/17574252.html

相关文章

  • CSS2.1规范笔记——10 视觉格式化模型细节
    视觉格式化模型细节包含块的定义元素(生成的)盒的位置有时候是根据一个特定的矩形计算的,叫做元素的包含块(containingblock)。元素包含块的定义如下:元素包含块其为根元素。其包含块是一个被称为初始包含块的矩形。对连续媒体,尺寸取自视口的尺寸,并且被固定在画布开......
  • CSS2.1规范笔记——9.1 视觉格式化模型(视口和包含块)
    视觉格式化模型视觉格式化模型:对于可视化媒体,用户代理怎样处理文档树。在视觉格式化模型中,文档树中的每个元素根据其盒模型生成0或多个盒。这些盒的布局由以下因素控制:盒尺寸与类型定位方案(常规流、浮动与绝对定位)文档树中元素间的关系外部信息(例如视口大小、图片的固有尺寸......
  • 黑魂 211深度优先搜索方法制作双手控制
    创建一个新脚本TransformHelpers放进Scripts文件夹的Helper文件夹里接下来要实现往Unity放进新的定义方法。把TransformHelpers修改成: 把这个hihi方法放进WeaponManager的start函数里: 测试这个方法在运行的时候调用的过程。接下来我们按照hihi方法的参数重新创建一个方法......
  • 超详细图文教程:3DS Max 中创建低多边形游戏长剑模型
    推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景在此,由两部分组成的教程的第一部分中,我将向您展示如何:对剑柄进行建模剑的护手模型剑刃建模1.如何制作剑柄步骤1在本教程中使用正交视图。要更改视图,请单击视口上任意位置的鼠标中键或屏幕左上角的小按钮。步骤......
  • 深度优先搜索dfp学习
    >>定义深度优先搜索属于图算法的一种,英文缩写为DFS即DepthFirstSearch.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.(accordingtoBaidu)>>几个例子eg11215迷宫 (求是否有路径)http://ybt.ssoier.cn:8088/problem_show.php?pi......
  • 一类特殊的 dp 模型--zhengjun
    这类问题大概长这样:求一个排列\(p_{1\simn}\),最小(大)化如下值:\[\sum\limits_{i=1}^{n-1}f(p_i,p_{i+1})\\f(i,j)= \left\{ \begin{array}{**lr**} g(i)+h(j),i<j\\ h(i)+g(j),i>j \end{array} \right.\]那么就可以用如下方法\(O(n^2)\)解决:从小到大向序列中......
  • Llama2开源大模型的新篇章以及在阿里云的实践
    Llama一直被誉为AI社区中最强大的开源大模型。然而,由于开源协议的限制,它一直不能被免费用于商业用途。然而,这一切在7月19日发生了改变,当Meta终于发布了大家期待已久的免费商用版本Llama2。Llama2是一个由MetaAI开发的预训练大语言模型,它可以接受任何自然语言文本作为输入,并生成文......
  • VTK+OCC显示CAD模型
    VTK是一款十分优秀的可视化套件,开源且功能强大,基本上可以满足有限元领域的全部可视化需求。遗憾的是,VTK不支持CAD模型(如igs、stp格式的模型)的显示。在网上搜索后可以发现,在不花钱的情况下,想要显示和处理CAD模型,基本上都得使用OpenCasCade,即OCC。OCC有自己的可视化系统,也可以集成......
  • 4.8 数值稳定性和模型初始化
    1.数值稳定性当神经网络的层数变得越来越深时,容易出现梯度消失及梯度爆炸的问题。这是因为,输出对于某一层的一组参数的梯度是多个矩阵的乘积,并且越底部(浅层)的层,相乘的矩阵的数量就越多。梯度消失会导致参数更新过小,甚至梯度为0,网络无法训练。sigmoid函数容易导致梯度消失:  ......
  • Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择|附代码数据
    全文下载:http://tecdat.cn/?p=22319最近我们被客户要求撰写关于偏最小二乘法(PLS)回归的研究报告,包括一些图形和统计输出。本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估。为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方法,可以去除潜在的离群点和只......