target=“_bank”

本文介绍了如何使用HTML在新窗口打开链接的方法及JavaScript中String.valueOf()函数的用途,并解释了trigger()方法的功能。

在新窗口中打开链接

<a href="" tagret="_bank"></a>

------------------



String.valueOf(Object)将对象转换为String类型的

-----------------

trigger()方法的意思自动触发被选元素的指定事件类型

可以将”import torch import torch.nn as nn from torch.utils.data import DataLoader, Dataset from tqdm import tqdm from mat1 import MyDataset from network import Network, calc_coeff from ift import IFT_Module import numpy as np class CustomModel(nn.Module): def __init__(self,n_cls, K, confi_threshold=0.9): super().__init__() self.confi = confi_threshold self.dim = 4 self.n_cls = n_cls self.K = K self.source_feat_bank = nn.Parameter(torch.zeros(n_cls * K, self.dim).half(), requires_grad=False) self.target_feat_bank = nn.Parameter(torch.zeros(n_cls * K, self.dim).half(), requires_grad=False) #self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.2)) self.source_max_probs_list = [0.0 for i in range(self.n_cls * self.K)] self.target_max_probs_list = [0.0 for i in range(self.n_cls * self.K)] self.source_key_dict = {i: i for i in range(self.n_cls * self.K)} self.target_key_dict = {i: i for i in range(self.n_cls * self.K)} def forward(self, pseudo_label, construct=True, source=True, label=None): if construct: max_probs, label_p = torch.max(pseudo_label, dim=-1) if source: for i, l in enumerate(label): if l == label_p[i]: index = l.item() * self.K l_list = self.source_max_probs_list[index: index + self.K] if max_probs[i] > min(l_list): min_index = l_list.index(min(l_list)) self.source_max_probs_list[index + min_index] = max_probs[i] self.source_feat_bank[index + min_index] = pseudo_label[i].clone() self.source_key_dict[index + min_index] = label_p[i] else: for i, l in enumerate(label_p): index = l.item() * self.K l_list = self.target_max_probs_list[index: index + self.K] min_index = l_list.index(min(l_list)) # 确保 min_index 被正确赋值 if max_probs[i] > l_list[min_index]: self.target_max_probs_list[index + min_index] = max_probs[i] self.target_feat_bank[index + min_index] = pseudo_label[i].clone() self.target_key_dict[index+min_index] = label_p[i] source_bank = torch.mean(self.source_feat_bank.reshape(self.n_cls, self.K, self.dim), dim=1) # 调整形状,torch.mean(..., dim=1) 对每个类别的 K 个特征取平均值,得到一个大小为 (n_cls, dim) 的 source_bank 张量。这表示每个类别都有一个(K, dim)的平均特征向量 target_bank = torch.mean(self.target_feat_bank.reshape(self.n_cls, self.K, self.dim), dim=1) return source_bank, target_bank def parse_batch_test(batch): input_data = batch[1] labels = batch[2] return input_data, labels def construct_bank(model, base_network, dset_loaders, device): with torch.no_grad(): model.eval() base_network.eval() print("Constructing source feature bank...") for batch in tqdm(dset_loaders["source"]): signals, labels= parse_batch_test(batch) signals, labels= signals.to(device).clone(), labels.to(device).clone() features_source, outputs_source = base_network(signals) # pseudo_label = torch.softmax(outputs_source, dim=-1) source_bank, _ = model(outputs_source, construct=True, source=True, label=labels) if min(model.source_max_probs_list) > 0.99: break print("Constructing target feature bank...") for batch in tqdm(dset_loaders["target"]): signals, labels = parse_batch_test(batch) signals, labels = signals.to(device).clone(), labels.to(device).clone() features_target, outputs_target = base_network(signals) # pseudo_label = torch.softmax(outputs_target, dim=-1) _, target_bank = model(outputs_target, construct=True, source=False) if min(model.target_max_probs_list) > 0.99: break print('Feature banks are completed!') print("Source Feature Bank:") print(source_bank) print("Target Feature Bank:") print(target_bank) return source_bank, target_bank # if __name__ == "__main__": # # 设置需要的值 # n_cls = 4 # 类别数量 # K = 5 # 每个类别存储的特征数量 # device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # # dsets = {} # dset_loaders = {} # dsets["source"] = MyDataset(ext='source') # dsets["target"] = MyDataset(ext='target') # dset_loaders["source"] = DataLoader(dsets["source"], batch_size=64, \ # shuffle=False, drop_last=False) # dset_loaders["target"] = DataLoader(dsets["target"], batch_size=64, \ # shuffle=False, drop_last=False) # class_num = 4 # # base_network = Network() # base_network = base_network.cuda() # # custom_model = CustomModel(n_cls=n_cls, K=K) # custom_model.to(device) # # # # 构建特征库 # construct_bank(custom_model, base_network, dset_loaders, device) # # # 从 custom_model 获取 source_banktarget_bank # source_bank, target_bank = custom_model(pseudo_label=None, construct=False) # # # 这里你需要加载或定义你的 CLIP 模型 # ift_module = IFT_Module(custom_model, beta_s=1.0, beta_t=1.0) # ift_module.to(device) # # for batch in dset_loaders["source"]: # labels, signals = parse_batch_test(batch) # labels, signals = labels.to(device), signals.to(device) # Ft = source_bank # 源域图像特征 Ft # Fv = base_network(signals) # 当前批次的源域图像特征 Fv # logits = ift_module(Ft, Fv, source_bank, target_bank) # # logits 即为 IFT_Module 的输出,可以用于进一步处理或计算损失函数等 # # #for batch in dset_loaders["target"]: # # signals = batch[1].to(device) # batch[1] 是目标域图像特征 # # Fv = base_network(signals) # 当前批次的目标域图像特征 # # Ft = target_bank(signals) # # logits = ift_module(Ft, Fv, source_bank, target_bank) # print(logits)“这段代码写成伪代码吗
08-13
#include "stm32f10x.h" // 设备头文件(需在工程中定义STM32F10X_HD宏) // SRAM初始化函数 void FSMC_SRAM_Init(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef Timing; GPIO_InitTypeDef GPIO_InitStructure; /* 1. 使能FSMC和GPIO时钟 */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE); /* 2. 配置FSMC相关GPIO为复用推挽模式 */ // GPIOD配置:地址/数据/控制信号 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIOE配置:数据/字节使能信号(D0-D15, NBL0-NBL1) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOE, &GPIO_InitStructure); // GPIOF配置:地址信号(A0-A5, A12-A15) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOF, &GPIO_InitStructure); // GPIOG配置:地址/控制信号(A16-A18, NE1) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_9| GPIO_Pin_12; GPIO_Init(GPIOG, &GPIO_InitStructure); /* 3. 配置FSMC时序参数(适用于72MHz系统时钟) */ Timing.FSMC_AddressSetupTime = 3; // 地址建立时间:$$ T_{setup} = (1+1) \times 13.9ns ≈ 27.8ns $$ Timing.FSMC_AddressHoldTime = 0; // 地址保持时间 Timing.FSMC_DataSetupTime = 7; // 数据建立时间:$$ T_{data} = (3+1) \times 13.9ns ≈ 55.6ns $$ Timing.FSMC_BusTurnAroundDuration = 0; Timing.FSMC_CLKDivision = 0; Timing.FSMC_DataLatency = 0; Timing.FSMC_AccessMode = FSMC_AccessMode_A; // 模式A(读写时序分离) /* 4. 配置FSMC SRAM控制器 */ FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; // 使用Bank1 NE1片选 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; // 16位数据总线 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; // 使能写操作 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; // 共用时序 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &Timing; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &Timing; // 初始化并使能FSMC FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); } volatile uint16_t *sram_base; volatile uint16_t *target_addr1; volatile uint16_t *target_addr2; int main(void) { FSMC_SRAM_Init(); // 初始化FSMC sram_base = (volatile uint16_t*)0x60000000; target_addr1 = sram_base + 0x02; target_addr2 = sram_base + 0x04; // 写入测试模式 *target_addr1 = 0xABCD; // 写入特定值 *target_addr2 = 0x1234; // 写入特定值 while(1) { // 主循环 } }修改
09-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值