用户定义的层在CNTK Python

我正在尝试使用CNTK的Python接口创建一个自定义层。我按照这个指南进行操作,但在我的类的__init__方法中一直抛出TypeError异常。请注意,我只是复制粘贴了链接指南中的示例代码。

import cntk as Cimport numpy as npclass MySigmoid(UserFunction):    def __init__(self, arg, name='MySigmoid'):        super(MySigmoid, self).__init__([arg], name=name)    def forward(self, argument, device=None, outputs_to_retain=None):        sigmoid_x = 1 / (1 + np.exp(-argument))        return sigmoid_x, sigmoid_x    def backward(self, state, root_gradients):        sigmoid_x = state        return root_gradients * sigmoid_x * (1 - sigmoid_x)    def infer_outputs(self):        return [output_variable(self.inputs[0].shape, self.inputs[0].dtype,            self.inputs[0].dynamic_axes)]    @staticmethod    def deserialize(inputs, name, state):        return MySigmoid(inputs[0], name)model = C.layers.Sequential(C.layers.Dense(10), C.user_function(layers_extensions.MySigmoid(3)))

这是我得到的错误信息:

  File "...\layers_extensions.py", line 30, in __init__    super(MySigmoid, self).__init__([arg], name=name)  File "c:\repos\cntk\bindings\python\cntk\ops\functions.py", line 1286, in __init__    super(UserFunction, self).__init__(inputs, name)  File "c:\repos\cntk\bindings\python\cntk\ops\functions.py", line 109, in __init__    super(Function, self).__init__(*args, **kwargs)  File "c:\repos\cntk\bindings\python\cntk\cntk_py.py", line 1698, in __init__    this = _cntk_py.new_Function(_self, *args)TypeError: cannot convert list element to CNTK::Variable

我尝试在谷歌上搜索这个错误,但没有任何结果。你能帮我吗?


回答:

由于某种原因,CNTK在forward(...)方法中将argument参数作为列表传递,即使它是一个单一参数。我最终通过从列表中取第一个元素使其工作。你可以在这里找到工作示例。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注