使用CNTK我创建了一个网络,其中 2个输入神经元和 1个输出神经元。 训练文件中的一行看起来像
|features 1.567518 2.609619 |labels 1.000000
然后用脑脚本训练网络。现在我想使用网络来预测值。例如:输入数据为[1.82,3.57]。网络的输出是什么?
我用以下代码尝试过Python,但在这里我是新手。代码不起作用。所以我的问题是:如何将输入数据[1.82,3.57]传递给eval函数?
在stackoverflow上有一些提示,here和here,但这对我来说太抽象了。
谢谢。
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)
答案 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函数,只需要这些函数来计算预测。