static void Main(string[] args) { DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); var value = GetMinibatchData().data.DeepClone(); // var value = GetValue(); GC.Collect(); Console.WriteLine(value.IsValid); // => true Console.WriteLine(string.Join(", ", value.Shape.Dimensions)); // => exception occurs }
public void ValueObject_test02() { DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); var value = GetMinibatchData().data.DeepClone(); // var value = GetValue(); GC.Collect(); Assert.True(value.IsValid); Assert.Equal(3, value.Shape.Dimensions.Last()); }
public void ValueObject_test0() { DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); var value = GetMinibatchData().data; GC.Collect(); Assert.True(value.IsValid); Action testCode = () => { var lst = value.Shape.Dimensions.ToString(); }; var ex = Record.Exception(testCode); Assert.True(ex.Message.StartsWith("This Value object is invalid and can no longer be accessed.")); }
public void ValueObject_test0() { DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); var value = GetMinibatchData().data; GC.Collect(); Assert.True(value.IsValid); Action testCode = () => { var lst = value.Shape.Dimensions.ToString(); }; var ex = Record.Exception(testCode); Assert.False(value.IsValid); }
protected override void EndProcessing() { DeviceDescriptor device; if (CPUDevice) { device = DeviceDescriptor.CPUDevice; } else if (DefaultDevice) { device = DeviceDescriptor.UseDefaultDevice(); } else { device = DeviceDescriptor.GPUDevice(GPUDeviceId); } WriteObject(DeviceDescriptor.TrySetDefaultDevice(device)); }
public void ValueObject_test0() { DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); var value = GetMinibatchData().data; GC.Collect(); Assert.True(value.IsValid); var ex = Assert.Throws <System.ApplicationException>(() => { var lst = value.Shape.Dimensions.ToList(); }); var result = $"This Value object is invalid and can no longer be accessed." + $"This usually happens when a temporary Value object returned by the CNTK library is not cloned and " + $"accessed later after it has been erased by the library. The Value objects created inside and " + $"returned by the library from APIs like Forward, Backward etc. are temporary and are only guaranteed " + $"to be valid until the next Forward/Backward call. If you want to access the Values later, you must " + $"explicitly clone them."; // Assert.True(result); }
public MsgPackSamplerTest() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }
public TrainingSessionTest() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }
public MinibatchDataTest() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }
public NodeGroupText() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }
public ConverterTest() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }
public NDArrayViewTest() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }
public CompositeFunctionTest() { UnmanagedDllLoader.Load(@"..\..\..\..\lib"); DeviceDescriptor.TrySetDefaultDevice(DeviceDescriptor.CPUDevice); }