• Python神经网络集成技术Guide指南


    Python神经网络集成技术Guide指南

    本指南将介绍如何加载一个神经网络集成系统并从Python运行推断。
    提示

    所有框架的神经网络集成系统运行时接口都是相同的,因此本指南适用于所有受支持框架(包括TensorFlow、PyTorch、Keras和TorchScript)中的模型。

    打包神经网络集成系统             

    有关如何在所有支持的框架中创建Neuropod模型的示例,请参见基本介绍指南。             

    打包一个神经网络集成系统

    from neuropod.loader import load_neuropod

    neuropod = load_neuropod(PATH_TO_MY_MODEL)

    还可以使用load_ernood作为上下文管理器:

    from neuropod.loader import load_neuropod

    with load_neuropod(PATH_TO_MY_MODEL) as neuropod:

        # Do something here

    Pass

    选项             

    还可以在加载模型时提供运行时选项。             

    要选择在哪个设备上运行模型,可以提供一个visible_gpu参数。             

    这是这个神经网络集成系统应该运行的GPU的索引(如果有的话)。可以是无整数,也可以是非负整数。将此设置为“无”将尝试在CPU上运行此模型。

    # Run on CPU

    neuropod = load_neuropod(PATH_TO_MY_MODEL, visible_gpu=None)

    # Run on the second GPU

    neuropod = load_neuropod(PATH_TO_MY_MODEL, visible_gpu=1)

    获取模型的输入和输出             

    模型的输入和输出通过输入和输出属性可用。

    with load_neuropod(PATH_TO_MY_MODEL) as neuropod:

        # This is a list of dicts containing the "name", "dtype", and "shape"

        # of the input

    print(neuropod.inputs, neuropod.outputs)

    推论             

    模型的推理方法用于运行推理。此方法的输入是将输入名称映射到值的dict。这必须与加载模型的neuropod配置中的输入规范匹配。

    提示

    这个dict中的所有键必须是字符串,所有值必须是numpy数组。

    infer的输出是将输出名称映射到值的dict。对其进行检查,以确保其与已加载模型的neuropod配置中的规范匹配。这个dict中的所有键都是字符串,所有值都是numpy数组。

    x = np.array([1, 2, 3, 4])

    y = np.array([5, 6, 7, 8])

    with load_neuropod(ADDITION_MODEL_PATH) as neuropod:

      results = neuropod.infer({"x": x, "y": y})

      # array([6, 8, 10, 12])

      print results["out"]

    序列化

    import numpy as np

    from neuropod import neuropod_native

    # An array to serialize

    tensor = np.arange(5)

    # Convert a numpy array to a NeuropodTensor and serialize it

    serialized_bytes = neuropod_native.serialize(tensor)

    # Deserialize a string of bytes to a NeuropodTensor

    # (and return it as a numpy array)

    deserialized = neuropod_native.deserialize(serialized_bytes)

    # array([0, 1, 2, 3, 4])

    print(deserialized)

    序列化代码在NUMPY数组和C++ NoopPotoStor对象之间转换(以零拷贝方式)。然后,使用C++序列化功能来序列化/反序列化。

    提示

    序列化和反序列化工作在Python和C++之间。这意味着可以在C++中序列化张量,在Python中反序列化,反之亦然。

    Warning

    这个API的目标是支持临时序列化。不能保证向后兼容,因此此API不应用于数据的长期存储。

  • 相关阅读:
    跨站的艺术-XSS Fuzzing 的技巧
    腾讯云数据库团队:PostgreSQL TOAST技术理解
    Git commit message和工作流规范
    前端识别验证码思路分析
    Akamai在内容分发网络中的算法研究(翻译总结)
    Nginx网站使用CDN之后禁止用户真实IP访问的方法
    常用机器性能评估工具
    解决关于ArcGIS10.2服务手动启动的问题
    林业通用平台上线
    土地承包经营权地块示意图打印
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/13138917.html
Copyright © 2020-2023  润新知