2017-01-18 6 views
0

CNTKLibrary-2.0の例に従って、評価のミニバージョンを確認する簡単なケースを記述しています。コードは次のようになります。しかし、 "Evaluate"関数を呼び出すと、アクセス違反例外が発生します。そのような例外についての洞察CNTKLibrary-2.0 "System.AccessViolationException:保護されたメモリを読み書きしようとしました。"

const string outputName = "r1"; 
const string inputName = "qu1fea"; 
var inputDataMap = new Dictionary<Variable, Value>(); 

// Load the model. 
Function modelFunc = Function.LoadModel("D:/deep_cross/ModelEvaluation_cpp/models/dfsr.cn", device); 
Console.WriteLine(modelFunc.Outputs.Count); 
for (int i = 0; i < modelFunc.Outputs.Count; i++) 
{ 
    Console.WriteLine(modelFunc.Outputs[i].GetName()); 
} 

// Get output variable based on name 
Variable outputVar = modelFunc.Outputs.Where(variable => string.Equals(variable.Name, outputName)).Single(); 

// Get input variable. The model has only one single input. 
// The same way described above for output variable can be used here to get input variable by name. 
Console.WriteLine(modelFunc.Arguments.Count); 
for (int i = 0; i < modelFunc.Arguments.Count; i++) 
{ 
    Console.WriteLine(modelFunc.Arguments[i].GetName()); 
} 
Variable inputVar = modelFunc.Arguments.Where(Variable => string.Equals(Variable.Name, inputName)).Single(); 
var outputDataMap = new Dictionary<Variable, Value>(); 
Value inputVal, outputVal; 
List<List<float>> outputBuffer; 

// Get shape data for the input variable 
NDShape inputShape = inputVar.Shape; 

// Create Value for the batch data. 
inputVal = Value.CreateBatch(inputVar.Shape, samples, device); 

// Create input data map. 
inputDataMap.Add(inputVar, inputVal); 

// Create ouput data map. Using null as Value to indicate using system allocated memory. 
// Alternatively, create a Value object and add it to the data map. 
outputDataMap.Add(outputVar, null); 

// Evaluate the model against the batch input 
modelFunc.Evaluate(inputDataMap, outputDataMap, device); 

// Retrieve the evaluation result. 
outputBuffer = new List<List<float>>(); 
outputVal = outputDataMap[outputVar]; 
outputVal.CopyVariableValueTo(outputVar, outputBuffer); 

// Output result 
PrintOutput(outputVar.Shape.TotalSize, outputBuffer); 
+0

あなたは例外を投稿できますか? – mcarlin

+0

問題を報告していただきありがとうございます。我々はそれを調べている。例外は、System.AccessViolationExceptionです。保護されたメモリの読み取りまたは書き込みを試みた。 –

答えて

0

例外はバグが原因で修正されました。 CNTK Nugetパッケージ2.0-Beta9.0を公開しました。試してみてください。

ご迷惑をお掛けして申し訳ございません。

ありがとう、

関連する問題