哈夫曼压缩c语言,哈夫曼压缩算法c语言

dfnjsfkhak 9 0

大家好,今天小编关注到一个比较意思的话题,就是关于哈夫曼压缩c语言问题,于是小编就整理了3个相关介绍哈夫曼压缩c语言的解答,让我们一起看看吧。

  1. 哈夫曼树的构造?
  2. 哈编是什么意思?
  3. 问什么要做模型压缩,而不是直接训练一个小的cnn模型?

哈夫曼树的构造?

哈夫曼树是一种用来实现数据压缩的树形结构。构造哈夫曼树的步骤包括:首先将所有的节点按照权值从小到大进行排序然后选择权值最小两个节点作为左右子节点构造一个新的节点,其权值为这两个节点的权值之和

接着将新节点插入到原来的节点中,并重新按照权值大小进行排序;重复以上步骤,直到所有的节点都被合并成一个根节点,即构造完成哈夫曼树。

哈夫曼压缩c语言,哈夫曼压缩算法c语言-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

通过这种方式构造的树,权值较大的节点离根节点较近,从而实现了数据的高效压缩。

哈夫曼树是一种特殊的二叉树,其构造方法如下
1. 将待编码的按照频率大小排序。
2. 依次将排序后的符号作为左子树和右子树的根节点,并设左子树和右子树的权值分别为该符号的频率和1。
3. 重复步骤2,直到所有的符号都被包含在树中为止。
4. 最后得到的树就是哈夫曼树。
哈夫曼编码是一种前缀编码,即任何字符的编码都不是另一个字符编码的前缀。哈夫曼树在数据压缩、编码等领域有广泛的应用

哈编是什么意思?

是指哈夫曼编码,是一种编码方式,它是一种线性的前缀编码方式,它利用了信源符号的统计特性,将出现概率高的符号用短码编码,出现概率低的符号用长码编码。这样可以使得编码后的平均码长最短,可以最大化压缩效果。

哈夫曼压缩c语言,哈夫曼压缩算法c语言-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

哈夫曼编码是1952年由D***id A. Huffman提出的,通常使用哈夫曼树来实现。哈夫曼树是一种带权赋值树形结构,它满足哈夫曼编码的要求,并且能够在编码过程计算出最优编码方案。

哈编是一种网络用语,源自于中文拼音的简写。它的意思是“哈哈编程”,是指在编程过程中遇到有趣或者好笑的事情而发出的笑声。

哈编常常用于程序员之间的交流,表示对编程中的趣事或者幽默***的共鸣和欣赏。

哈夫曼压缩c语言,哈夫曼压缩算法c语言-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

它不仅是一种表达情感的方式,也是程序员们之间的一种默契和互动方式。哈编的出现,使得编程这个看似严肃的领域也充满了一丝轻松和乐趣。

问什么要做模型压缩,而不是直接训练一个小的cnn模型?

深度学习模型一般来说是越深越好(深度学习的本质是不同层级的特征抽取),当然前提是能用各种技巧训练好这个深度模型。当前的深度模型压缩是无损压缩,或者付出较少的精度代价,所以压缩的深度模型一般来说会比直接训练的浅层模型会有更好的预测精度。本质上,深度模型的压缩是通过训练的方法设计一个精度较高的稀疏模型,和自动化机器学习类似,最终的模型架构由数据决定,而不是完全由人工设计。另外,由于当前的主流机器学习框架都是基于张量(tensor)化的优化,而压缩后的模型每层参数是稀疏矩阵,其存储和计算都需要重新设计,比如用链表来存储参数等等,否则无法享受模型压缩带来的好处。模型压缩也给人工设计深度模型带来一些灵感,比如使用更小的卷积核(1X1),量化权值共享等等。

我们可以从几种常见的方法来讨论当前较为常见的模型压缩方法:

1. 模型压缩最常见的方法是剪枝。对于已训练好的模型网络,可以寻找一种有效的评判手段,将不重要的连接进行裁剪来减少模型的冗余。另外,也可以在在训练过程中,对权重的更新加L1正则项进行诱导,使其更加稀疏,使大部分的权值都为0。也可以在训练中动态进行剪枝,具体做法就是在训练过程中将认为不重要的连接剪枝,但是往往无法直观的判断哪些连接是否重要,因此在这里增加了一个嫁接的过程,将哪些重要的被裁掉的连接再恢复回来。通过网络嫁接操作的引入,避免了错误剪枝所造成的性能损失。

2. 从信息压缩的角度来压缩模型。常见的方法可以对参数矩阵进行低秩压缩(如svd), 可以将参数矩阵存储的连续变量转化成分类变量(浮点数转成整数),然后通过权值共享进一步压缩矩阵。最后在保存网络的时候还可以使用哈夫曼编码进行进一步的压缩。

3. 知识蒸馏也可以看成模型压缩的一种方法。知识蒸馏属于迁移学习的一种,也就是将一个模型的性能迁移到另一个模型上。如果训练好的复杂模型已经具有非常好的性能和泛化能力,可以用这个复杂模型来作为一个soft target来指导另外一个简单模型来学习,使简单模型具有和复杂模型相近的性能。训练时,简单模型有两个目标:一个是hard target,即原始的目标函数,为简单模型的类别概率输出与label真值的交叉熵;另一个为soft target,为简单模型的类别概率输出与复杂模型的类别概率输出的交叉熵,由于soft target具有更高的熵,它能比hard target提供更加多的信息,事实上,复杂模型的作用是为了提高label包含的信息量。通过这种方法,可以把模型压缩到一个非常小的规模。模型压缩对模型的准确率没有造成太大影响,而且还可以应付部分信息缺失的情况。

到此,以上就是小编对于哈夫曼压缩c语言的问题就介绍到这了,希望介绍关于哈夫曼压缩c语言的3点解答对大家[_a***_]。

标签: 哈夫曼 模型 压缩