---
title: record记录文件
description: "record文件，为基于protobuf协议的序列化数据结构文件，记录量化因子scale/offset等，通过该文件、压缩配置文件以及原始网络模型文件，生成压缩后的模型文件。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0290.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0290.html
indexId: 626fdfe3dd5c97d092fa32b82f978b94d5a2a64db819ea9ce2df9c19b017e46e65
---
# record记录文件

record文件，为基于protobuf协议的序列化数据结构文件，记录量化因子scale/offset等，通过该文件、压缩配置文件以及原始网络模型文件，生成压缩后的模型文件。

#### record原型定义

record文件对应的protobuf原型定义为：

```
message SingleLayerRecord {
optional float scale_d = 1;
optional int32 offset_d = 2;
repeated float scale_w = 3;
repeated int32 offset_w = 4;
repeated uint32 shift_bit = 5;
optional uint32 channels = 6;
optional uint32 height = 7;
optional uint32 width = 8;
optional bool skip_fusion = 9 [default = false];
}
message ScaleOffsetRecord {
message MapFiledEntry {
optional string key = 1;
optional SingleLayerRecord value = 2;
}
repeated MapFiledEntry record = 1;
}
```

参数说明如下：

| 消息 | 是否必填 | 类型 | 字段 | 说明 |
| --- | --- | --- | --- | --- |
| ScaleOffsetRecord | \- | \- | \- | map结构，为保证兼容性，采用离散的map结构。 |
| ScaleOffsetRecord | repeated | MapFiledEntry | record | 每个record对应一个量化层的量化因子记录；record包括两个成员： key为所记录量化层的layer name。 value对应SingleLayerRecord定义的具体量化因子。 |
| SingleLayerRecord | \- | \- | \- | 包含了量化层所需要的所有量化因子记录信息。 |
| SingleLayerRecord | optional | float | scale\_d | 数据量化scale因子，仅支持对数据进行统一量化。 |
| SingleLayerRecord | optional | int32 | offset\_d | 数据量化offset因子，仅支持对数据进行统一量化。 |
| SingleLayerRecord | repeated | float | scale\_w | 权重量化scale因子，支持标量（对当前层的权重进行统一量化），向量（对当前层的权重按channel\_wise方式进行量化）两种模式，仅支持卷积层（Convolution），反卷积层（Deconvolution）类型进行channel\_wise量化模式。 |
| SingleLayerRecord | repeated | int32 | offset\_w | 权重量化offset因子，同scale\_w一样支持标量和向量两种模式，且需要同scale\_w维度一致，当前不支持权重带offset量化模式，offset\_w仅支持0。 |
| SingleLayerRecord | repeated | uint32 | shift\_bit | 移位因子。convert\_model接口场景下预留字段，当前不支持，不需要配置。 |
| SingleLayerRecord | optional | uint32 | channels | 由于AMCT不支持整网infer\_shape，需要配置当前层的输入shape信息，该字段用于配置输入的channel大小； |
| SingleLayerRecord | optional | uint32 | height | 由于AMCT不支持整网infer\_shape，需要配置当前层的输入shape信息，该字段用于配置输入的height大小。 |
| SingleLayerRecord | optional | uint32 | width | 由于AMCT不支持整网infer\_shape，需要配置当前层的输入shape信息，该字段用于配置输入的width大小。 |
| SingleLayerRecord | optional | bool | skip\_fusion | 配置当前层是否要跳过Conv+BN+Scale、Deconv+BN+Scale、BN+Scale+Conv、FC+BN+Scale融合操作，默认为false，即当前层要做上述融合。 |


对于optional字段，由于protobuf协议未对重复出现的值报错，而是采用覆盖处理，因此出现重复配置的optional字段内容时会默认保留最后一次配置的值，需要用户自己保证文件的正确性。


#### record记录文件

最终生成的record文件格式为record.txt。对于一般量化层配置需要包含scale_d、offset_d、scale_w、offset_w、channels、height、width、shift_bit参数，对于AVE Pooling因为没有权重，因此不能配置scale_w、offset_w参数。量化因子record文件内容示例如下：

```
record {
key: "
conv1
"
value: {
scale_d: 0.01424
offset_d: -128
scale_w: 0.43213
scale_w: 0.78163
scale_w: 1.03213
offset_w: 0
offset_w: 0
offset_w: 0
shift_bit: 1
shift_bit: 1
shift_bit: 1
channels:3
height: 144
width: 144
skip_fusion: true
}
}
record {
key: "
pool1
"
value: {
scale_d: 0.532532
offset_d: 13
channels:256
height: 32
width: 32
}
}
record {
key: "
fc1
"
value: {
scale_d: 0.37532
offset_d: -67
scale_w: 0.876221
offset_w: 0
shift_bit: 1
channels:1024
height: 1
width: 1
}
}
```
