[bxd学习java基本点]7.linkedList方法,remove移走的要显示元素

本文通过具体示例展示了 Java 中 LinkedList 类的使用方法,包括 addFirst, removeFirst, getLast 和 removeLast 等特有方法的运用,并解释了 get 与 remove 方法的区别。

day14-08

LinkedList
其特有方法:
addFirst();
removeFirst();
removeLast();
getLast();


class LinkedListDemo{
public static void main(String[] args){
LinkedList link new LinkedList();
link.add("123");
link.add("456");
link.addFirst("123");
link.removeFirst("java02");
sop(link);
sop("size="+link.size);
sop(link.removeFirst())
}
public static void sop(Objct ojb){
System.out.print(obj);
}
}
get与remove区别
get 不会删除
remove 取还要删除
______
java04
java03
java02
java01
______

优化代码 String bmid = PubUtil.valueOf(listBXD.get("BXD_BMID")); String year = PubUtil.valueOf(listBXD.get("BXD_BXRQ")).substring(0, 4); String shsj = PubUtil.valueOf(listBXD.get("BXD_SHSJ")); String xmid = PubUtil.valueOf(listBXD.get("BXD_XMID")); String jhbh = PubUtil.valueOf(listBXD.get("BXD_XMJH_JHBH")); //部门年度发生额 String sql = "select ISNUll(sum(BXD_JE),0) as \"je\" from BXD where BXD_BMID = '"+bmid+"' " + "and BXD_SHBZ = 'Y' and DATEPART(YYYY,BXD_BXRQ) = '"+year+"'"; Double deptMoney = PubFunAction.queryForObj(sql, Double.class, 0.0); //更新部门年度发生额 sql = "update DBUDGET set DBUDGET_SJZC = '"+deptMoney+"' where DBUDGET_DEPTID = '"+bmid+"' and DBUDGET_YEAR = '"+year+"'"; PubFunAction.jt.update(sql); //项目年度发生额 sql = "select ISNULL(sum(BXD_JE),0) as \"je\" from BXD where BXD_XMID = '"+xmid+"' " + "and BXD_SHBZ = 'Y' and DATEPART(YYYY,BXD_BXRQ) = '"+year+"'"; Double projectMoney = PubFunAction.queryForObj(sql,Double.class,0.0); //更新项目年度发生额 sql = "update DBUDGETMX set DBUDGETMX_SJZC = '"+projectMoney+"' where DBUDGETMX_XMID = '"+xmid+"' and DBUDGETMX_YEAR = '"+year+"'"; PubFunAction.jt.update(sql); //经济分类年度发生额 for (Map<String, Object> bxdmx : listBXDMX) { String lbid = PubUtil.valueOf(bxdmx.get("BXDMX_BXLB_LBID")); sql = "select ISNULL(sum(BXDMX_BXJE),0) as \"je\" from BXD left join BXDMX on BXDMX_KEY=BXD_KEY " + "where BXDMX_BXLB_LBID = '"+lbid+"' and BXD_SHBZ = 'Y' and DATEPART(YYYY,BXD_BXRQ) = '"+year+"'"; Double economicClassificationMoney = PubFunAction.queryForObj(sql, Double.class, 0.0); } //更新合同计划完成标记 if (!"".equals(jhbh)){ sql = "update XMJH set XMJH_WCBZ = 'Y',XMJH_SJRQ_END = '"+shsj+"' where XMJH_JHBH = '"+jhbh+"'"; PubFunAction.jt.update(sql); }
06-10
### 自监督学习中通过修改损失函数区分高相似度负样本的方法 在自监督学习中,损失函数的设计对于有效地区分正样本和负样本至关重要。当面对高相似度的负样本时,可以通过调整损失函数的形式或引入额外机制来提高模型对这些困难样本的学习能力。 #### 1. **增加难负样本采样** 为了更好地处理高相似度的负样本,可以在训练过程中动态选择那些与正样本最接近的负样本参与计算。这种方法通常被称为硬负挖掘(hard negative mining)。例如,在对比学习框架下,可以仅保留一批中最难的几个负样本进行梯度更新[^1]。 ```python import torch from torch.nn.functional import cosine_similarity def hard_negative_mining(anchor, positive, negatives, k=5): """ 动态选择最难的k个负样本。 参数: anchor (Tensor): 锚点样本张量形状为[BxD] positive (Tensor): 正样本张量形状为[BxD] negatives (Tensor): 负样本集合张量形状为[NxD], N>>B k (int): 需要选出的最难负样本数量 返回: hardest_negatives (Tensor): 最难的k个负样本张量形状为[kxBxD] """ pos_sim = cosine_similarity(anchor.unsqueeze(1), positive.unsqueeze(1), dim=-1).unsqueeze(-1) neg_sims = cosine_similarity(anchor.unsqueeze(1), negatives.unsqueeze(0), dim=-1) _, indices = torch.topk(neg_sims, k=k, largest=True, sorted=False) hardest_negatives = negatives[indices] return hardest_negatives ``` #### 2. **采用更复杂的损失形式** 传统的InfoNCE Loss虽然能够很好地分离正负样本,但对于高度混淆的情况可能表现不足。此时可考虑使用更加精细设计的损失函数,比如: - **Symmetric InfoNCE**: 不仅仅关注单侧锚定样本与其他样本的关系,还同时优化双向关系,即不仅让`anchor-positive`靠近,也让`positive-anchor`靠近[^1]。 - **Proxy-NCA++**: 这种方法引入代理节点作为中间桥梁连接原始数据点与其类别中心,从而间接增强了对边界区域附近实例辨别力的能力[^1]。 #### 3. **加入温度参数调节** 温度超参τ控制着softmax操作内部指数项缩放程度,较小值会放大得分差异使得决策面更为陡峭;较大则趋于平坦化输出分布。针对某些特定应用场景下的极端情况可通过微调此数值达到更好效果[^1]。 #### 4. **结合Batch Normalization特性** 即便是在不显式定义负样本的情况下,借助批标准化层同样能实现一定程度上的对比效应。这是因为BN强制每批次内的激活响应满足单位方差约束条件,进而促使网络自动寻找局部最优解路径避开潜在陷阱——也就是所谓的“模式坍塌”现象[^3]。 --- ### 示例代码:改进版对比学习损失函数 以下是基于PyTorch实现的一个扩展版本InfoNCE Loss,其中加入了动态难负矿工逻辑以及双路对称性考量因素。 ```python class SymmetricHardNegativeLoss(torch.nn.Module): def __init__(self, temperature=0.5, num_hard_negs=5): super(SymmetricHardNegativeLoss, self).__init__() self.temperature = temperature self.num_hard_negs = num_hard_negs def forward(self, embeddings_a, embeddings_b): batch_size = embeddings_a.size(0) # Compute pairwise similarities between all pairs of samples. sim_matrix_ab = torch.matmul(embeddings_a, embeddings_b.t()) / self.temperature sim_matrix_aa = torch.matmul(embeddings_a, embeddings_a.t()) / self.temperature sim_matrix_bb = torch.matmul(embeddings_b, embeddings_b.t()) / self.temperature # Mask out diagonal elements corresponding to same-instance comparisons within each set. mask_diag = ~torch.eye(batch_size, dtype=torch.bool, device=sim_matrix_ab.device) sim_matrix_aa = sim_matrix_aa[mask_diag].view(batch_size,-1) sim_matrix_bb = sim_matrix_bb[mask_diag].view(batch_size,-1) # Select top-k hardest negatives per row from both matrices AA & BB combined. total_negatives = torch.cat([sim_matrix_aa,sim_matrix_bb],dim=1) values,_ = torch.topk(total_negatives,k=self.num_hard_negs,largest=True,dim=1) max_values = values[:,-1:] # Keep only the last element which is smallest among selected ones. logits_pos = torch.diag(sim_matrix_ab).view(-1,1) # Positive pair scores along main diagnoal AB matrix. logits_neg = total_negatives.ge(max_values.expand_as(total_negatives)).float()*total_negatives exp_logits_all = torch.exp(torch.cat((logits_pos,logits_neg.sum(dim=1).view(-1,1)),dim=1)) log_prob = logits_pos - torch.log(exp_logits_all.sum(dim=1,keepdim=True)) mean_log_prob_pos = (-log_prob.mean()+math.log(float(self.num_hard_negs)+1))/self.temperature return mean_log_prob_pos ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值