VIT(vision transformer)不可能的事情——回归预测

为了验证VIT网络对时空预测的能力,编写代码对其验证。

实验方案1.

input=i

target=i

的目是让VIT网络什么都不做,输出结果就是自身。

结果损失越来越大

代码如下:

import torch
from torch import nn
from tqdm import trange
import torch.optim as optim
from vit_model import vit_custom_in21k as create_model
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model=create_model().to(device)
print('use :', device)
loss_fn=torch.nn.L1Loss()
loss_fn = loss_fn.to(device)
learning_gate = 0.001
optim = torch.optim.Adam(model.parameters(), lr=learning_gate)
for e in range(1,100):
    with trange(-100000,100000,100) as t:
        for i in t:
            optim.zero_grad()
            input1 = torch.tensor([[[ [j]]] for j in range(i,i+100)]).float()
            target=input1
            target=target.view(100,1)
            outputs=model(input1.to(device))
            loss=loss_fn(outputs,target.to(device))
            loss.backward()
            optim.step()
            t.set_postfix(loss=loss.item(),input1=input1[0].item(),target=target[0].item(),outputs=outputs[0].item())
    torch.save(model,'test_model_8m_8d.pht')

输出情况如下图:

实验方案2

采用时空预测方案。

输入为(1,10,10,10),其中每张10*10张量的数值一样,从i到i+10堆叠

标签为是个数值,从i+5到i+15

损失函数没有一点下降,越来越大。

代码如下:

import torch
from vit_model import VisionTransformer 
def vit_custom_in21k(num_classes: int = 10, has_logits: bool = True):
    """
    ViT-Base model (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929).
    ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer.
    weights ported from official Google JAX impl:
    https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_patch16_224_in21k-e5005f0a.pth
    """
    model = VisionTransformer(img_size=10,
                              patch_size=1,
                              in_c=10,
                              embed_dim=768,
                              depth=12,
                              num_heads=1,
                              representation_size=768 if has_logits else None,
                              num_classes=num_classes)
    return model
def train1():
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model=vit_custom_in21k().to(device)
    print('use :', device)
    loss_fn=torch.nn.L1Loss()
    loss_fn = loss_fn.to(device)
    learning_gate = 0.001
    optim = torch.optim.Adam(model.parameters(), lr=learning_gate)

    for i in range(0,10000):
        optim.zero_grad()
        data = list(torch.full([10, 10], j) for j in range(i, i + 10))
        input1 = torch.stack(data).unsqueeze(0).float()
        target = torch.tensor([j for j in range(i + 5, i + 15)]).float()
        outputs=model(input1.to(device))
        target = target.view(outputs.shape)
        loss=loss_fn(outputs,target.to(device))
        loss.backward()
        optim.step()
        print('\r',target[0][0].item(),'outputs:',outputs[0][0].item(),'loss',loss.item(),end='')

    torch.save(model,'test_model_8m_8d.pht')
if __name__=='__main__':
    train1()

实验结果如下:

结论

VIT(vision Transformer)对回归预测能力较弱

至少从实验结果而言,对于数据较为简单的情况预测能力较弱。

TransformerViTVision Transformer)都是基于Transformer模型结构的。Transformer是一种自注意力机制的模型,用于处理序列数据,如自然语言处理任务。ViTTransformer模型在视觉领域的应用,用于处理图像数据。 Transformer模型使用自注意力机制来捕捉输入序列中的关系,通过计算每个位置与其他位置的相关性来建立全局的上下文表示。这种机制允许模型同时考虑到序列中的所有位置,并且能够以并行的方式进行计算。 ViT将图像分割成一系列的图像块,然后将每个图像块转换为向量表示。这些向量表示经过多层Transformer编码器进行处理,以捕捉图像中的视觉关系。最后,通过对这些向量进行分类或回归,ViT可以用于图像分类、目标检测和图像生成等视觉任务。 因此,Transformer是一种通用的模型结构,用于处理序列数据,而ViTTransformer在视觉领域的具体应用。它们之间的联系在于使用了相同的自注意力机制,但在输入数据和任务上存在差异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [transformervit](https://blog.csdn.net/qq_44089890/article/details/130213061)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值