模型压缩与模型剪枝的结合-程序员宅基地

技术标签: 算法  机器学习  人工智能  剪枝  数据挖掘  

1.背景介绍

随着大数据、人工智能等领域的不断发展,机器学习和深度学习技术已经成为了各行各业的核心技术之一。在这些领域中,模型压缩和模型剪枝是两种重要的技术手段,它们可以帮助我们更有效地利用计算资源,提高模型的运行速度和部署效率。

模型压缩主要通过降低模型的参数数量和计算复杂度来减小模型的体积,从而减少内存占用和计算开销。模型剪枝则通过去除模型中不重要的神经元或权重来减少模型的复杂度,从而减少模型的大小和计算复杂度。

在本文中,我们将讨论模型压缩与模型剪枝的结合,以及它们在实际应用中的优势和挑战。我们将从背景介绍、核心概念与联系、核心算法原理和具体操作步骤、数学模型公式详细讲解、具体代码实例和详细解释说明、未来发展趋势与挑战以及附录常见问题与解答等方面进行全面的探讨。

2.核心概念与联系

模型压缩与模型剪枝是两种不同的技术手段,它们在实现上存在一定的差异,但在目标上是相似的,即减少模型的大小和计算复杂度。下面我们来详细介绍它们的核心概念和联系。

2.1模型压缩

模型压缩是指通过降低模型的参数数量和计算复杂度来减小模型的体积,从而减少模型的内存占用和计算开销。模型压缩的主要方法包括:权重裁剪、权重量化、知识蒸馏等。

2.1.1权重裁剪

权重裁剪是指通过去除模型中权重值为0的神经元或权重来减少模型的参数数量,从而减小模型的体积。权重裁剪可以通过设定一个阈值来实现,如将权重值小于阈值的神经元或权重去除。

2.1.2权重量化

权重量化是指通过将模型中的浮点参数转换为整数参数来减少模型的内存占用。权重量化可以通过将浮点参数进行量化,将其转换为有限个整数值来实现。例如,可以将浮点参数转换为8位整数,从而减少模型的内存占用。

2.1.3知识蒸馏

知识蒸馏是指通过训练一个较小的模型来学习大模型的知识,从而将大模型压缩为较小模型。知识蒸馏可以通过训练一个较小的模型来学习大模型的输出,从而将大模型压缩为较小模型。例如,可以通过训练一个较小的神经网络来学习大神经网络的输出,从而将大神经网络压缩为较小神经网络。

2.2模型剪枝

模型剪枝是指通过去除模型中不重要的神经元或权重来减少模型的复杂度,从而减少模型的大小和计算复杂度。模型剪枝的主要方法包括:稀疏化、基于重要性的剪枝等。

2.2.1稀疏化

稀疏化是指通过将模型中的密集连接转换为稀疏连接来减少模型的参数数量,从而减小模型的体积。稀疏化可以通过将模型中的密集连接转换为稀疏连接来实现。例如,可以将全连接层转换为稀疏连接层,从而减少模型的参数数量。

2.2.2基于重要性的剪枝

基于重要性的剪枝是指通过根据模型的输出重要性来去除模型中不重要的神经元或权重来减少模型的复杂度。基于重要性的剪枝可以通过计算神经元或权重的输出重要性来实现。例如,可以通过计算神经元或权重的输出重要性来去除模型中不重要的神经元或权重,从而减少模型的复杂度。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

在本节中,我们将详细讲解模型压缩和模型剪枝的核心算法原理和具体操作步骤,以及数学模型公式的详细解释。

3.1权重裁剪

3.1.1算法原理

权重裁剪的核心思想是通过去除模型中权重值为0的神经元或权重来减少模型的参数数量,从而减小模型的体积。权重裁剪可以通过设定一个阈值来实现,如将权重值小于阈值的神经元或权重去除。

3.1.2具体操作步骤

  1. 加载模型参数。
  2. 设定一个阈值。
  3. 遍历模型中的所有权重。
  4. 如果权重值小于阈值,则去除该权重。
  5. 更新模型参数。
  6. 保存更新后的模型参数。

3.1.3数学模型公式详细讲解

权重裁剪的数学模型公式可以表示为:

$$ W{new} = W{old} - {w{i} | |w{i}| < \theta} $$

其中,$W{new}$ 表示更新后的模型参数,$W{old}$ 表示原始模型参数,$w{i}$ 表示模型中的第i个权重,$\theta$ 表示阈值,${w{i} | |w_{i}| < \theta}$ 表示权重值小于阈值的权重。

3.2权重量化

3.2.1算法原理

权重量化的核心思想是通过将模型中的浮点参数转换为整数参数来减少模型的内存占用。权重量化可以通过将浮点参数进行量化,将其转换为有限个整数值来实现。例如,可以将浮点参数转换为8位整数,从而减少模型的内存占用。

3.2.2具体操作步骤

  1. 加载模型参数。
  2. 设定一个量化位数。
  3. 遍历模型中的所有浮点参数。
  4. 对浮点参数进行量化,将其转换为有限个整数值。
  5. 更新模型参数。
  6. 保存更新后的模型参数。

3.2.3数学模型公式详细讲解

权重量化的数学模型公式可以表示为:

$$ W{new} = W{old} \times Q $$

其中,$W{new}$ 表示更新后的模型参数,$W{old}$ 表示原始模型参数,$Q$ 表示量化因子,$Q$ 可以表示为:

$$ Q = {q{i} | 0 \leq q{i} < q_{max}} $$

其中,$q{i}$ 表示模型中的第i个浮点参数的量化后的整数值,$q{max}$ 表示量化位数。

3.3知识蒸馏

3.3.1算法原理

知识蒸馏的核心思想是通过训练一个较小的模型来学习大模型的知识,从而将大模型压缩为较小模型。知识蒸馏可以通过训练一个较小的神经网络来学习大神经网络的输出,从而将大神经网络压缩为较小神经网络。

3.3.2具体操作步骤

  1. 加载大模型参数。
  2. 加载小模型参数。
  3. 设定训练轮次。
  4. 遍历训练轮次。
  5. 将大模型的输出作为小模型的目标值。
  6. 训练小模型。
  7. 更新小模型参数。
  8. 保存更新后的小模型参数。
  9. 将小模型参数作为大模型参数。
  10. 更新大模型参数。
  11. 保存更新后的大模型参数。

3.3.3数学模型公式详细讲解

知识蒸馏的数学模型公式可以表示为:

$$ \min{W{s}} \frac{1}{2} \sum{i=1}^{n} (y{i} - f{s}(x{i}; W{s}))^{2} + \frac{\lambda}{2} \sum{j=1}^{m} w_{j}^{2} $$

其中,$W{s}$ 表示小模型参数,$f{s}(x{i}; W{s})$ 表示小模型的输出,$y{i}$ 表示大模型的目标值,$x{i}$ 表示输入数据,$\lambda$ 表示正则化参数,$n$ 表示训练数据的数量,$m$ 表示小模型参数的数量。

3.4稀疏化

3.4.1算法原理

稀疏化的核心思想是通过将模型中的密集连接转换为稀疏连接来减少模型的参数数量,从而减小模型的体积。稀疏化可以通过将模型中的密集连接转换为稀疏连接来实现。例如,可以将全连接层转换为稀疏连接层,从而减少模型的参数数量。

3.4.2具体操作步骤

  1. 加载模型参数。
  2. 设定一个稀疏度。
  3. 遍历模型中的所有连接。
  4. 对连接进行稀疏化,将其转换为稀疏连接。
  5. 更新模型参数。
  6. 保存更新后的模型参数。

3.4.3数学模型公式详细讲解

稀疏化的数学模型公式可以表示为:

$$ W{new} = W{old} \times S $$

其中,$W{new}$ 表示更新后的模型参数,$W{old}$ 表示原始模型参数,$S$ 表示稀疏度,$S$ 可以表示为:

$$ S = {s{i} | 0 \leq s{i} < s_{max}} $$

其中,$s{i}$ 表示模型中的第i个连接的稀疏度,$s{max}$ 表示稀疏度上限。

3.5基于重要性的剪枝

3.5.1算法原理

基于重要性的剪枝的核心思想是通过根据模型的输出重要性来去除模型中不重要的神经元或权重来减少模型的复杂度。基于重要性的剪枝可以通过计算神经元或权重的输出重要性来实现。例如,可以通过计算神经元或权重的输出重要性来去除模型中不重要的神经元或权重,从而减少模型的复杂度。

3.5.2具体操作步骤

  1. 加载模型参数。
  2. 计算模型中每个神经元或权重的输出重要性。
  3. 设定一个剪枝阈值。
  4. 遍历模型中的所有神经元或权重。
  5. 如果神经元或权重的输出重要性小于剪枝阈值,则去除该神经元或权重。
  6. 更新模型参数。
  7. 保存更新后的模型参数。

3.5.3数学模型公式详细讲解

基于重要性的剪枝的数学模型公式可以表示为:

$$ W{new} = W{old} - {w{i} | I(w{i}) < \theta} $$

其中,$W{new}$ 表示更新后的模型参数,$W{old}$ 表示原始模型参数,$w{i}$ 表示模型中的第i个权重,$I(w{i})$ 表示权重的输出重要性,$\theta$ 表示剪枝阈值。

4.具体代码实例和详细解释说明

在本节中,我们将通过具体代码实例来详细解释模型压缩和模型剪枝的实现过程。

4.1权重裁剪

4.1.1代码实例

```python import torch

加载模型参数

modelparams = torch.load('modelparams.pth')

设定阈值

threshold = 0.01

遍历模型参数

for name, param in modelparams.items(): # 去除权重值小于阈值的权重 if torch.mean(torch.abs(param)) < threshold: param.zero()

保存更新后的模型参数

torch.save(modelparams, 'modelparams_pruned.pth') ```

4.1.2详细解释说明

在上述代码实例中,我们首先加载了模型参数,然后设定了一个阈值。接着,我们遍历了模型参数,并根据权重值的绝对值是否小于阈值来去除权重值。最后,我们保存了更新后的模型参数。

4.2权重量化

4.2.1代码实例

```python import torch

加载模型参数

modelparams = torch.load('modelparams.pth')

设定量化位数

bits = 8

遍历模型参数

for name, param in model_params.items(): # 对浮点参数进行量化 param = torch.round(param * (2 * bits)) // (2 * bits)

更新模型参数

modelparams = {name: param.view(param.shape) for name, param in modelparams.items()}

保存更新后的模型参数

torch.save(modelparams, 'modelparams_quantized.pth') ```

4.2.2详细解释说明

在上述代码实例中,我们首先加载了模型参数,然后设定了量化位数。接着,我们遍历了模型参数,并对浮点参数进行量化。最后,我们更新了模型参数并保存了更新后的模型参数。

4.3知识蒸馏

4.3.1代码实例

```python import torch

加载大模型参数

largemodelparams = torch.load('largemodelparams.pth')

加载小模型参数

smallmodelparams = torch.load('smallmodelparams.pth')

设定训练轮次

epochs = 100

遍历训练轮次

for epoch in range(epochs): # 遍历输入数据 for x, y in dataloader: # 将大模型的输出作为小模型的目标值 yhat = largemodel(x).detach()

# 计算损失
    loss = (y_hat - y) ** 2

    #  backward
    loss.backward()

    # 更新小模型参数
    for param, grad in zip(small_model.parameters(), small_model.parameters()):
        param -= lr * grad

    # 更新大模型参数
    for param, grad in zip(large_model.parameters(), large_model.parameters()):
        param += lr * grad

保存更新后的小模型参数

torch.save(smallmodelparams, 'smallmodelparams_distilled.pth') ```

4.3.2详细解释说明

在上述代码实例中,我们首先加载了大模型参数和小模型参数,然后设定了训练轮次。接着,我们遍历了训练轮次,并将大模型的输出作为小模型的目标值。然后,我们计算损失,并更新小模型和大模型参数。最后,我们保存了更新后的小模型参数。

4.4稀疏化

4.4.1代码实例

```python import torch

加载模型参数

modelparams = torch.load('modelparams.pth')

设定稀疏度

sparsity = 0.5

遍历模型中的所有连接

for name, param in model_params.items(): # 对连接进行稀疏化 param = torch.sparse.FloatTensor(param.nonzero().t())

# 计算稀疏度
sparsity = 1 - torch.sum(param).item() / param.numel()

# 如果稀疏度小于设定值,则继续稀疏化
if sparsity > sparsity:
    param = torch.sparse.FloatTensor(param.nonzero().t())

更新模型参数

modelparams = {name: param.to(torch.float32) for name, param in modelparams.items()}

保存更新后的模型参数

torch.save(modelparams, 'modelparams_sparse.pth') ```

4.4.2详细解释说明

在上述代码实例中,我们首先加载了模型参数,然后设定了稀疏度。接着,我们遍历了模型中的所有连接,并对连接进行稀疏化。然后,我们计算稀疏度,并根据稀疏度是否小于设定值来继续稀疏化。最后,我们更新了模型参数并保存了更新后的模型参数。

4.5基于重要性的剪枝

4.5.1代码实例

```python import torch

加载模型参数

modelparams = torch.load('modelparams.pth')

加载模型

model = torch.nn.Sequential(*model_params.values())

计算模型中每个神经元或权重的输出重要性

importances = torch.zeros(len(modelparams)) for i, (name, param) in enumerate(modelparams.items()): importance = torch.mean(torch.abs(param)) if name.startswith('weight'): importance *= param.shape[0] importances[i] = importance

设定剪枝阈值

threshold = 0.001

遍历模型参数

for name, param in modelparams.items(): # 如果参数的输出重要性小于剪枝阈值,则去除该参数 if importances[name] < threshold: del modelparams[name]

更新模型参数

model = torch.nn.Sequential(*model_params.values())

保存更新后的模型参数

torch.save(modelparams, 'modelparams_pruned.pth') ```

4.5.2详细解释说明

在上述代码实例中,我们首先加载了模型参数和模型。然后,我们计算了模型中每个神经元或权重的输出重要性。接着,我们设定了剪枝阈值。接下来,我们遍历了模型参数,并根据参数的输出重要性是否小于剪枝阈值来去除该参数。最后,我们更新了模型参数并保存了更新后的模型参数。

5.未来发展和挑战

模型压缩和模型剪枝技术在近年来取得了显著的进展,但仍存在一些未来发展和挑战:

  1. 更高效的压缩和剪枝算法:目前的模型压缩和模型剪枝算法虽然已经取得了一定的成果,但仍然存在效率和准确性之间的平衡问题。未来的研究可以关注如何提高算法的效率,同时保持或提高模型的准确性。

  2. 更智能的剪枝策略:目前的剪枝策略主要是根据模型的输出重要性来去除不重要的神经元或权重。未来的研究可以关注如何更智能地去除模型中的不重要部分,以提高模型的压缩率和准确性。

  3. 更广泛的应用场景:目前的模型压缩和模型剪枝技术主要应用于图像识别和自然语言处理等领域。未来的研究可以关注如何将这些技术应用于其他领域,如语音识别、计算机视觉等。

  4. 更强大的计算资源:模型压缩和模型剪枝技术需要大量的计算资源来进行训练和优化。未来的研究可以关注如何更高效地利用计算资源,以提高模型的压缩率和准确性。

  5. 更好的性能评估指标:目前的模型压缩和模型剪枝技术主要关注模型的大小和准确性。未来的研究可以关注如何更好地评估模型的性能,以便更好地选择合适的压缩和剪枝策略。

6.附录:常见问题与解答

在本节中,我们将回答一些常见问题,以帮助读者更好地理解模型压缩和模型剪枝技术。

6.1模型压缩与模型剪枝的区别是什么?

模型压缩和模型剪枝是两种不同的模型优化技术,它们的主要区别在于优化目标和优化方法。

模型压缩主要关注降低模型的计算复杂度和内存占用,通常包括权重裁剪、权重量化和知识蒸馏等技术。模型压缩的目标是减小模型的大小,从而减少计算资源的消耗。

模型剪枝主要关注降低模型的复杂度,通常包括稀疏化和基于重要性的剪枝等技术。模型剪枝的目标是减小模型的复杂度,从而减少训练和部署的时间复杂度。

6.2模型压缩和模型剪枝的优缺点分别是什么?

模型压缩和模型剪枝各有优缺点,如下所示:

模型压缩的优点:

  1. 减小模型的大小,从而减少内存占用。
  2. 减小模型的计算复杂度,从而减少计算资源的消耗。
  3. 通常不会严重影响模型的准确性。

模型压缩的缺点:

  1. 可能会损失部分模型的信息,从而影响模型的准确性。
  2. 可能需要额外的训练和优化过程。

模型剪枝的优点:

  1. 减小模型的复杂度,从而减少训练和部署的时间复杂度。
  2. 通常不会严重影响模型的准确性。

模型剪枝的缺点:

  1. 可能需要额外的训练和优化过程。
  2. 可能会严重影响模型的准确性。

6.3模型压缩和模型剪枝的应用场景是什么?

模型压缩和模型剪枝的应用场景主要包括:

  1. 在资源有限的设备上部署模型,如智能手机、平板电脑等。
  2. 在需要快速响应的场景下部署模型,如自动驾驶、实时语音识别等。
  3. 在需要降低模型存储和计算成本的场景下部署模型,如云计算、大数据分析等。

6.4模型压缩和模型剪枝的实践技巧是什么?

模型压缩和模型剪枝的实践技巧主要包括:

  1. 选择合适的压缩和剪枝策略,如权重裁剪、权重量化、知识蒸馏、稀疏化和基于重要性的剪枝等。
  2. 根据模型的类型和任务特点选择合适的压缩和剪枝参数,如压缩率、量化位数、稀疏度和剪枝阈值等。
  3. 根据模型的大小和准确性需求选择合适的压缩和剪枝策略组合,以平衡模型的计算复杂度和准确性。
  4. 在模型压缩和模型剪枝过程中,充分利用硬件资源,如GPU、TPU等,以加速压缩和剪枝过程。
  5. 在模型压缩和模型剪枝过程中,充分利用软件优化技术,如动态压缩、动态剪枝等,以提高模型的实际性能。

参考文献

[1] Han, X., Wang, L., Cao, K., & Zhang, H. (2015). Deep compression: compressing deep neural networks with pruning, quantization and Huffman coding. In Proceedings of the 22nd international conference on Neural information processing systems (pp. 1328-1337).

[2] Gupta, A., Zhang, H., & Han, X. (2015). Deep neural network pruning: A survey. arXiv preprint arXiv:1511.07122.

[3] Chen, Z., Zhang, H., & Han, X. (2015). Compression techniques for deep neural networks: A survey. arXiv preprint arXiv:1604.05204.

[4] Molchanov, P., & Pajdla, T. (2016). Pruning neural networks: A survey. Neural Networks, 82, 17-34.

[5] Li, H., Dong, H., & Tang, Z. (2016). Pruning convolutional neural networks for fast object detection. In Proceedings of the 23rd international conference on Machine learning and applications (pp. 156-164).

[6] Luo, D., Zhang, H., & Han, X. (2017). Tiny deep learning: A survey on deep neural network compression. arXiv preprint arXiv:1704.04844.

[7] Han, X., Zhang, H., & Cao, K. (2017). State-of-the-art deep neural network compression: a survey. Neural Networks, 89, 1-21.

[8] Zhang, H

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/universsky2015/article/details/137334679

智能推荐

全卷积网络 Fully Convolutional Networks-程序员宅基地

文章浏览阅读1.1w次,点赞9次,收藏45次。CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully Convolutional Networks for Semantic Segmentation》在图像语义分割挖了一个坑,于是无穷无尽的人往坑里面跳。全卷积网络 Fully Convolutional Networks_fully convolutional networks

签证上的mult是什么意思_申根签证中mult是什么意思-程序员宅基地

文章浏览阅读789次。展开全部申根签证中mult是是多次的意思,指可以在有效期内多次往返申根国家。类型申根签证分62616964757a686964616fe78988e69d8331333431373939为入境和过境两类。1.入境签证有一次入境和多次入境两种。签证持有者分别可一次连续停留90天或每半年多次累计不超过3个月。如需长期停留,可向某一成员国申请只在该国使用的国别签证;2.过境签证指过境前往协定国以外国家的..._mult是什么意思?

webpack 配置_webpack设置 require-程序员宅基地

文章浏览阅读602次。corejs处理,在项目根目录下的 babel.config.js 文件配置。webpack.config.js文件。babel.config.js文件。记录学习 webpack 的过程。.eslintrc.js 文件。_webpack设置 require

Vue组件详解-程序员宅基地

文章浏览阅读454次。文章目录什么是组件?模块化与组件化组件定义命名规则创建组件的方式方式一方式二方式三组件的唯一性什么是组件?什么是组件:组件的出现,就是为了拆分vue实例的代码里的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可模块化与组件化名称概念模块化是从代码逻辑角度进行划分的;方便代码的分层开发,保证每个功能模块的职能单一组件化是从UI界面的角度进行划分的;前端的组件化,方便UI组件重用组件定义命名规则推荐全小写,然后

图像分类篇——使用pytorch搭建ResNet网络_resnet实战:使用resnet实现图像分类(pytorch)-程序员宅基地

文章浏览阅读2.7k次,点赞6次,收藏40次。目录1. ResNet网络详解1.1 ResNet网络概述1.2 Batch Normalization1.3 residual结构1.4 ResNet结构和详细参数1.5 迁移学习2. Pytorch搭建本文为学习记录和备忘录,对代码进行了详细注释,以供学习。内容来源:★github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing★b站:https://space.bilibili.com/18161609/chan_resnet实战:使用resnet实现图像分类(pytorch)

Beautiful Soup之find()和find_all()的基本使用_soup.find_all-程序员宅基地

文章浏览阅读1w次,点赞17次,收藏66次。1.HTML文本这里以官方文档提供的html代码来演示Beautiful Soup中find_all()和find()的基本使用。<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="stor_soup.find_all

随便推点

for input String "id"错误解决_for input string: "id-程序员宅基地

文章浏览阅读1.3w次。出现这个问题,Idea报错说明是 类型转换错误,可是之前这么做事没错的,类似于我就是这么展示在jsp页面上的,这次居然报类型转换错误,Google了一圈之后,发现不应该这么写,应该用数组下标去获取值。类似下面这种。这里面的下标顺序就是数据库当中对应的显示顺序。比如id是第一位,那么要想取到id,数组下标就是0,依次类推。..._for input string: "id

python heapq 优先队列数组内部不单调递增,但是单独一个个出队列单调递增_python heapq 维护单调-程序员宅基地

文章浏览阅读65次。在使用heapq的优先队列时,发现了标题中的现象,一度怀疑优先队列出错了。总之,使用heapq访问q[0]后面的内容时要注意。具体原因没有深究,有知道的大佬可以指点指点。_python heapq 维护单调

phpStudy环境安装SSL证书教程(apache)-程序员宅基地

文章浏览阅读85次。https://cloud.tencent.com/product/ssl此链接是检测域名 证书的可以检测一下下面是证书配置 小白呢亲测作为PHP程序员,我们一定要学会使用phpStudy环境集成包,PHPstudy用起来方便,快捷,对于刚入门的PHP初学者来说phpStudy是个好东西,我本文我们就和大家分享一下phpStudy环境如何安装SSL证书。第一步:修改apache目录..._d:/phpstudy/apache/conf/ssl/ca.key do not match

Python之小词典应用-程序员宅基地

文章浏览阅读5.9k次,点赞5次,收藏41次。Python之小词典应用这个学期专业开了python课,最后老师布置了一个作业:用python制作一个英语小词典的应用,遂做了一下。题目要求:制作英文学习词典。编写程序制作英文学习词典,词典有三个基本功能:添加、查询、和退出。程序读取源文件路径下的txt格式词典文件,若没有就创建一个。词典文件存储格式为“英文单词 中文单词”,每行仅有一对中英释义。程序会根据用户的选择进入相应的功能...

【轮式平衡机器人】——TMS320F28069片内外设之Timer_IT(补:CCS程序烧录方法)_机器人人烧录程序调试过程-程序员宅基地

文章浏览阅读1.1k次,点赞27次,收藏24次。TMS320F28069 的定时器中断功能。在微控制器或数字信号控制器中,定时器是一个非常重要的外设,它可以用来产生固定时间间隔的中断,或者用来精确计算时间。_机器人人烧录程序调试过程

计算机输入法无法启动,Win7系统开机后输入法总是消失如何解决-程序员宅基地

文章浏览阅读1.2k次。输入法是我们在使用电脑的时候经常会用来输入文字的工具,一般在开机的时候都会自动启动并在任务栏右下角显示,可是有不少win7系统用户却遇到开机后输入法总是消失的情况,要怎么解决呢?现在为大家带来Win7系统开机后输入法总是消失的详细解决步骤。1、在win7系统中点击“开始”--“运行”输入--regedit,打开“注册表编辑器”,找到“HKEY_USERS\.DEFAULT\ControlPanel..._开机输入法消失

推荐文章

热门文章

相关标签