CNTK& python:如何将输入数据传递给eval函数?

时间:2017-06-12 11:41:22

标签: python cntk

使用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)

1 个答案:

答案 0 :(得分:1)

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

基本上你需要为每个轴提供一对支撑。 Brainscript中存在哪些轴?有一个批处理轴,一个顺序轴,然后是网络的静态轴。您有一维数据,这意味着以下应该工作: wait() 这指定了一个长度为1的序列,其中包含一个2d元素的1d向量。您也可以尝试省略最外面的大括号,看看是否得到相同的结果。

根据以下评论中的更多信息

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

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

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