2017-06-12 49 views
1

随着CNTK我已经建立网络与2输入神经元1输出神经元。 在训练文件中的一行看起来像CNTK&python:如何将输入数据传递给eval func?

|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

这是最防守的做法。如果您在使用V2构造指定网络时忽略了这些内容,则可以原谅CNTK。不确定使用V1代码创建的网络。

基本上你需要为每个轴的一对括号的。 Brainscript中存在哪些轴?有一个批处理轴,一个序列轴,然后是网络的静态轴。你有一点维的数据,以便指下列应该工作: input_data= np.array([[[1.82, 3.57]]], dtype=np.float32) 这指定了一个批次一个序列,长度为一的,含有两个元件中的一个一维矢量。您也可以尝试省略最外括号并查看您是否获得了相同的结果。

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

p = z.find_by_name('p')

应该创建一个CNTK功能只需要为了计算预测的功能。

+0

谢谢你的支持,但它没有奏效。我得到的错误消息: ValueError异常:此数值为1点所需的参数 '输入(' 特征,[#],[2]) '所请求的输出(一个或多个) '输出(' ERR',[],[ ]),输出('lr',[],[]),输出('p',[#,],[1])'依赖于,尚未提供。 –

+0

这个错误是因为V1模型还保存了依赖于错误消息中提及的'err'和'lr'输出等标签的东西。我会更新我的答案,如何避免这个错误。 –