CNTK python API:如何从训练过的模型中获取预测结果?
问题描述:
我有一个训练有素的模型,我使用CNTK.load_model()
函数加载。我正在查看CNTK git repo上的MNIST Tutorial作为模型评估代码的参考。我创建了一个数据读取器(这是一个MinibatchSource
对象),并试图运行model.eval(mb)
其中mb = minibatch_source.next_minibatch(...)
(类似this answer)CNTK python API:如何从训练过的模型中获取预测结果?
但是,我发现了以下错误消息
Traceback (most recent call last):
File "LID_test.py", line 162, in <module>
test_and_evaluate()
File "LID_test.py", line 159, in test_and_evaluate
predictions = model.eval(mb)
File "/home/t-asbahe/anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/ops/functions.py", line 228, in eval
_, output_map = self.forward(arguments, self.outputs, device=device, as_numpy=as_numpy)
File "/home/t-asbahe/anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/utils/swig_helper.py", line 62, in wrapper
result = f(*args, **kwds)
File "/home/t-asbahe/anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/ops/functions.py", line 354, in forward
None, device)
File "/home/t-asbahe/anaconda3/envs/cntk-py35/lib/python3.5/site-packages/cntk/utils/__init__.py", line 393, in sanitize_var_map
if len(arguments) < len(op_arguments):
TypeError: object of type 'Variable' has no len()
我没有input_variable
在我的模型中命名为'Variable'
,我看不出有任何理由可以得到此错误。
PS:我的输入是稀疏的输入(一白热化)
答
您有几种选择:
-
传递的一组数据作为numpy的阵列(例如在CNTK 202教程),其中onehot数据作为numpy数组传入。
PRED = model.eval({model.arguments [0]:[onehot]})
-
阅读minibatch数据并将其传递给eval函数
eval_input_map = {输入:reader_eval。 streams.features}
eval_data = reader_eval.next_minibatch(eval_minibatch_size, input_map = eval_input_map) MYDATA = eval_data [输入]。价值 预测= model.eval(MYDATA)