1. 利用梯度下降法,计算二次函数y=x^2+x+4的最小值

def target_function(x):return x ** 2 + x +4def gradient(x):return 2*x + 1x_init = 10
x = x_init
steps = 100
lr = 0.1
for i in range(100):x = x - lr*gradient(x)print(f"最小值 f(x) = {target_function(x):.4f}")

2. 实现交叉熵损失、Softmax以及Sigmoid
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#实现Softmax、Logsoftmax、Sigmoid以及交叉熵损失
import torch
import torch.nn.functional as Fdef softmax(x, dim=-1):exp_x = torch.exp(x)return exp_x/torch.sum(exp_x, dim=dim, keepdim=True)# 1.上溢出问题:当x趋向于无穷大时,会导致exp(x)超过数值范围
# 2.下溢出问题:当x趋向于负无穷大时,会导致exp(x)被截断变成0,加上log会出现log(0)的情况。所以要避免单独计算exp(x)
# 解决方案:1. 减掉最大值 2. 计算log时先拆开def log_softmax(x, dim=-1):x = x - torch.max(x,dim=-1,keepdim=True)[0]return x - torch.log(torch.sum(torch.exp(x),dim=-1,keepdim=True))# x = torch.rand((2,3))
# print(torch.allclose(F.softmax(x,dim=-1),softmax(x)))
# print(torch.allclose(log_softmax(x),torch.log(softmax(x))))
# print(torch.allclose(F.log_softmax(x,dim=-1),log_softmax(x)))def sigmoid(x):return 1/(1+torch.exp(-x))# print(torch.allclose(torch.sigmoid(x),sigmoid(x)))def cross_entropy_loss(y_pred, y_true):y_pred = log_softmax(y_pred,dim=-1)return -torch.sum(y_true*y_pred, dim=-1)# input = torch.rand((2,3))
# label_onehot = torch.tensor([[0,0,1],[0,1,0]])
# print(cross_entropy_loss(input,label_onehot))# # pytorch内置的cross_entropy_loss的输入是类别索引,不是one hot向量# label = torch.argmax(label_onehot,dim=-1)
# offi_cross_entropy_loss = torch.nn.CrossEntropyLoss(reduction="none")# print(torch.allclose(offi_cross_entropy_loss(input,label), cross_entropy_loss(input,label_onehot)))
# print(offi_cross_entropy_loss(input,label))

3. 实现一下CLIP和SigLIP的loss

在这里插入图片描述

在这里插入图片描述

import torch
import torch.nn.functional as F
import torch.nn as nnclass Clip_loss(nn.Module):def __init__(self, temp_init=1/0.07):super().__init__()self.log_temp = torch.nn.Parameter(torch.log(torch.tensor(temp_init)))def forward(self, image_features, text_features):"""image_features: shape (N, D)text_features: shape (N, D)"""image_features = F.normalize(image_features, p=2, dim=-1)text_features = F.normalize(text_features, p=2, dim=-1)temp = torch.exp(self.log_temp)logits_per_image = torch.matmul(image_features, text_features.transpose(0,1)) * templogits_per_text = logits_per_image.transpose(0,1)n = image_features.shape[0]labels = torch.arange(n, device=image_features.device)loss_i2t = F.cross_entropy(logits_per_image, labels)loss_t2i = F.cross_entropy(logits_per_text, labels)loss = (loss_i2t + loss_t2i)/2return lossclass SigLip_loss(nn.Module):def __init__(self, temp_init=1/0.07, bias_init=10.0):super().__init__()self.log_temp = torch.nn.Parameter(torch.log(torch.tensor(temp_init)))self.bias = torch.nn.Parameter(torch.tensor(bias_init))def forward(self, image_features, text_features):"""image_features: shape (N, D)text_features: shape (N, D)"""image_features = F.normalize(image_features, p=2, dim=-1)text_features = F.normalize(text_features, p=2, dim=-1)# Compute temperature and logitstemp = torch.exp(self.log_temp)logits = torch.matmul(image_features, text_features.transpose(0,1)) * temp + self.bias# Create labels: 1 for positive pairs (diagonal), -1 for negative pairsn = image_features.shape[0]labels = 2*torch.eye(n, n, device=logits.device) - torch.ones(n, n, device=logits.device)# Compute pairwise sigmoid lossloss = -torch.mean(F.logsigmoid(labels*logits))return losssiglip_loss = SigLip_loss()
clip_loss = Clip_loss()
image_features = torch.rand((10,768))
text_features = torch.rand((10,768))
siglip = siglip_loss(image_features,text_features)
clip = clip_loss(image_features,text_features)
print(siglip)
print(clip)

4. 实现Multi-head-attention

import torch
import torch.nn as nn
import torch.nn.functional as F
import math
class MHA(nn.Module):def __init__(self, n_head, n_emb, block_size, bias=True, drop_rate=0.1):super().__init__()self.n_head = n_headself.n_emb = n_embself.q_proj = nn.Linear(n_emb, n_emb, bias=bias)self.k_proj = nn.Linear(n_emb, n_emb, bias=bias)self.v_proj = nn.Linear(n_emb, n_emb, bias=bias)self.output_proj = nn.Linear(n_emb, n_emb, bias=bias)self.attn_drop = nn.Dropout(drop_rate)self.out_drop = nn.Dropout(drop_rate)self.register_buffer("mask",torch.tril(torch.ones(block_size,block_size)).view(1,1,block_size,block_size))def forward(self, x):B,T,C = x.shapeq = self.q_proj(x).view(B, T, self.n_head, C//self.n_head).transpose(1,2)k = self.k_proj(x).view(B, T, self.n_head, C//self.n_head).transpose(1,2)v = self.v_proj(x).view(B, T, self.n_head, C//self.n_head).transpose(1,2)attn = torch.matmul(q, k.transpose(-1,-2))*(1/math.sqrt(C//self.n_head))attn = attn.masked_fill(self.mask[:,:,:T,:T], float('-inf'))attn = F.softmax(attn, dim=-1)attn = self.attn_drop(attn)output = torch.matmul(attn, v).transpose(1,2).contiguous().view(B,T,C)output = self.output_proj(output)return self.attn_drop(output)input = torch.rand(10,10,768)
attention = MHA(n_head=8, n_emb=768, block_size=10)
print(attention(input).shape)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90901.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90901.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90901.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深入底层】C++开发简历4+4技能描述6

简历书写 熟悉C的封装、继承、多态,STL常用容器,熟悉C11的Lambda表达式、智能指针等,熟悉C20协程语法,具有良好的编码习惯与文档能力。 回答思路 这里是基本上就是要全会,考察的问题也很固定,stl这块可以定…

forest远程调用注意事项

1、如果在项目中,同时依赖了其中多个框架,那么按 Fastjson2 > Fastjson > Jackson > Gson 这样的优先级来判断,Forest 会以优先级最高的框架作为 JSON 转换器。2、Forest 支持哪几种 JSON 框架?A: 支持 Jackson、Gson、F…

网络资源模板--基于Android Studio 实现的新闻App

目录 一、测试环境说明 二、项目简介 三、项目演示 四、部设计详情(部分) 登录页 首页 五、项目源码 一、测试环境说明 电脑环境 Windows 11 编写语言 JAVA 开发软件 Android Studio (2020) 开发软件只要大于等于测试版本即可(近几年官网直接下载也可…

通过Location API精准获取位置信息并优化定位精度!

👋 你好,欢迎来到我的博客!我是【菜鸟不学编程】    我是一个正在奋斗中的职场码农,步入职场多年,正在从“小码农”慢慢成长为有深度、有思考的技术人。在这条不断进阶的路上,我决定记录下自己的学习与成…

构建可扩展的状态系统:基于 ArkTS 的模块化状态管理设计与实现

摘要 在 HarmonyOS 的日常开发中,很多人都会遇到一个问题:多个页面之间的数据状态如何共享?尤其是在组件结构越来越复杂的场景下,如果还用传统方式来传值,不仅代码混乱,维护也很吃力。 为了解决这个问题&am…

重生之我在暑假学习微服务第二天《MybatisPlus-下篇》

本系列参考黑马程序员微服务课程,有兴趣的可以去查看相关视频,本系列内容采用渐进式方式讲解微服务核心概念与实践方法,每日更新确保知识点的连贯性。通过系统化学习路径帮助开发者掌握分布式系统构建的关键技术。读者可通过平台订阅功能获取…

系统整理Python的条件语句和常用方法

Python 的条件语句(if 语句)是控制程序流程的基础之一,结构清晰、语法简洁,非常适合初学者掌握。一、基本语法结构if 条件:执行代码块1 elif 条件2:执行代码块2 else:执行代码块3示例:score 85if score > 90:print…

记录个IAR程序下载后硬件复位不运行,必须断电复位才运行的问题

【问题测试】有个F407的跑马灯的例子,是MDK和IAR两个版本,MDK版本的例子下载并复位后可以正常看到LED闪烁,而IAR的例子下进去后,不会闪烁。使用TOOL的上位机内核寄存器监测工具测试发现,硬件复位后竟然还在调试状态&am…

观察者模式(Observer Pattern)和 发布-订阅模式(Publisher-Subscriber Pattern)

你对 观察者模式(Observer Pattern)和 发布-订阅模式(Publisher-Subscriber Pattern)的描述是非常准确的,并且阐明了它们的核心区别。为了帮助你更好地理解这两者的细微差异,下面是一个更详细的对比分析&am…

2025年接口技术的十字路口:当MCP遇见REST、GraphQL与gRPC

在当今这个由数据驱动、万物互联的时代,应用程序接口(API)已成为现代软件架构的基石。它们是不同服务之间沟通的桥梁,支撑着从网页应用到复杂的微服务生态系统的一切。长久以来,开发者们在REST、GraphQL和gRPC这几种主…

【CTF-WEB-反序列化】利用__toString魔术方法读取flag.php

题目 页面提示输入?code,那我们在网址里get一下出现了新页面的提示,进入看看下面有个help.php页面的提示,进入看看有一段php代码,仔细分析,应该是要用反序列法代码如下 class FileClass{ public $filename error.log…

在 github.com 与 sourceforge.net 上创建免费个人静态网站、博客的区别

github.com github 属于 git 版本管理专业网站,有免费和收费两种套餐。git 的数据是存放在数据库中的,要将数据库中的数据显示为网站的网页,这需要服务器端提供专门的中间件支持才能实现。 特点: 官方支持:提供长期…

jenkins 入门指南:从安装到启动的完整教程

jenkins 入门指南:从安装到启动的完整教程 持续集成(CI)是现代开发流程中的核心环节,而 Jenkins 作为一款开源的 CI 工具,凭借简单安装、开箱即用、插件丰富、易于扩展等优势,成为开发者的首选工具。它能自…

机器学习(重学版)基础篇(概念与评估)

本篇参考周志华老师的西瓜书,但是本人学识有限仅能理解皮毛,如有错误诚请读友评论区指正,万分感谢。一、基础概念与评估方法本节目标:建立理论基础框架​1、机器学习定义机器学习是一门通过计算手段利用经验(以数据形式…

spring/springboot SPI(二)配合使用的接口

spring.factories 里,Spring 会根据接口来加载实现类,常见的几个接口包括:一、org.springframework.context.ApplicationListener1、作用监听 Spring 容器事件,如 ApplicationReadyEvent。2、使用方法项目结构Spring Boot 2.xSpri…

基于Zig语言,opencv相关的c++程序静态交叉编译

一、写在前面 1.什么是zig? Zig 是一种通用编程语言; Zig 最初的定位就是代替C语言的系统级语言,它提供了与 C 语言几乎 100% 兼容(可直接调用 C 头文件、链接 C 库),同时不需要任何依赖构建系统。 Zig 同时附带一…

基于 LSTM 与 SVM 融合的时间序列预测模型:理论框架与协同机制—实践算法(1)

目录 1、单一模型的局限性:混合架构的设计动机 2、LSTM 的时序特征提取:从原始序列到高阶表征 2.1、门控机制的时序过滤能力 2.2、隐藏状态的特征压缩作用 2.3、预训练的特征优化逻辑 3、SVM 的非线性映射:从高阶特征到预测输出 3.1、…

如何查看docker实例是否挂载目录,以及挂载了哪些目录

一条命令即可一次性列出当前容器里所有挂载点&#xff1a; docker inspect <容器ID或名称> --format{{range .Mounts}}{{printf "%-8s %-35s -> %s\n" .Type .Source .Destination}}{{end}}示例输出&#xff1a; bind /host/owrt/src …

Opentrons 模块化平台与AI技术助力智能移液创新,赋能AAW™自动化工作站

在生命科学领域加速拥抱自动化的关键节点&#xff0c;全球开源实验室自动化领导者 Opentrons 携手全球领先生命科学公司默克生命科学&#xff0c;重磅推出 AAW™智能自动化液体处理平台。这一战略合作的核心技术引擎 ——Opentrons Flex 第三代全自动移液工作站&#xff0c;正以…

C++学习笔记(八:函数与变量)

往篇内容&#xff1a; C学习笔记&#xff08;一&#xff09; 一、C编译阶段※ 二、入门案例解析 三、命名空间详解 四、C程序结构 C学习笔记&#xff08;二&#xff09; 五、函数基础 六、标识符 七、数据类型 补充&#xff1a;二进制相关的概念 sizeof 运算符简介 补…