CNTK从入门到深入研究(9) - CNTK工程结构(Extensibility&Reader Plugins)

本文介绍了CNTK的扩展性(Extensibility)和Reader Plugins。Extensibility通过C++CLI封装C++的EvalDll,形成.Net Assembly,方便在Python和.Net平台上使用。Reader Plugins是实现特定数据源接口的动态库,CNTK提供了IDataReader接口和简化版的Reader类以支持自定义数据读取。CNTK的扩展性还包括训练方法、网络节点和模型的扩展,旨在为开发者提供便利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在上一篇文章中,已经说明过CNTK的工程中涉及的代码实现的共有三部分(CNTK Core、Extensibility扩展性、 Reader Plugins),并且已经针对第一部分的CNTK Core 做了一些介绍,本篇文章将针对剩余的两部分Extensibility和Reader Plugins的工程结构进行说明。

Extensibility扩展性

这里写图片描述

Extensibility在这里解读为扩展性,CNTK作为C++工程,在目前主流通过Python、.Net等更高级语言平台下的数据分析略显得有些不方便。毕竟目前做数据的主流还在R语言以及Python上。Extensibility这部分主要其实是实现了一个Wrapper的库将C++的EvalDll通过C++\CLI封装成.Net的Assembly。之后CSEvalClient其实是一个通过C#集成CNTK的一个例子。

Extensibility目前只是做了一些简单封装。封装的本质是将CNTK Core中的EvalDLL做一些包装使其将IEvaluateModel<ElemType>接口暴露出来供第三方调用而已。这里官方给出了针对.Net的封装,也是抛砖引玉的过程,证明其可扩展。需要调用或者封装的接口如下:

// IEvaluateModel - interface used by decoders and other components that need just evaluator functionality in DLL form
template <class ElemType>
class IEvaluateModel // Evaluate Model Interface
{
public:
    virtual void Init(const std::string& config) = 0;
    virtual void Destroy() = 0;

    virtual void CreateNetwork(const std::string& networkDescription) = 0;
    virtual void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup) = 0;
    virtual void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName) = 0;
    virtual void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs) = 0;
    virtual void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs) = 0;
    virtual void ResetState() = 0;
};

通过调用GetEvalF或者是GetEvalD即可获得上述描述接口的一个实例,然后通过配置文件的内容加载网络模型后,调用Evaluate方法即可。下面的内容指出获得IEvaluateModel实例的接口:

// GetEval - get a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值