Compresión del modelo Tensorflow, pisando innumerables pozos, finalmente hecho

1. Instale bazel, descargue el archivo .sh de la versión de Linux de github y luego instálelo
2. Descargue el código fuente de TensorFlow más reciente de GitHub
3. Ingrese a la carpeta del código fuente de TensorFlow e ingrese los comandos
bazel build tensorflow/tools/graph_transforms:transform_graph
Aquí encontrará varias trampas, como como
ERROR: /opt/tf/tensorflow-master/tensorflow/core/kernels/BUILD:3044:1: la compilación C++ de la regla '//tensorflow/core/kernels:matrix_square_root_op' falló (Salida 4) gcc: error interno del compilador: Eliminado (programa
cc1plus)
Este error es que la carga de la CPU es demasiado grande y es necesario agregar una línea de código

# 生成swap镜像文件
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
# 对该镜像文件格式化
sudo mkswap /mnt/512Mb.swap
# 挂载该镜像文件 
sudo swapon /mnt/512Mb.swap

O este error de descarga de @aws.
Veo que algunos bloggers en csdn tienen una solución para ir a la carpeta temporal para eliminar el archivo y descargarlo nuevamente, pero lo encontré inútil aquí. La solución aquí es ingresar un comando antes de ejecutar bazel:

sed -i '\@https://github.com/aws/aws-sdk-cpp/archive/1.5.8.tar.gz@aws' tensorflow/workspace.bzl

La URL del comando es la dirección del archivo real que se va a descargar, ya que es posible que se hayan cambiado algunas direcciones.

La compilación de bazel aquí está completa

4. Después de compilar, el modelo se puede comprimir, que también es una línea de código, in_graph es la ruta del modelo de entrada, las salidas no se mueven, out_graph es la ruta del modelo de salida y las transformaciones se pueden llenar con quantize_weights. 32 bits a 8 bits, y este también es el caso. El paso más efectivo del método; Veo que algunos bloggers primero compilan el resumen y luego imprimen los nodos de entrada y salida, y luego ingresan muchos parámetros y eliminan algunos nodos No hay más reducción en el tamaño del modelo, así que eso es todo.

bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=../model/ctpn.pb    --outputs='output_node_name'   --out_graph=../model/quantized_ctpn.pb   --transforms='quantize_weights'

Al final, se redujo de 68 m a 17 m, con una tasa de reducción del 75 %. Los resultados de medición reales son básicamente los mismos, y este método sigue siendo muy útil.

Supongo que te gusta

Origin blog.csdn.net/u013837919/article/details/86770669
Recomendado
Clasificación