一文弄懂大小端存储,高低字节,高低位。弄不懂打我!><

好久没有发帖咯,对于高低字节,高位与低位的问题,于今天发帖分享一下。如果有用,请不吝点赞则个。。QAQ

好了话不多说,既然标题写了这三个,那么就一个一个开始吧,首先是the first ------大小端---吗?

不,of cruse NO!!! 

         首先是高位与低位,因为大小端的定义要靠高低位和高低字节理解啦~

1、高位与低位

        既然是高位与低位,那先搞清楚什么是位。

        比如初学者常听到的32位操作系统,64位操作系统,那位是啥呢? 32位与64位又是什么呢?

         此处贴图一张:        

        so,32位就是32个0或1组成的长度,64位同理。

        既然搞懂了位,那什么是高低位呢?

        举例说明:

我用二进制表示数字185(题主本人185..信不信由你);

转换可得10进制185等于二进制1011 1001,因为二进制进位是从右往左(类似于10进制的185,左边也是高位)所以1011便是高4位,1001就是低4位。

恭喜,你已经领悟了此门绝学的三分之一,继续往下看,无需自宫哈~

2、高字节与低字节

再次贴图~

so,上述中的红色字体1011 1001便是一个完整的字节。那什么是高字节和低字节?

我们先将1011 1001转为16进制得到0xB9,emmm...报意思换一个。。。

比如我有一个16进制的数字0x1234(10进制为4660),

我们先将它转为二进制得到 0001 0010 0011 0100。其中左边8位0001 0010对应的便是0x12的二进制表示,既然我们上面已经知道了左边表示高位,那么对于0x1234, 0x12便是高8位,0x34为低8位。(16进制0x****同样默认左边是高位)

再次恭喜,您的修炼已臻化境...只消弄明白最后的三分之一即可白日飞升~

3、大小端

        相信大家都知道大小端既是常用于计算机中的两种相反的数据存储模式,定义也都知道:

 大端存储:低地址存储高位字节,高地址存储低位字节。

 小端存储:低地址存储低位字节,高地址存储高位字节。

        既然我们已经弄清楚了什么是高位字节,什么是低位字节,我们只需要知道高低地址即可。

计算机以字节为基本存储单位,一般都是从低地址开始,从低到高(也就是低地址在前)那么,以0x1234再次举例:

大端存储:低地址存储高位字节,那低地址存储高8位的0x12,紧邻的高地址存储低8位的0x34,如果用大端存储的计算机打印出来这个字节数组,便应该先打印0x12,再打印0x34。

(题主的电脑为小端存储,只是做了个简单转换)

小端存储:低地址存储低位字节,即0x34,高地址存储高位字节, 鸡...(严肃), 即0x12;

那么电脑打印出来应为34在前,34,12。看图:

至此~恭喜道友解锁全部功法,respect~ 

还望不吝点赞则个~

### 深度学习中模型的知识蒸馏与剪枝技术原理及应用 #### 知识蒸馏的技术原理及应用 知识蒸馏是一种有效的模型压缩策略,旨在将复杂的教师模型(teacher model)所蕴含的知识迁移到较为简单的学生模型(student model)。这种方法不仅能够保持较高的预测准确性,还能显著减小模型尺寸并提升运行效率。具体来说,在训练过程中,学生模型不仅要拟合原始数据集上的标签信息,还要尽可能模仿教师模型给出的概率分布,即所谓的“暗知识”或软标签[^1]。 为了实现这一点,通常会采用温度缩放机制调整softmax函数的输出,使得教师网络产生的概率分布更加平滑,便于学生更好地捕捉其特征表示能力。此外,还可以引入额外损失项来强化这种迁移过程的效果,比如基于中间层激活值的一致性约束等[^5]。 ```python import torch.nn.functional as F def knowledge_distillation_loss(student_logits, teacher_logits, temperature=2.0): soft_student = F.softmax(student_logits / temperature, dim=-1) soft_teacher = F.softmax(teacher_logits / temperature, dim=-1) loss_kd = F.kl_div( input=F.log_softmax(student_logits / temperature, dim=-1), target=F.softmax(teacher_logits / temperature, dim=-1), reduction='batchmean' ) * (temperature ** 2) return loss_kd ``` #### 剪枝的方法论及其应用场景 相比之下,剪枝则是另一种不同的模型简化手段,主要关注于移除那些对整体性能贡献较小甚至可以忽略不计的部分——通常是连接权值接近零的位置。通过对神经元间联系强度进行评估筛选,并逐步去除冗余组件,最终得到一个更为紧凑高效的版本[^3]。 实际操作时,一般先完成一次完整的预训练阶段;接着依据设定的标准挑选出待修剪的目标节点/边;最后重新微调剩余结构直至满足预期指标为止。值得注意的是,尽管此法能在一定程度上缓解过拟合现象的发生几率,但也可能导致泛化能力下降等问题出现,因此需谨慎对待参数设置环节[^2]。 ```python from functools import partial import numpy as np def prune_weights(model, pruning_ratio=0.2): all_params = [] for name, param in model.named_parameters(): if 'weight' in name and not ('bn' in name or 'bias' in name): all_params.append((name, param.data.cpu().numpy())) flat_params = np.concatenate([p.flatten() for _, p in all_params]) threshold = np.percentile(abs(flat_params), q=(pruning_ratio*100)) with torch.no_grad(): for layer_name, weights in all_params: mask = abs(weights) >= threshold pruned_tensor = torch.from_numpy(mask.astype(int)).cuda() getattr(model, '.'.join(layer_name.split('.')[:-1]))._parameters[layer_name.split('.')[-1]].mul_(pruned_tensor) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值