原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!由于工作量大,准备整8个系列完事,-----系列5

文章目录
- 前言
- 一、原始程序---计算原型,开始训练,计算损失
- 二、每一行代码的详细解释
- 2.1 粗略分析
- 2.2 每一行代码详细分析
前言
承接系列4,此部分属于原型类中的计算原型,开始训练,计算损失函数。
一、原始程序—计算原型,开始训练,计算损失
def compute_center(self,data_set): #data_set是一个numpy对象,是某一个支持集,计算支持集对应的中心的点center = 0for i in range(self.Ns):data = np.reshape(data_set[i], [1, self.input_shape[0], self.input_shape[1], self.input_shape[2]])data = Variable(torch.from_numpy(data))data = self.model(data)[0] #将查询点嵌入另一个空间if i == 0:center = dataelse:center += datacenter /= self.Nsreturn centerdef train(self,labels_data,class_number): #网络的训练#Select class indices for episodeclass_index = list(range(class_number))random.shuffle(class_index)choss_class_index = class_index[:self.Nc]#选20个类sample = {'xc':[],'xq':[]}for label in choss_class_index:D_set = labels_data[label]#从D_set随机取支持集和查询集support_set,query_set = self.randomSample(D_set)#计算中心点self.center[label] = self.compute_center(support_set)#将中心和查询集存储在list中sample['xc'].append(self.center[label]) #listsample['xq'].append(query_set)#优化器optimizer = torch.optim.Adam(self.model.parameters(),lr=0.001)optimizer.zero_grad()protonets_loss = self.loss(sample)protonets_loss.backward()optimizer.step()def loss(self,sample): #自定义lossloss_1 = autograd.Variable(torch.FloatTensor([0]))for i in range(self.Nc):query_dataSet = sample['xq'][i]for n in range(self.Nq):data = np.reshape(query_dataSet[n], [1, self.input_shape[0], self.input_shape[1], self.input_shape[2]])data = Variable(torch.from_numpy(data))data = self.model(data)[0] #将查询点嵌入另一个空间#查询点与每个中心点逐个计算欧氏距离predict = 0for j in range(self.Nc):center_j = sample['xc'][j]if j == 0:predict = eucli_tensor(data,center_j)else:predict = torch.cat((predict, eucli_tensor(data,center_j)), 0)#为loss叠加loss_1 += -1*F.log_softmax(predict,dim=0)[i]loss_1 /= self.Nq*self.Ncreturn loss_1
二、每一行代码的详细解释
2.1 粗略分析
第一个函数 compute_center(self,data_set) 用于计算支持集中心点的坐标。输入参数 data_set 是一个 numpy 对象,代表支持集。该函数中用了一个 for 循环遍历了每一个支持集中的样本,将其嵌入到另一个空间,并计算其总和来求得所有样本的中心点。最后返回计算出的中心点的坐标。
第二个函数 train(self,labels_data,class_number) 是网络的训练函数。其中 labels_data 是标签数据,class_number 是类别数。首先从 class_number 中随机选取出 Nc 个类,对于每个选出来的类,从其标签数据 D_set 中随机选取出支持集和查询集,并将支持集传入 compute_center() 函数计算中心点。接着将计算出的中心点和查询集存储在样本字典 sample 中。最后使用 Adam 优化器对模型进行优化,并计算损失(调用了 loss 函数),将反向传播得到的梯度更新到模型中。
第三个函数def loss(self,sample)是一个自定义的损失函数,它的作用是计算样本的损失值。在这个损失函数中,使用了欧氏距离和softmax函数。
2.2 每一行代码详细分析
def compute_center(self,data_set): - 这是一个方法,用于计算给定数据集(支持集)的中心点。
2-4. center = 0 - 初始化中心点的变量为0。
5-8. for i in range(self.Ns): - 遍历数据集中的每个数据点。
9-14. 这部分代码将数据集中的每个数据点重塑为适应模型输入的形状,并将其转换为PyTorch的Variable。然后,使用模型将查询点嵌入另一个空间。
if i == 0: - 如果这是第一个数据点,则将查询点设置为中心点。
16-19. 否则,将查询点添加到中心点。
center /= self.Ns - 计算中心点,这是所有数据点的平均值。
return center - 返回计算得到的中心点。
接下来是 train 方法:
23-24. 从给定的标签数据中选择类别索引并随机洗牌。选择特定数量的类别(self.Nc)。
25-30. 对于所选类别中的每一个,从其数据中随机选择支持集和查询集。
31-33. 使用 compute_center 方法计算每个类的中心点,并将其存储在列表中。同时将查询集也存储在列表中。
34-37. 初始化优化器,这里使用Adam优化算法,学习率设置为0.001。然后清空梯度缓存。
38-42. 计算损失函数值,该损失函数是根据自定义的损失函数计算的。然后进行反向传播以计算梯度。
optimizer.step() - 使用优化器更新模型的参数。
最后是自定义的损失函数 loss:
45-46. 初始化一个张量 loss_1 为0,它用于累计损失值。
47-52. 对于每个类别(self.Nc),遍历查询集中的每个数据点。对于每个查询点,将其嵌入到另一个空间中,并计算它与每个中心点之间的欧氏距离。
53-57. 将所有的距离组合在一起,并使用softmax函数将其转换为概率值。然后,对于每个查询点,累加其与所有中心点的负对数似然损失值。
loss_1 /= self.Nq*self.Nc - 将损失值除以查询集中的数据点数量和类别数量以获得平均损失值。
return loss_1 - 返回计算得到的损失值。
相关文章:
原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!由于工作量大,准备整8个系列完事,-----系列5
文章目录 前言一、原始程序---计算原型,开始训练,计算损失二、每一行代码的详细解释2.1 粗略分析2.2 每一行代码详细分析 前言 承接系列4,此部分属于原型类中的计算原型,开始训练,计算损失函数。 一、原始程序—计算原…...
milvus数据库的数据管理-插入数据
一、插入数据 1.准备数据 数据必须与数据库中定义的字段元数据一致,与集合的模式匹配 import random data [[i for i in range(2000)],[str(i) for i in range(2000)],[i for i in range(10000, 12000)],[[random.random() for _ in range(2)] for _ in range(2…...
系列一、请谈谈你对JVM的理解?Java8的虚拟机有什么更新?
一、请谈谈你对JVM的理解?Java8的虚拟机有什么更新? JVM是Java虚拟机的意思。它是建立在操作系统之上的,由类加载器子系统、本地方法栈、Java栈、程序计数器、方法区、堆、本地方法库、本地方法接口、执行引擎组成。 (1࿰…...
恕我直言,大模型对齐可能无法解决安全问题,我们都被表象误导了
是否听说过“伪对齐”这一概念? 在大型语言模型(LLM)的评估中,研究者发现了一个引人注目的现象:当面对多项选择题和开放式问题时,模型的表现存在显著差异。这一差异根源在于模型对复杂概念的理解不够全面&…...
Apache Airflow (九) :Airflow Operators及案例之BashOperator及调度Shell命令及脚本
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…...
IJ中配置TortoiseSVN插件:
文章目录 一、报错情况:二、配置TortoiseSVN插件: 一、报错情况: 由于公司电脑加密,TortoiseSVN菜单没有提交和更新按钮,所以需要使用IJ的SVN进行代码相关操作 二、配置TortoiseSVN插件: 需要设置一个svn.…...
个人实现在线支付,一种另类的在线支付解决方案
Hi, I’m Shendi 个人实现在线支付,一种另类的在线支付解决方案 个人实现在线支付的方式 对于在线支付,最多的是接入微信与支付宝。但都需要营业执照,不适用于个人。 当然,可以去办理一个个体工商户,但对我这种小额收…...
浅谈智能安全配电装置应用在银行配电系统中
【摘要】银行是国家重点安全保护部分,关系到社会资金的稳定,也是消防重点单位。消防安全是银行工作的重要组成部分。在银行配电系统中应用智能安全配电装置,可以提高银行的智能控制水平,有效预防电气火灾。 【关键词】银行&#…...
macOS下如何使用Flask进行开发
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…...
记一次服务器配置文件获取OSS
一、漏洞原因 由于网站登录口未做双因子校验,导致可以通过暴力破解获取管理员账号,成功进入系统;未对上传的格式和内容进行校验,可以任意文件上传获取服务器权限;由于服务器上配置信息,可以进一步获取数据库权限和OSS管理权限。二、漏洞成果 弱口令获取网站的管理员权限通…...
合众汽车选用风河Wind River Linux系统
导读合众新能源汽车股份有限公司近日选择了Wind River Linux 用于开发合众智能安全汽车平台。 合众智能安全汽车平台(Hozon Automo-tive Intelligent Security Vehicle Plat-form)是一个面向高性能服务网关及车辆控制调度的硬件与软件框架,将于2024年中开始投入量产…...
PTA平台-2023年软件设计综合实践_5(指针及引用)
第一题 6-1 调和平均 - C/C 指针及引用 函数hmean()用于计算整数x和y的调和平均数,结果应保存在指针r所指向的浮点数对象中。当xy等于0时,函数返回0表示无法计算,否则返回1。数学上,两个数x和y的调和平均数 z 2xy/(xy) 。 直接…...
智慧卫生间
智慧卫生间 获取ApiKey/SecretKey获取Access_token获取卫生间实时数据返回说明 获取ApiKey/SecretKey ApiKey/SecretKey采用 线下获取的方式,手动分配。 获取Access_token 向授权服务地址http://xxxxxx:12345/token(示意)发送post请求,并在data中带上…...
Cadence virtuoso drc lvs pex 无法输入
问题描述:在PEX中的PEX options中 Ground node name 无法输入内容。 在save runset的时候也出现无法输入名称的情况 解决办法: copy一个.bashrc文件到自己的工作目录下 打开.bashrc文件 在.bashrc中加一行代码:unset XMODIFIERS 在终端sour…...
反序列化漏洞(2), 分析调用链, 编写POC
反序列化漏洞(2), 反序列化调用链分析 一, 编写php漏洞脚本 http://192.168.112.200/security/unserial/ustest.php <?php class Tiger{public $string;protected $var;public function __toString(){return $this->string;}public function boss($value){eval($valu…...
Pytorch reshape用法
这里-1是指未设定行数,程序自动计算,所以这里-1表示任一正整数 example reshape(-1, 1) 表示(任意行,1列),4行4列变为16行1列reshape(1, -1) 表示(1行,任意列)…...
Latex 辅助写作工具
语法修改 https://app.grammarly.com/润色 文心一言、ChatGPTlatex 编辑公式 https://www.latexlive.comlatex 编辑表格 https://www.tablesgenerator.comlatex 图片转公式 https://www.tablesgenerator.com...
frp新版本frp_0.52.3设置
服务端 frps.toml cp /root/frp/frpc /usr/bin #bindPort 7000 bindPort 7000# 如果指定了“oidc”,将使用 OIDC 设置颁发 OIDC(开放 ID 连接)令牌。默认情况下,此值为“令牌”。auth.method “token” auth.method "…...
100G.的DDoS高防够用吗?
很多人以为100G的DDoS防御已经足够了,但殊不知DDoS攻击大小也是需要分行业类型的,比如游戏、金融、影视、电商甚至ZF或者行业龙头等等行业类型,都是大型DDoS攻击的重灾区,别说100G防御,就算300G防御服务器也不一定够用…...
【django+vue】项目搭建、解决跨域访问
笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【djangovue】项目搭建、解决跨域访问 djangovue介绍vue环境准备vue框架搭建1.创建vue项目2.配置vue项目3.进入项目目录4.运行项目5.项目文件讲解6.vue的扩展库或者插件 django环境准备django框架搭建1.使用conda…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
