【问题标题】:CNTK & python: How to pass input data to the eval func?CNTK & python:如何将输入数据传递给 eval 函数?
【发布时间】:2017-06-12 11:41:22
【问题描述】:

使用 CNTK,我创建了一个具有 2 个输入神经元1 个输出神经元的网络。 训练文件中的一行看起来像

|features 1.567518 2.609619 |labels 1.000000 

然后用大脑脚本训练网络。现在我想使用网络来预测值。例如:输入数据为 [1.82, 3.57]。网络的输出是什么?

我已经使用以下代码尝试了 Python,但在这里我是新手。代码不起作用。所以我的问题是:如何将输入数据 [1.82, 3.57] 传递给 eval 函数?

在 stackoverflow 上有一些提示,herehere,但这对我来说太抽象了。

谢谢。

import cntk as ct
import numpy as np

z = ct.load_model("LR_reg.dnn", ct.device.cpu())

input_data= np.array([1.82, 3.57], dtype=np.float32)

pred = z.eval({ z.arguments[0] : input_data })

print(pred)

【问题讨论】:

    标签: python cntk


    【解决方案1】:

    这是最具防御性的做法。如果您在使用 V2 构造指定网络时省略其中的一些内容,CNTK 可以原谅。不确定使用 V1 代码创建的网络。

    基本上每个轴都需要一对大括号。 Brainscript 中存在哪些轴?有一个批处理轴,一个序列轴,然后是网络的静态轴。您有一维数据,这意味着以下内容应该有效: input_data= np.array([[[1.82, 3.57]]], dtype=np.float32) 这指定了一批长度为 1 的序列,其中包含一个由两个元素组成的 1d 向量。您也可以尝试省略最外面的大括号,看看是否得到相同的结果。

    更新根据下面评论中的更多信息,我们不应该忘记 V1 代码还保存了计算损失和准确性等网络的部分。如果我们只提供功能,CNTK 会抱怨没有提供标签。有两种方法可以处理这个问题。一种可能性是提供一些假标签,以便网络可以评估这些辅助操作。另一种可能性是识别预测并使用它。如果预测在 V1 中被称为“p”,则此 python 代码

    p = z.find_by_name('p')

    应该创建一个 CNTK 函数,该函数只需要特征来计算预测。

    【讨论】:

    • 感谢您的回复,但没有成功。我收到错误消息:ValueError: Values for 1 required arguments 'Input('features', [#, ], [2])', that the requested output(s) 'Output('err', [], [] ), Output('lr', [], []), Output('p', [#, ], [1])' 依赖,未提供。
    • 此错误是因为 V1 模型还保存了依赖于标签的内容,例如错误消息中提到的 'err' 和 'lr' 输出。我将更新有关如何避免此错误的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多