diff --git a/.gitattributes b/.gitattributes
index 352d5ac595e..8cb4c160be0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -65,6 +65,7 @@ Makefile text
*.asax text
*.h text
+*.hpp text
*.cpp text
*.cc text
*.cu text
diff --git a/.gitignore b/.gitignore
index cb46296bb19..e1485b5b8c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -224,6 +224,7 @@ bindings/python/cntk/cntk_py.py
bindings/python/cntk/libs/
bindings/python/cntk/cntk_py_wrap.cpp
bindings/python/cntk/cntk_py_wrap.h
+bindings/python/cntk/VERSION
bindings/python/dist/
bindings/python/doc/cntk.*.rst
bindings/python/doc/cntk.rst
@@ -332,7 +333,8 @@ Manual/.ipynb_checkpoints
Examples/Text/LightRNN/LightRNN/*.so
# other
-/packages
+packages/
/CNTK.VC.db
/CNTK.VC.VC.opendb
/Local
+.vs/
diff --git a/CNTK.Common.props b/CNTK.Common.props
index 3eeeb3b5d1e..7abf7018555 100644
--- a/CNTK.Common.props
+++ b/CNTK.Common.props
@@ -30,7 +30,34 @@
false
true
- 2.3.1
+
+
+
+
+ 2.4
+
+
+
+ false
+
+
+ false
+ true
+
+ $(BUILD_CNTK_VERSION)
+ true
+
+
+ $(CntkVersion)
+ $(CntkVersionBanner)+
+
+
+ $(CntkVersion)
$(CntkComponentVersion)d
diff --git a/CNTK.Cpp.props b/CNTK.Cpp.props
index 0d33a3f5117..6dadd8f3ad6 100644
--- a/CNTK.Cpp.props
+++ b/CNTK.Cpp.props
@@ -3,19 +3,10 @@
- 8.0
- 7.5
-
-
- "c:\Program Files\NVIDIA Corporation\GDK\gdk_win7_amd64_release\nvml\include"
-
-
-
- "c:\Program Files\NVIDIA Corporation\GDK\gdk_win7_amd64_release\nvml\lib"
-
+ 9.0
%ProgramW6432%\NVIDIA Corporation\NVSMI\nvml.dll
- c:\local\bindrop\NVSMI\nvml.dll
+ c:\local\nvsmi9\NVSMI\nvml.dll
false
true
@@ -65,16 +56,22 @@
MKL
- $(MKLML_PATH)\include
+ $(MKL_PATH)\include
USE_MKL
Cntk.PerformanceProfiler-$(CntkComponentVersion).lib;$(ReaderLibs)
- MKL-ML Library
- $(MKLML_PATH)\lib
+ MKL Library
+ $(MKL_PATH)\lib
mklml.lib
mklml.dll
$(MathLibraryPath)\*.dll
- $(OutDir)mklml.lib;$(OutDir)libiomp5md.dll;
+ false
+
+ $(MathLinkLibrary);mkldnn.lib
+ $(MathDelayLoad);mkldnn.dll
$(ZLIB_PATH)\include;$(ZLIB_PATH)\lib\libzip\include;
@@ -109,31 +106,19 @@
libprotobufd.lib
-
- $(CUDA_PATH_V8_0)
- cudart64_80.dll
- cublas64_80.dll;cusparse64_80.dll;curand64_80.dll;$(CudaRuntimeDll)
+
+ $(CUDA_PATH_V9_0)
+ cudart64_90.dll
+ cublas64_90.dll;cusparse64_90.dll;curand64_90.dll;$(CudaRuntimeDll)
$(CNTK_CUDA_CODEGEN_DEBUG)
compute_30,sm_30
-
- $(CNTK_CUDA_CODEGEN_RELEASE)
- compute_30,sm_30;compute_35,sm_35;compute_50,sm_50;compute_60,sm_60;compute_61,sm_61
-
-
-
- $(CUDA_PATH_V7_5)
- cudart64_75.dll
- cublas64_75.dll;cusparse64_75.dll;curand64_75.dll;$(CudaRuntimeDll)
- $(CNTK_CUDA_CODEGEN_DEBUG)
- compute_30,sm_30
-
$(CNTK_CUDA_CODEGEN_RELEASE)
- compute_30,sm_30;compute_35,sm_35;compute_50,sm_50
+ compute_30,sm_30;compute_35,sm_35;compute_50,sm_50;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70
@@ -144,11 +129,21 @@
$(VCTargetsPath)\BuildCustomizations
+
+ v141
+
+
+
+ $(HALIDE_PATH)
+ $(HALIDE_PATH)\include;
+ $(HALIDE_PATH)\Release;
+ halide.lib
+
+
$(DebugBuild)
- v140
Unicode
$(ReleaseBuild)
$(DebugBuild)
@@ -156,9 +151,10 @@
- CNTK_COMPONENT_VERSION="$(CntkComponentVersion)"
+ CNTK_VERSION="$(CntkVersion)";CNTK_VERSION_BANNER="$(CntkVersionBanner)";CNTK_COMPONENT_VERSION="$(CntkComponentVersion)"
%(PreprocessorDefinitions);HAS_MPI=1
+ %(PreprocessorDefinitions);CUDA_NO_HALF;__CUDA_NO_HALF_OPERATORS__
diff --git a/CNTK.sln b/CNTK.sln
index 2787d019300..6d11d62dd8f 100644
--- a/CNTK.sln
+++ b/CNTK.sln
@@ -1,21 +1,8 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2024
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTK", "Source\CNTK\CNTK.vcxproj", "{E6F26F9A-FF64-4F0A-B749-CD309EE357EE}"
- ProjectSection(ProjectDependencies) = postProject
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
- {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {EB2BE26F-6BD4-4274-971F-86D080779DD1}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
- {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
- {DE3C54E5-D7D0-47AF-A783-DFDCE59E7937} = {DE3C54E5-D7D0-47AF-A783-DFDCE59E7937}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{D45DF403-6781-444E-B654-A96868C5BE68}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Reader Plugins", "Reader Plugins", "{33EBFE78-A1A8-4961-8938-92A271941F94}"
@@ -130,14 +117,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LSTM", "LSTM", "{19EE975B-2
Tests\EndToEndTests\Speech\DNN\DiscriminativePreTraining\macros.txt = Tests\EndToEndTests\Speech\DNN\DiscriminativePreTraining\macros.txt
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ComputationNetworkLib", "Source\ComputationNetworkLib\ComputationNetworkLib.vcxproj", "{928ABD1B-4D3B-4017-AEF1-0FA1B4467513}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SGDLib", "Source\SGDLib\SGDLib.vcxproj", "{DE3C54E5-D7D0-47AF-A783-DFDCE59E7937}"
- ProjectSection(ProjectDependencies) = postProject
- {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
- {16F14058-B116-49D9-8BA0-209F3AFFE849} = {16F14058-B116-49D9-8BA0-209F3AFFE849}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ParallelTraining", "ParallelTraining", "{5E666C53-2D82-49C9-9127-3FDDC321C741}"
ProjectSection(SolutionItems) = preProject
Tests\EndToEndTests\ParallelTraining\SimpleMultiGPU.cntk = Tests\EndToEndTests\ParallelTraining\SimpleMultiGPU.cntk
@@ -208,8 +187,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kaldi2Reader", "Kaldi2Reade
Source\Readers\Kaldi2Reader\utterancesourcemulti.h = Source\Readers\Kaldi2Reader\utterancesourcemulti.h
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SequenceTrainingLib", "Source\SequenceTrainingLib\SequenceTrainingLib.vcxproj", "{EAD17188-072C-4726-B840-A769C36DAD1B}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Truncated", "Truncated", "{88F85A64-105D-4CDA-8199-B7A312FC8A27}"
ProjectSection(SolutionItems) = preProject
Tests\EndToEndTests\Speech\LSTM\Truncated\baseline.cpu.txt = Tests\EndToEndTests\Speech\LSTM\Truncated\baseline.cpu.txt
@@ -272,17 +249,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DiscriminativePreTraining",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{6F19321A-65E7-4829-B00C-3886CD6C6EDE}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathTests", "Tests\UnitTests\MathTests\MathTests.vcxproj", "{4701E678-5E6F-470D-B348-9CD1A2C095D1}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ActionsLib", "Source\ActionsLib\ActionsLib.vcxproj", "{EB2BE26F-6BD4-4274-971F-86D080779DD1}"
- ProjectSection(ProjectDependencies) = postProject
- {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SequenceTraining", "SequenceTraining", "{BB8B9FC5-C4B3-477F-80E2-665DC8E431BD}"
ProjectSection(SolutionItems) = preProject
Tests\EndToEndTests\Speech\DNN\SequenceTraining\add_layer.mel = Tests\EndToEndTests\Speech\DNN\SequenceTraining\add_layer.mel
@@ -347,94 +313,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Image", "Image", "{9BDFA4BE
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Speech", "Speech", "{3CE841C0-02E5-46DB-B401-6F8784880173}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReaderTests", "Tests\UnitTests\ReaderTests\ReaderTests.vcxproj", "{A4FC3467-4787-43E8-BBC0-D79AE56B468D}"
- ProjectSection(ProjectDependencies) = postProject
- {9BD0A711-0BBD-45B6-B81C-053F03C26CFB} = {9BD0A711-0BBD-45B6-B81C-053F03C26CFB}
- {33D2FD22-DEF2-4507-A58A-368F641AEBE5} = {33D2FD22-DEF2-4507-A58A-368F641AEBE5}
- {7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
- {7FE16CBE-B717-45C9-97FB-FA3191039568} = {7FE16CBE-B717-45C9-97FB-FA3191039568}
- {7B7A51ED-AA8E-4660-A805-D50235A02120} = {7B7A51ED-AA8E-4660-A805-D50235A02120}
- {E6646FFE-3588-4276-8A15-8D65C22711C1} = {E6646FFE-3588-4276-8A15-8D65C22711C1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EvalDll", "Source\EvalDll\EvalDll.vcxproj", "{482999D1-B7E2-466E-9F8D-2119F93EAFD9}"
- ProjectSection(ProjectDependencies) = postProject
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {EB2BE26F-6BD4-4274-971F-86D080779DD1}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageWriterDll", "Source\ImageWriterDll\ImageWriterDll.vcxproj", "{2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}"
- ProjectSection(ProjectDependencies) = postProject
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Math", "Source\Math\Math.vcxproj", "{60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}"
- ProjectSection(ProjectDependencies) = postProject
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {B3DD765E-694E-4494-BAD7-37BBF2942517} = {B3DD765E-694E-4494-BAD7-37BBF2942517}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathCUDA", "Source\Math\MathCUDA.vcxproj", "{B3DD765E-694E-4494-BAD7-37BBF2942517}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibSVMBinaryReader", "Source\Readers\LibSVMBinaryReader\LibSVMBinaryReader.vcxproj", "{D667AF32-028A-4A5D-BE19-F46776F0F6B2}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BinaryReader", "Source\Readers\BinaryReader\BinaryReader.vcxproj", "{1D5787D4-52E4-45DB-951B-82F220EE0C6A}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSSMReader", "Source\Readers\DSSMReader\DSSMReader.vcxproj", "{014DA766-B37B-4581-BC26-963EA5507931}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTKMLFReader", "Source\Readers\HTKMLFReader\HTKMLFReader.vcxproj", "{33D2FD22-DEF2-4507-A58A-368F641AEBE5}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LMSequenceReader", "Source\Readers\LMSequenceReader\LMSequenceReader.vcxproj", "{9A2F2441-5972-4EA8-9215-4119FCE0FB68}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LUSequenceReader", "Source\Readers\LUSequenceReader\LUSequenceReader.vcxproj", "{62836DC1-DF77-4B98-BF2D-45C943B7DDC6}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SparsePCReader", "Source\Readers\SparsePCReader\SparsePCReader.vcxproj", "{CE429AA2-3778-4619-8FD1-49BA3B81197B}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UCIFastReader", "Source\Readers\UCIFastReader\UCIFastReader.vcxproj", "{E6646FFE-3588-4276-8A15-8D65C22711C1}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathPerformanceTests", "Tests\UnitTests\MathPerformanceTests\MathPerformanceTests.vcxproj", "{668BEED5-AC07-4F35-B3AE-EE65A7F9C976}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EndToEndTests", "EndToEndTests", "{6E565B48-1923-49CE-9787-9BBB9D96F4C5}"
ProjectSection(SolutionItems) = preProject
Tests\EndToEndTests\run-test-common = Tests\EndToEndTests\run-test-common
@@ -563,20 +441,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{83BFF5BF
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensibility", "Extensibility", "{60F87E25-BC87-4782-8E20-1621AAEBB113}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EvalWrapper", "Source\Extensibility\EvalWrapper\EvalWrapper.vcxproj", "{EF766CAE-9CB1-494C-9153-0030631A6340}"
- ProjectSection(ProjectDependencies) = postProject
- {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{BD46CE02-3740-4526-80F6-CC7973B953E5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Speech", "Speech", "{FB7AF7B9-6BEA-459F-94D9-94D53916D2B6}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReaderLib", "Source\Readers\ReaderLib\ReaderLib.vcxproj", "{F0A9637C-20DA-42F0-83D4-23B4704DE602}"
- ProjectSection(ProjectDependencies) = postProject
- {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AN4", "AN4", "{AC7BA8D3-B4C8-42A4-8507-B359BB6D49E8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FeedForward", "FeedForward", "{A17AC914-C539-4B47-A80F-9BD25C64E2A0}"
@@ -603,32 +471,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LSTM", "LSTM", "{9F1F9C7C-2
Tests\EndToEndTests\Examples\Speech\AN4\LSTM\testcases.yml = Tests\EndToEndTests\Examples\Speech\AN4\LSTM\testcases.yml
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKBinaryReader", "Source\Readers\CNTKBinaryReader\CNTKBinaryReader.vcxproj", "{7FE16CBE-B717-45C9-97FB-FA3191039568}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKTextFormatReader", "Source\Readers\CNTKTextFormatReader\CNTKTextFormatReader.vcxproj", "{91973E60-A7BE-4C86-8FDB-59C88A0B3715}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTKDeserializers", "Source\Readers\HTKDeserializers\HTKDeserializers.vcxproj", "{7B7A51ED-AA8E-4660-A805-D50235A02120}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageReader", "Source\Readers\ImageReader\ImageReader.vcxproj", "{9BD0A711-0BBD-45B6-B81C-053F03C26CFB}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ModelExport", "ModelExport", "{08A05A9A-4E45-42D5-83FA-719E99C04A30}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Model0", "Model0", "{715C0E2D-6FF6-4B26-9E49-1C68920CFAF6}"
@@ -662,17 +504,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AlexNet", "AlexNet", "{2B10
Tests\EndToEndTests\Image\AlexNet\val_map.txt = Tests\EndToEndTests\Image\AlexNet\val_map.txt
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetworkTests", "Tests\UnitTests\NetworkTests\NetworkTests.vcxproj", "{CDA96AA3-3252-4978-A0BF-2ACD670823CB}"
- ProjectSection(ProjectDependencies) = postProject
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
- {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {EB2BE26F-6BD4-4274-971F-86D080779DD1}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Text", "Text", "{8656B71D-E24C-4AC2-8BE4-C07B415A3E15}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SequenceClassification", "SequenceClassification", "{E53E63A0-FAA9-4416-9AD1-08A8FB87FEE1}"
@@ -716,15 +547,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SLU", "SLU", "{181664AC-4C9
Tests\EndToEndTests\Text\SLU\testcases.yml = Tests\EndToEndTests\Text\SLU\testcases.yml
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Source\Common\Common.vcxproj", "{86883653-8A61-4038-81A0-2379FAE4200A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CompositeDataReader", "Source\Readers\CompositeDataReader\CompositeDataReader.vcxproj", "{7B7A563D-AA8E-4660-A805-D50235A02120}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SparseDSSM", "SparseDSSM", "{1FB54750-B668-4AC3-966F-ED504020AC06}"
ProjectSection(SolutionItems) = preProject
Tests\EndToEndTests\Text\SparseDSSM\baseline.cpu.txt = Tests\EndToEndTests\Text\SparseDSSM\baseline.cpu.txt
@@ -838,40 +660,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BrainScript", "BrainScript"
Examples\SequenceToSequence\CMUDict\BrainScript\G2P.cntk = Examples\SequenceToSequence\CMUDict\BrainScript\G2P.cntk
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EvalTests", "Tests\UnitTests\EvalTests\EvalTests.vcxproj", "{82125DA1-1CD7-45B5-9281-E6AE7C287CB7}"
- ProjectSection(ProjectDependencies) = postProject
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommandEval", "Tests\UnitTests\CommandEval\CommandEval.vcxproj", "{731312A8-6DA3-4841-AFCD-57520BA1BF8E}"
- ProjectSection(ProjectDependencies) = postProject
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKv2LibraryDll", "Source\CNTKv2LibraryDll\CNTKv2LibraryDll.vcxproj", "{E5606ECE-48CA-4464-BB12-09D81D02B9EF}"
- ProjectSection(ProjectDependencies) = postProject
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
- {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D} = {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V2LibraryTests", "Tests\UnitTests\V2LibraryTests\V2LibraryTests.vcxproj", "{F4CC3AB2-0DB2-4281-929A-2E68E30F0F6E}"
- ProjectSection(ProjectDependencies) = postProject
- {33D2FD22-DEF2-4507-A58A-368F641AEBE5} = {33D2FD22-DEF2-4507-A58A-368F641AEBE5}
- {7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
- {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
- {E6F26F9A-FF64-4F0A-B749-CD309EE357EE} = {E6F26F9A-FF64-4F0A-B749-CD309EE357EE}
- {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
- {7B7A51ED-AA8E-4660-A805-D50235A02120} = {7B7A51ED-AA8E-4660-A805-D50235A02120}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scripts", "Scripts", "{68263A2F-1D5F-4C46-B5AF-2304B80FC3D4}"
ProjectSection(SolutionItems) = preProject
Scripts\pytest.ini = Scripts\pytest.ini
@@ -879,19 +667,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scripts", "Scripts", "{6826
Scripts\uci2ctf.py = Scripts\uci2ctf.py
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedEvalTests", "Tests\UnitTests\ManagedEvalTests\ManagedEvalTests.csproj", "{CC8DDDCB-D53A-4B30-8596-AEF1C493DB31}"
- ProjectSection(ProjectDependencies) = postProject
- {EF766CAE-9CB1-494C-9153-0030631A6340} = {EF766CAE-9CB1-494C-9153-0030631A6340}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BrainScriptTests", "Tests\UnitTests\BrainScriptTests\BrainScriptTests.vcxproj", "{9F999212-AFC5-4EAC-AA78-F7247D46C456}"
- ProjectSection(ProjectDependencies) = postProject
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
- {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TIMIT", "TIMIT", "{B586AA4C-0BB9-4629-9EDA-25FF2618AC9F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TrainSimpleNetwork", "TrainSimpleNetwork", "{C2102C39-BF5F-4B12-9C41-849D1ED35EE8}"
@@ -940,16 +715,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Truncated-Kaldi", "Truncate
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EvalClientTests", "EvalClientTests", "{05E45AF7-C069-4057-BC16-0A532D068CE4}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPEvalClientTest", "Tests\EndToEndTests\EvalClientTests\CPPEvalClientTest\CPPEvalClientTest.vcxproj", "{CCC07E8E-F33A-4AF7-9F60-93E2AA61C75E}"
- ProjectSection(ProjectDependencies) = postProject
- {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSEvalClientTest", "Tests\EndToEndTests\EvalClientTests\CSEvalClientTest\CSEvalClientTest.csproj", "{1C6E6C53-1AA7-4B69-913E-B97BB5A872CF}"
- ProjectSection(ProjectDependencies) = postProject
- {EF766CAE-9CB1-494C-9153-0030631A6340} = {EF766CAE-9CB1-494C-9153-0030631A6340}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IRMetric", "IRMetric", "{E844AB9A-A48F-4A99-9625-F528C5C46D83}"
ProjectSection(SolutionItems) = preProject
Tests\EndToEndTests\Text\IRMetric\baseline.linux.txt = Tests\EndToEndTests\Text\IRMetric\baseline.linux.txt
@@ -959,31 +724,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IRMetric", "IRMetric", "{E8
Tests\EndToEndTests\Text\IRMetric\testcases.yml = Tests\EndToEndTests\Text\IRMetric\testcases.yml
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PythonBindings", "bindings\python\PythonBindings.vcxproj", "{CD721536-CFD3-413E-A3D7-FB0FAF989635}"
- ProjectSection(ProjectDependencies) = postProject
- {9BD0A711-0BBD-45B6-B81C-053F03C26CFB} = {9BD0A711-0BBD-45B6-B81C-053F03C26CFB}
- {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
- {7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
- {20DEE94F-2802-40B1-B88B-22755A03AA48} = {20DEE94F-2802-40B1-B88B-22755A03AA48}
- {4CF94A50-0D17-432A-8B5A-8458E91C44A6} = {4CF94A50-0D17-432A-8B5A-8458E91C44A6}
- {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
- {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
- {1D5787D4-52E4-45DB-951B-82F220EE0C6A} = {1D5787D4-52E4-45DB-951B-82F220EE0C6A}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Multiverso", "Source\Multiverso\src\Multiverso.vcxproj", "{16F14058-B116-49D9-8BA0-209F3AFFE849}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MultiversoTests", "Source\Multiverso\Test\unittests\MultiversoTests.vcxproj", "{EC7157E9-A51F-4702-A5FD-8DAF88C7029F}"
- ProjectSection(ProjectDependencies) = postProject
- {16F14058-B116-49D9-8BA0-209F3AFFE849} = {16F14058-B116-49D9-8BA0-209F3AFFE849}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPEvalExtendedClientTest", "Tests\EndToEndTests\EvalClientTests\CPPEvalExtendedClientTest\CPPEvalExtendedClientTest.vcxproj", "{5D29C76D-648A-456F-920D-48230F2FB3C8}"
- ProjectSection(ProjectDependencies) = postProject
- {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorials", "Tutorials", "{305456F0-D9DE-4452-87BE-1C9F3C34C14F}"
ProjectSection(SolutionItems) = preProject
Tutorials\CNTK_101_LogisticRegression.ipynb = Tutorials\CNTK_101_LogisticRegression.ipynb
@@ -1429,16 +1169,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RNN", "RNN", "{6730F9BE-92A
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{1526F027-B007-472D-82E2-5A91340F3B62}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKLibraryCSBinding", "bindings\csharp\Swig\CNTKLibraryCSBinding.vcxproj", "{277EBD9D-2504-49FA-AC72-59D5515130C3}"
- ProjectSection(ProjectDependencies) = postProject
- {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CNTKLibraryManagedDll", "bindings\csharp\CNTKLibraryManagedDll\CNTKLibraryManagedDll.csproj", "{50EF9EE6-5018-453E-A063-F77044EF1A97}"
- ProjectSection(ProjectDependencies) = postProject
- {277EBD9D-2504-49FA-AC72-59D5515130C3} = {277EBD9D-2504-49FA-AC72-59D5515130C3}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Video", "Video", "{2A95B23C-D91E-4DF9-B8F0-5E997608AB65}"
ProjectSection(ProjectDependencies) = postProject
{277EBD9D-2504-49FA-AC72-59D5515130C3} = {277EBD9D-2504-49FA-AC72-59D5515130C3}
@@ -1454,14 +1184,361 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UCF11", "UCF11", "{5EDBCD1A
Examples\Video\DataSets\UCF11\ucf11_utils.py = Examples\Video\DataSets\UCF11\ucf11_utils.py
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GettingStarted", "GettingStarted", "{39C3C8CA-9A8A-4733-ADBB-3E19D0F52528}"
- ProjectSection(SolutionItems) = preProject
- Examples\Video\GettingStarted\README.md = Examples\Video\GettingStarted\README.md
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GettingStarted", "GettingStarted", "{39C3C8CA-9A8A-4733-ADBB-3E19D0F52528}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Video\GettingStarted\README.md = Examples\Video\GettingStarted\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{CB4566F1-6C8F-4270-83EE-F6AED84EBB2B}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Video\GettingStarted\Python\Conv3D_UCF11.py = Examples\Video\GettingStarted\Python\Conv3D_UCF11.py
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "V2LibraryTests", "V2LibraryTests", "{43ED3FD0-824C-4201-BD96-B824DF959ADC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GoogLeNet", "GoogLeNet", "{789B4AB8-40F1-4A37-823A-BC20D80C8BF1}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Classification\GoogLeNet\README.md = Examples\Image\Classification\GoogLeNet\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BN-Inception", "BN-Inception", "{CE223840-1DEE-4849-B530-F06BEE05BAA8}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Classification\GoogLeNet\BN-Inception\README.md = Examples\Image\Classification\GoogLeNet\BN-Inception\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InceptionV3", "InceptionV3", "{824766FA-759A-4466-9C39-13200D2D3159}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Classification\GoogLeNet\InceptionV3\README.md = Examples\Image\Classification\GoogLeNet\InceptionV3\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BrainScript", "BrainScript", "{BD07C9F3-B10C-4C21-82BC-4F249B65DDFE}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionBlocks.bs = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionBlocks.bs
+ Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.bs = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.bs
+ Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.cntk = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.cntk
+ Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\README.md = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BrainScript", "BrainScript", "{5CC403B9-2405-4FFB-A73B-DAE0DC986C76}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.bs = Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.bs
+ Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.cntk = Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.cntk
+ Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\InceptionLayers.bs = Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\InceptionLayers.bs
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensibility", "Extensibility", "{3BF56127-6F0F-41CF-BFCE-31165A0A5E73}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CPP", "CPP", "{7A27E076-296E-41A8-BA76-164071251372}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FCN", "FCN", "{58E3A257-91BE-4DC7-8991-70BFABE0A671}"
+ ProjectSection(SolutionItems) = preProject
+ Tests\EndToEndTests\Image\FCN\baseline.txt = Tests\EndToEndTests\Image\FCN\baseline.txt
+ Tests\EndToEndTests\Image\FCN\fcn.cntk = Tests\EndToEndTests\Image\FCN\fcn.cntk
+ Tests\EndToEndTests\Image\FCN\fcn8_to_fcn4.mel = Tests\EndToEndTests\Image\FCN\fcn8_to_fcn4.mel
+ Tests\EndToEndTests\Image\FCN\prepare_for_test.mel = Tests\EndToEndTests\Image\FCN\prepare_for_test.mel
+ Tests\EndToEndTests\Image\FCN\run-test = Tests\EndToEndTests\Image\FCN\run-test
+ Tests\EndToEndTests\Image\FCN\shared.bs = Tests\EndToEndTests\Image\FCN\shared.bs
+ Tests\EndToEndTests\Image\FCN\testcases.yml = Tests\EndToEndTests\Image\FCN\testcases.yml
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SaveBestModelPerCriterion", "SaveBestModelPerCriterion", "{C1189678-4FFA-4258-971F-3262B44FCA99}"
+ ProjectSection(SolutionItems) = preProject
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.cpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.cpu.txt
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.gpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.gpu.txt
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.cpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.cpu.txt
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.gpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.gpu.txt
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\cntkcv.cntk = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\cntkcv.cntk
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\run-test = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\run-test
+ Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\testcases.yml = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\testcases.yml
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Java", "Java", "{F37067BD-8BB1-4F93-AEF4-F37434613AE4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "selectivesearch", "selectivesearch", "{BEF04803-47B4-4322-B9D7-E10A8468E79F}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Detection\FastRCNN\selectivesearch\__init__.py = Examples\Image\Detection\FastRCNN\selectivesearch\__init__.py
+ Examples\Image\Detection\FastRCNN\selectivesearch\README.md = Examples\Image\Detection\FastRCNN\selectivesearch\README.md
+ Examples\Image\Detection\FastRCNN\selectivesearch\selectivesearch.py = Examples\Image\Detection\FastRCNN\selectivesearch\selectivesearch.py
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fastRCNN", "fastRCNN", "{C28E4FD7-F9A9-4473-8E5D-D209AF36A1E7}"
+ ProjectSection(SolutionItems) = preProject
+ Examples\Image\Detection\FastRCNN\fastRCNN\__init__.py = Examples\Image\Detection\FastRCNN\fastRCNN\__init__.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\imdb.py = Examples\Image\Detection\FastRCNN\fastRCNN\imdb.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\nms.py = Examples\Image\Detection\FastRCNN\fastRCNN\nms.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\pascal_voc.py = Examples\Image\Detection\FastRCNN\fastRCNN\pascal_voc.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\test.py = Examples\Image\Detection\FastRCNN\fastRCNN\test.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\timer.py = Examples\Image\Detection\FastRCNN\fastRCNN\timer.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\train_svms.py = Examples\Image\Detection\FastRCNN\fastRCNN\train_svms.py
+ Examples\Image\Detection\FastRCNN\fastRCNN\voc_eval.py = Examples\Image\Detection\FastRCNN\fastRCNN\voc_eval.py
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CNTKv2CSharp", "CNTKv2CSharp", "{B3B46744-DBB5-42C2-BAD7-9151D9486045}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProposalLayer", "ProposalLayer", "{3631994A-59E6-4CD6-99A4-6D332F8DABE2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTK", "Source\CNTK\CNTK.vcxproj", "{E6F26F9A-FF64-4F0A-B749-CD309EE357EE}"
+ ProjectSection(ProjectDependencies) = postProject
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
+ {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {EB2BE26F-6BD4-4274-971F-86D080779DD1}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
+ {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
+ {DE3C54E5-D7D0-47AF-A783-DFDCE59E7937} = {DE3C54E5-D7D0-47AF-A783-DFDCE59E7937}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ComputationNetworkLib", "Source\ComputationNetworkLib\ComputationNetworkLib.vcxproj", "{928ABD1B-4D3B-4017-AEF1-0FA1B4467513}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SGDLib", "Source\SGDLib\SGDLib.vcxproj", "{DE3C54E5-D7D0-47AF-A783-DFDCE59E7937}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
+ {16F14058-B116-49D9-8BA0-209F3AFFE849} = {16F14058-B116-49D9-8BA0-209F3AFFE849}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SequenceTrainingLib", "Source\SequenceTrainingLib\SequenceTrainingLib.vcxproj", "{EAD17188-072C-4726-B840-A769C36DAD1B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathTests", "Tests\UnitTests\MathTests\MathTests.vcxproj", "{4701E678-5E6F-470D-B348-9CD1A2C095D1}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ActionsLib", "Source\ActionsLib\ActionsLib.vcxproj", "{EB2BE26F-6BD4-4274-971F-86D080779DD1}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReaderTests", "Tests\UnitTests\ReaderTests\ReaderTests.vcxproj", "{A4FC3467-4787-43E8-BBC0-D79AE56B468D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9BD0A711-0BBD-45B6-B81C-053F03C26CFB} = {9BD0A711-0BBD-45B6-B81C-053F03C26CFB}
+ {33D2FD22-DEF2-4507-A58A-368F641AEBE5} = {33D2FD22-DEF2-4507-A58A-368F641AEBE5}
+ {7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
+ {7FE16CBE-B717-45C9-97FB-FA3191039568} = {7FE16CBE-B717-45C9-97FB-FA3191039568}
+ {7B7A51ED-AA8E-4660-A805-D50235A02120} = {7B7A51ED-AA8E-4660-A805-D50235A02120}
+ {E6646FFE-3588-4276-8A15-8D65C22711C1} = {E6646FFE-3588-4276-8A15-8D65C22711C1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EvalDll", "Source\EvalDll\EvalDll.vcxproj", "{482999D1-B7E2-466E-9F8D-2119F93EAFD9}"
+ ProjectSection(ProjectDependencies) = postProject
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {EB2BE26F-6BD4-4274-971F-86D080779DD1}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Math", "Source\Math\Math.vcxproj", "{60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {B3DD765E-694E-4494-BAD7-37BBF2942517} = {B3DD765E-694E-4494-BAD7-37BBF2942517}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathCUDA", "Source\Math\MathCUDA.vcxproj", "{B3DD765E-694E-4494-BAD7-37BBF2942517}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibSVMBinaryReader", "Source\Readers\LibSVMBinaryReader\LibSVMBinaryReader.vcxproj", "{D667AF32-028A-4A5D-BE19-F46776F0F6B2}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BinaryReader", "Source\Readers\BinaryReader\BinaryReader.vcxproj", "{1D5787D4-52E4-45DB-951B-82F220EE0C6A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSSMReader", "Source\Readers\DSSMReader\DSSMReader.vcxproj", "{014DA766-B37B-4581-BC26-963EA5507931}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTKMLFReader", "Source\Readers\HTKMLFReader\HTKMLFReader.vcxproj", "{33D2FD22-DEF2-4507-A58A-368F641AEBE5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LMSequenceReader", "Source\Readers\LMSequenceReader\LMSequenceReader.vcxproj", "{9A2F2441-5972-4EA8-9215-4119FCE0FB68}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LUSequenceReader", "Source\Readers\LUSequenceReader\LUSequenceReader.vcxproj", "{62836DC1-DF77-4B98-BF2D-45C943B7DDC6}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SparsePCReader", "Source\Readers\SparsePCReader\SparsePCReader.vcxproj", "{CE429AA2-3778-4619-8FD1-49BA3B81197B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UCIFastReader", "Source\Readers\UCIFastReader\UCIFastReader.vcxproj", "{E6646FFE-3588-4276-8A15-8D65C22711C1}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathPerformanceTests", "Tests\UnitTests\MathPerformanceTests\MathPerformanceTests.vcxproj", "{668BEED5-AC07-4F35-B3AE-EE65A7F9C976}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EvalWrapper", "Source\Extensibility\EvalWrapper\EvalWrapper.vcxproj", "{EF766CAE-9CB1-494C-9153-0030631A6340}"
+ ProjectSection(ProjectDependencies) = postProject
+ {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReaderLib", "Source\Readers\ReaderLib\ReaderLib.vcxproj", "{F0A9637C-20DA-42F0-83D4-23B4704DE602}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKBinaryReader", "Source\Readers\CNTKBinaryReader\CNTKBinaryReader.vcxproj", "{7FE16CBE-B717-45C9-97FB-FA3191039568}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKTextFormatReader", "Source\Readers\CNTKTextFormatReader\CNTKTextFormatReader.vcxproj", "{91973E60-A7BE-4C86-8FDB-59C88A0B3715}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTKDeserializers", "Source\Readers\HTKDeserializers\HTKDeserializers.vcxproj", "{7B7A51ED-AA8E-4660-A805-D50235A02120}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageReader", "Source\Readers\ImageReader\ImageReader.vcxproj", "{9BD0A711-0BBD-45B6-B81C-053F03C26CFB}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetworkTests", "Tests\UnitTests\NetworkTests\NetworkTests.vcxproj", "{CDA96AA3-3252-4978-A0BF-2ACD670823CB}"
+ ProjectSection(ProjectDependencies) = postProject
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
+ {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {EB2BE26F-6BD4-4274-971F-86D080779DD1}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Source\Common\Common.vcxproj", "{86883653-8A61-4038-81A0-2379FAE4200A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CompositeDataReader", "Source\Readers\CompositeDataReader\CompositeDataReader.vcxproj", "{7B7A563D-AA8E-4660-A805-D50235A02120}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EvalTests", "Tests\UnitTests\EvalTests\EvalTests.vcxproj", "{82125DA1-1CD7-45B5-9281-E6AE7C287CB7}"
+ ProjectSection(ProjectDependencies) = postProject
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommandEval", "Tests\UnitTests\CommandEval\CommandEval.vcxproj", "{731312A8-6DA3-4841-AFCD-57520BA1BF8E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKv2LibraryDll", "Source\CNTKv2LibraryDll\CNTKv2LibraryDll.vcxproj", "{E5606ECE-48CA-4464-BB12-09D81D02B9EF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {F0A9637C-20DA-42F0-83D4-23B4704DE602}
+ {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V2LibraryTests", "Tests\UnitTests\V2LibraryTests\V2LibraryTests.vcxproj", "{F4CC3AB2-0DB2-4281-929A-2E68E30F0F6E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {33D2FD22-DEF2-4507-A58A-368F641AEBE5} = {33D2FD22-DEF2-4507-A58A-368F641AEBE5}
+ {7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
+ {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
+ {E6F26F9A-FF64-4F0A-B749-CD309EE357EE} = {E6F26F9A-FF64-4F0A-B749-CD309EE357EE}
+ {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
+ {7B7A51ED-AA8E-4660-A805-D50235A02120} = {7B7A51ED-AA8E-4660-A805-D50235A02120}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedEvalTests", "Tests\UnitTests\ManagedEvalTests\ManagedEvalTests.csproj", "{CC8DDDCB-D53A-4B30-8596-AEF1C493DB31}"
+ ProjectSection(ProjectDependencies) = postProject
+ {EF766CAE-9CB1-494C-9153-0030631A6340} = {EF766CAE-9CB1-494C-9153-0030631A6340}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BrainScriptTests", "Tests\UnitTests\BrainScriptTests\BrainScriptTests.vcxproj", "{9F999212-AFC5-4EAC-AA78-F7247D46C456}"
+ ProjectSection(ProjectDependencies) = postProject
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {928ABD1B-4D3B-4017-AEF1-0FA1B4467513}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ {EAD17188-072C-4726-B840-A769C36DAD1B} = {EAD17188-072C-4726-B840-A769C36DAD1B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPEvalClientTest", "Tests\EndToEndTests\EvalClientTests\CPPEvalClientTest\CPPEvalClientTest.vcxproj", "{CCC07E8E-F33A-4AF7-9F60-93E2AA61C75E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSEvalClientTest", "Tests\EndToEndTests\EvalClientTests\CSEvalClientTest\CSEvalClientTest.csproj", "{1C6E6C53-1AA7-4B69-913E-B97BB5A872CF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {EF766CAE-9CB1-494C-9153-0030631A6340} = {EF766CAE-9CB1-494C-9153-0030631A6340}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PythonBindings", "bindings\python\PythonBindings.vcxproj", "{CD721536-CFD3-413E-A3D7-FB0FAF989635}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9BD0A711-0BBD-45B6-B81C-053F03C26CFB} = {9BD0A711-0BBD-45B6-B81C-053F03C26CFB}
+ {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {4B442D34-641A-4B37-9A4B-D18DBE28A979}
+ {7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}
+ {20DEE94F-2802-40B1-B88B-22755A03AA48} = {20DEE94F-2802-40B1-B88B-22755A03AA48}
+ {4CF94A50-0D17-432A-8B5A-8458E91C44A6} = {4CF94A50-0D17-432A-8B5A-8458E91C44A6}
+ {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
+ {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
+ {1D5787D4-52E4-45DB-951B-82F220EE0C6A} = {1D5787D4-52E4-45DB-951B-82F220EE0C6A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Multiverso", "Source\Multiverso\src\Multiverso.vcxproj", "{16F14058-B116-49D9-8BA0-209F3AFFE849}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MultiversoTests", "Source\Multiverso\Test\unittests\MultiversoTests.vcxproj", "{EC7157E9-A51F-4702-A5FD-8DAF88C7029F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {16F14058-B116-49D9-8BA0-209F3AFFE849} = {16F14058-B116-49D9-8BA0-209F3AFFE849}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPEvalExtendedClientTest", "Tests\EndToEndTests\EvalClientTests\CPPEvalExtendedClientTest\CPPEvalExtendedClientTest.vcxproj", "{5D29C76D-648A-456F-920D-48230F2FB3C8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {482999D1-B7E2-466E-9F8D-2119F93EAFD9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKLibraryCSBinding", "bindings\csharp\Swig\CNTKLibraryCSBinding.vcxproj", "{277EBD9D-2504-49FA-AC72-59D5515130C3}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{CB4566F1-6C8F-4270-83EE-F6AED84EBB2B}"
- ProjectSection(SolutionItems) = preProject
- Examples\Video\GettingStarted\Python\Conv3D_UCF11.py = Examples\Video\GettingStarted\Python\Conv3D_UCF11.py
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CNTKLibraryManagedDll", "bindings\csharp\CNTKLibraryManagedDll\CNTKLibraryManagedDll.csproj", "{50EF9EE6-5018-453E-A063-F77044EF1A97}"
+ ProjectSection(ProjectDependencies) = postProject
+ {277EBD9D-2504-49FA-AC72-59D5515130C3} = {277EBD9D-2504-49FA-AC72-59D5515130C3}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PerformanceProfilerDll", "Source\PerformanceProfilerDll\PerformanceProfilerDll.vcxproj", "{4B442D34-641A-4B37-9A4B-D18DBE28A979}"
@@ -1474,38 +1551,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CNTKLibraryCSEvalExamplesTe
{50EF9EE6-5018-453E-A063-F77044EF1A97} = {50EF9EE6-5018-453E-A063-F77044EF1A97}
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "V2LibraryTests", "V2LibraryTests", "{43ED3FD0-824C-4201-BD96-B824DF959ADC}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GoogLeNet", "GoogLeNet", "{789B4AB8-40F1-4A37-823A-BC20D80C8BF1}"
- ProjectSection(SolutionItems) = preProject
- Examples\Image\Classification\GoogLeNet\README.md = Examples\Image\Classification\GoogLeNet\README.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BN-Inception", "BN-Inception", "{CE223840-1DEE-4849-B530-F06BEE05BAA8}"
- ProjectSection(SolutionItems) = preProject
- Examples\Image\Classification\GoogLeNet\BN-Inception\README.md = Examples\Image\Classification\GoogLeNet\BN-Inception\README.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InceptionV3", "InceptionV3", "{824766FA-759A-4466-9C39-13200D2D3159}"
- ProjectSection(SolutionItems) = preProject
- Examples\Image\Classification\GoogLeNet\InceptionV3\README.md = Examples\Image\Classification\GoogLeNet\InceptionV3\README.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BrainScript", "BrainScript", "{BD07C9F3-B10C-4C21-82BC-4F249B65DDFE}"
- ProjectSection(SolutionItems) = preProject
- Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionBlocks.bs = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionBlocks.bs
- Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.bs = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.bs
- Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.cntk = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\InceptionV3.cntk
- Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\README.md = Examples\Image\Classification\GoogLeNet\InceptionV3\BrainScript\README.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BrainScript", "BrainScript", "{5CC403B9-2405-4FFB-A73B-DAE0DC986C76}"
- ProjectSection(SolutionItems) = preProject
- Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.bs = Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.bs
- Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.cntk = Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\BN-Inception.cntk
- Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\InceptionLayers.bs = Examples\Image\Classification\GoogLeNet\BN-Inception\BrainScript\InceptionLayers.bs
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKLibraryCPPEvalExamplesTest", "Tests\EndToEndTests\EvalClientTests\CNTKLibraryCPPEvalExamplesTest\CNTKLibraryCPPEvalExamplesTest.vcxproj", "{D771A06D-CC25-4582-B5CD-D2A4782BB005}"
ProjectSection(ProjectDependencies) = postProject
{91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {91973E60-A7BE-4C86-8FDB-59C88A0B3715}
@@ -1519,10 +1564,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V2LibraryEndToEndTests", "T
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensibility", "Extensibility", "{3BF56127-6F0F-41CF-BFCE-31165A0A5E73}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CPP", "CPP", "{7A27E076-296E-41A8-BA76-164071251372}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPExtensibilityExamples", "Examples\Extensibility\CPP\CPPExtensibilityExamples.vcxproj", "{40A8CC31-8C08-4156-AE08-E8C0FADC3509}"
ProjectSection(ProjectDependencies) = postProject
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
@@ -1530,64 +1571,24 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPExtensibilityExamples",
EndProject
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "PythonExamples", "Examples\PythonExamples.pyproj", "{292FF4EE-D9DD-4BA7-85F7-6A22148D1E01}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FCN", "FCN", "{58E3A257-91BE-4DC7-8991-70BFABE0A671}"
- ProjectSection(SolutionItems) = preProject
- Tests\EndToEndTests\Image\FCN\baseline.txt = Tests\EndToEndTests\Image\FCN\baseline.txt
- Tests\EndToEndTests\Image\FCN\fcn.cntk = Tests\EndToEndTests\Image\FCN\fcn.cntk
- Tests\EndToEndTests\Image\FCN\fcn8_to_fcn4.mel = Tests\EndToEndTests\Image\FCN\fcn8_to_fcn4.mel
- Tests\EndToEndTests\Image\FCN\prepare_for_test.mel = Tests\EndToEndTests\Image\FCN\prepare_for_test.mel
- Tests\EndToEndTests\Image\FCN\run-test = Tests\EndToEndTests\Image\FCN\run-test
- Tests\EndToEndTests\Image\FCN\shared.bs = Tests\EndToEndTests\Image\FCN\shared.bs
- Tests\EndToEndTests\Image\FCN\testcases.yml = Tests\EndToEndTests\Image\FCN\testcases.yml
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CPPExtensibilityExamplesLibrary", "Examples\Extensibility\CPPLib\CPPExtensibilityExamplesLibrary.vcxproj", "{4CF94A50-0D17-432A-8B5A-8458E91C44A6}"
ProjectSection(ProjectDependencies) = postProject
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SaveBestModelPerCriterion", "SaveBestModelPerCriterion", "{C1189678-4FFA-4258-971F-3262B44FCA99}"
- ProjectSection(SolutionItems) = preProject
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.cpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.cpu.txt
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.gpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.gpu.txt
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.cpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.cpu.txt
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.gpu.txt = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\baseline.windows.gpu.txt
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\cntkcv.cntk = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\cntkcv.cntk
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\run-test = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\run-test
- Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\testcases.yml = Tests\EndToEndTests\Speech\DNN\SaveBestModelPerCriterion\testcases.yml
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Java", "Java", "{F37067BD-8BB1-4F93-AEF4-F37434613AE4}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKLibraryJavaBinding", "bindings\java\Swig\CNTKLibraryJavaBinding.vcxproj", "{5D1972FA-F0A4-4035-8E63-8BAEF0230097}"
ProjectSection(ProjectDependencies) = postProject
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BinaryConvolution", "BinaryConvolution", "{65649688-3377-4FA9-8CD0-BDC3AC72E0AD}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BinaryConvolutionLib", "Examples\Extensibility\BinaryConvolution\BinaryConvolutionLib\BinaryConvolutionLib.vcxproj", "{20DEE94F-2802-40B1-B88B-22755A03AA48}"
ProjectSection(ProjectDependencies) = postProject
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "selectivesearch", "selectivesearch", "{BEF04803-47B4-4322-B9D7-E10A8468E79F}"
- ProjectSection(SolutionItems) = preProject
- Examples\Image\Detection\FastRCNN\selectivesearch\__init__.py = Examples\Image\Detection\FastRCNN\selectivesearch\__init__.py
- Examples\Image\Detection\FastRCNN\selectivesearch\README.md = Examples\Image\Detection\FastRCNN\selectivesearch\README.md
- Examples\Image\Detection\FastRCNN\selectivesearch\selectivesearch.py = Examples\Image\Detection\FastRCNN\selectivesearch\selectivesearch.py
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fastRCNN", "fastRCNN", "{C28E4FD7-F9A9-4473-8E5D-D209AF36A1E7}"
ProjectSection(SolutionItems) = preProject
- Examples\Image\Detection\FastRCNN\fastRCNN\__init__.py = Examples\Image\Detection\FastRCNN\fastRCNN\__init__.py
- Examples\Image\Detection\FastRCNN\fastRCNN\imdb.py = Examples\Image\Detection\FastRCNN\fastRCNN\imdb.py
- Examples\Image\Detection\FastRCNN\fastRCNN\nms.py = Examples\Image\Detection\FastRCNN\fastRCNN\nms.py
- Examples\Image\Detection\FastRCNN\fastRCNN\pascal_voc.py = Examples\Image\Detection\FastRCNN\fastRCNN\pascal_voc.py
- Examples\Image\Detection\FastRCNN\fastRCNN\test.py = Examples\Image\Detection\FastRCNN\fastRCNN\test.py
- Examples\Image\Detection\FastRCNN\fastRCNN\timer.py = Examples\Image\Detection\FastRCNN\fastRCNN\timer.py
- Examples\Image\Detection\FastRCNN\fastRCNN\train_svms.py = Examples\Image\Detection\FastRCNN\fastRCNN\train_svms.py
- Examples\Image\Detection\FastRCNN\fastRCNN\voc_eval.py = Examples\Image\Detection\FastRCNN\fastRCNN\voc_eval.py
+ Examples\Extensibility\BinaryConvolution\binary_convnet.py = Examples\Extensibility\BinaryConvolution\binary_convnet.py
+ Examples\Extensibility\BinaryConvolution\custom_convolution_ops.py = Examples\Extensibility\BinaryConvolution\custom_convolution_ops.py
+ Examples\Extensibility\BinaryConvolution\README.md = Examples\Extensibility\BinaryConvolution\README.md
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CNTKLibraryCPPUWPEvalExamplesTests", "Tests\EndToEndTests\EvalClientTests\CNTKLibraryCPPUWPEvalExamplesTests\CNTKLibraryCPPUWPEvalExamplesTests.vcxproj", "{D5CB8825-0D1F-4940-9906-9BD87614B24E}"
@@ -1600,7 +1601,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageRecognitionAppCS", "Te
{C5E944BA-A7C4-482F-BE01-077A7DFC159C} = {C5E944BA-A7C4-482F-BE01-077A7DFC159C}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageRecognitionLib", "Tests\EndToEndTests\EvalClientTests\UWPImageRecognitionTest\ImageRecognizerLib\ImageRecognizerLib.vcxproj", "{C5E944BA-A7C4-482F-BE01-077A7DFC159C}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageRecognizerLib", "Tests\EndToEndTests\EvalClientTests\UWPImageRecognitionTest\ImageRecognizerLib\ImageRecognizerLib.vcxproj", "{C5E944BA-A7C4-482F-BE01-077A7DFC159C}"
ProjectSection(ProjectDependencies) = postProject
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
@@ -1610,8 +1611,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "V2LibraryCSTests", "Tests\U
{50EF9EE6-5018-453E-A063-F77044EF1A97} = {50EF9EE6-5018-453E-A063-F77044EF1A97}
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CNTKv2CSharp", "CNTKv2CSharp", "{B3B46744-DBB5-42C2-BAD7-9151D9486045}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CNTKLibraryCSTrainingTest", "Tests\EndToEndTests\CNTKv2CSharp\CNTKLibraryCSTrainingTest\CNTKLibraryCSTrainingTest.csproj", "{0DF2109B-BB85-4718-82DE-1C0536D4F2C3}"
ProjectSection(ProjectDependencies) = postProject
{7B7A563D-AA8E-4660-A805-D50235A02120} = {7B7A563D-AA8E-4660-A805-D50235A02120}
@@ -1619,13 +1618,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CNTKLibraryCSTrainingTest",
{50EF9EE6-5018-453E-A063-F77044EF1A97} = {50EF9EE6-5018-453E-A063-F77044EF1A97}
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProposalLayer", "ProposalLayer", "{3631994A-59E6-4CD6-99A4-6D332F8DABE2}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProposalLayerLib", "Examples\Extensibility\ProposalLayer\ProposalLayerLib\ProposalLayerLib.vcxproj", "{91EA9F28-B9B6-4FC7-A47D-9838F5915700}"
ProjectSection(ProjectDependencies) = postProject
{E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {E5606ECE-48CA-4464-BB12-09D81D02B9EF}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageWriterDll", "Source\ImageWriterDll\ImageWriterDll.vcxproj", "{2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {86883653-8A61-4038-81A0-2379FAE4200A}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BinaryConvolutionLib", "Source\Extensibility\BinaryConvolutionLib\BinaryConvolutionLib.vcxproj", "{20DEE94F-2802-40B1-B88B-22755A03AA48}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_CpuOnly|x64 = Debug_CpuOnly|x64
@@ -1739,18 +1743,6 @@ Global
{482999D1-B7E2-466E-9F8D-2119F93EAFD9}.Release_UWP|x64.ActiveCfg = Release_CpuOnly|x64
{482999D1-B7E2-466E-9F8D-2119F93EAFD9}.Release|x64.ActiveCfg = Release|x64
{482999D1-B7E2-466E-9F8D-2119F93EAFD9}.Release|x64.Build.0 = Release|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_CpuOnly|x64.ActiveCfg = Debug_CpuOnly|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_CpuOnly|x64.Build.0 = Debug_CpuOnly|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_UWP|x64.ActiveCfg = Debug_CpuOnly|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug|x64.ActiveCfg = Debug|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug|x64.Build.0 = Debug|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_CpuOnly|x64.ActiveCfg = Release_CpuOnly|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_CpuOnly|x64.Build.0 = Release_CpuOnly|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_NoOpt|x64.ActiveCfg = Release_NoOpt|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_NoOpt|x64.Build.0 = Release_NoOpt|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_UWP|x64.ActiveCfg = Release_NoOpt|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release|x64.ActiveCfg = Release|x64
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release|x64.Build.0 = Release|x64
{60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}.Debug_CpuOnly|x64.ActiveCfg = Debug_CpuOnly|x64
{60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}.Debug_CpuOnly|x64.Build.0 = Debug_CpuOnly|x64
{60BDB847-D0C4-4FD3-A947-0C15C08BCDB5}.Debug_UWP|x64.ActiveCfg = Debug_UWP|x64
@@ -2255,18 +2247,6 @@ Global
{5D1972FA-F0A4-4035-8E63-8BAEF0230097}.Release_UWP|x64.ActiveCfg = Release_CpuOnly|x64
{5D1972FA-F0A4-4035-8E63-8BAEF0230097}.Release|x64.ActiveCfg = Release|x64
{5D1972FA-F0A4-4035-8E63-8BAEF0230097}.Release|x64.Build.0 = Release|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_CpuOnly|x64.ActiveCfg = Debug_CpuOnly|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_CpuOnly|x64.Build.0 = Debug_CpuOnly|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_UWP|x64.ActiveCfg = Debug_CpuOnly|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug|x64.ActiveCfg = Debug|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug|x64.Build.0 = Debug|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_CpuOnly|x64.ActiveCfg = Release_CpuOnly|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_CpuOnly|x64.Build.0 = Release_CpuOnly|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_NoOpt|x64.ActiveCfg = Release_NoOpt|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_NoOpt|x64.Build.0 = Release_NoOpt|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_UWP|x64.ActiveCfg = Release_CpuOnly|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release|x64.ActiveCfg = Release|x64
- {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release|x64.Build.0 = Release|x64
{D5CB8825-0D1F-4940-9906-9BD87614B24E}.Debug_CpuOnly|x64.ActiveCfg = Debug_UWP|x64
{D5CB8825-0D1F-4940-9906-9BD87614B24E}.Debug_UWP|x64.ActiveCfg = Debug_UWP|x64
{D5CB8825-0D1F-4940-9906-9BD87614B24E}.Debug_UWP|x64.Build.0 = Debug_UWP|x64
@@ -2334,12 +2314,39 @@ Global
{91EA9F28-B9B6-4FC7-A47D-9838F5915700}.Release_UWP|x64.ActiveCfg = Release_CpuOnly|x64
{91EA9F28-B9B6-4FC7-A47D-9838F5915700}.Release|x64.ActiveCfg = Release|x64
{91EA9F28-B9B6-4FC7-A47D-9838F5915700}.Release|x64.Build.0 = Release|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_CpuOnly|x64.ActiveCfg = Debug_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_CpuOnly|x64.Build.0 = Debug_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_UWP|x64.ActiveCfg = Debug_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug_UWP|x64.Build.0 = Debug_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug|x64.ActiveCfg = Debug|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Debug|x64.Build.0 = Debug|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_CpuOnly|x64.ActiveCfg = Release_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_CpuOnly|x64.Build.0 = Release_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_NoOpt|x64.ActiveCfg = Release_NoOpt|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_NoOpt|x64.Build.0 = Release_NoOpt|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_UWP|x64.ActiveCfg = Release_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release_UWP|x64.Build.0 = Release_CpuOnly|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release|x64.ActiveCfg = Release|x64
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D}.Release|x64.Build.0 = Release|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_CpuOnly|x64.ActiveCfg = Debug_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_CpuOnly|x64.Build.0 = Debug_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_UWP|x64.ActiveCfg = Debug_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug_UWP|x64.Build.0 = Debug_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug|x64.ActiveCfg = Debug|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Debug|x64.Build.0 = Debug|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_CpuOnly|x64.ActiveCfg = Release_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_CpuOnly|x64.Build.0 = Release_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_NoOpt|x64.ActiveCfg = Release_NoOpt|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_NoOpt|x64.Build.0 = Release_NoOpt|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_UWP|x64.ActiveCfg = Release_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release_UWP|x64.Build.0 = Release_CpuOnly|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release|x64.ActiveCfg = Release|x64
+ {20DEE94F-2802-40B1-B88B-22755A03AA48}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {E6F26F9A-FF64-4F0A-B749-CD309EE357EE} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
{3ED0465D-23E7-4855-9694-F788717B6533} = {83BFF5BF-D054-4B3E-9769-B00BA707F116}
{EA67F51F-1FE8-462D-9F3E-01161685AD59} = {065AF55D-AF02-448B-BFCD-52619FDA4BD0}
{DE1A06BA-EC5C-4E0D-BCA8-3EA555310C58} = {065AF55D-AF02-448B-BFCD-52619FDA4BD0}
@@ -2350,15 +2357,12 @@ Global
{4BBF2950-3DBD-469A-AD57-6CACBEBAF541} = {C47CDAA5-6D6C-429E-BC89-7CA0F868FDC8}
{5F733BBA-FE83-4668-8F83-8B0E78A36619} = {C47CDAA5-6D6C-429E-BC89-7CA0F868FDC8}
{19EE975B-232D-49F0-94C7-6F1C6424FB53} = {C47CDAA5-6D6C-429E-BC89-7CA0F868FDC8}
- {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {DE3C54E5-D7D0-47AF-A783-DFDCE59E7937} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
{5E666C53-2D82-49C9-9127-3FDDC321C741} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{6D1353D6-F196-466F-B886-F16D48759B20} = {5E666C53-2D82-49C9-9127-3FDDC321C741}
{B6725C9F-A6D2-4269-9B74-7888A90F7884} = {5E666C53-2D82-49C9-9127-3FDDC321C741}
{B27DD434-EECD-4EE0-A03B-1150EB87258E} = {B6725C9F-A6D2-4269-9B74-7888A90F7884}
{A4884465-CFBB-4A64-A9DE-690E1A63EF7E} = {B6725C9F-A6D2-4269-9B74-7888A90F7884}
{C70E1572-20FF-496C-A0A9-10AA6755A07C} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {EAD17188-072C-4726-B840-A769C36DAD1B} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
{88F85A64-105D-4CDA-8199-B7A312FC8A27} = {19EE975B-232D-49F0-94C7-6F1C6424FB53}
{8241108A-7824-4FF2-BECA-7521A9D89DCF} = {19EE975B-232D-49F0-94C7-6F1C6424FB53}
{6994C86D-A672-4254-824A-51F4DFEB807F} = {C47CDAA5-6D6C-429E-BC89-7CA0F868FDC8}
@@ -2366,8 +2370,6 @@ Global
{40F93928-5CA2-433A-A48C-C8E9A35D7079} = {6994C86D-A672-4254-824A-51F4DFEB807F}
{39B9BB97-D0E8-439A-8A1B-8DB8E7CF73C3} = {6994C86D-A672-4254-824A-51F4DFEB807F}
{6F19321A-65E7-4829-B00C-3886CD6C6EDE} = {D45DF403-6781-444E-B654-A96868C5BE68}
- {4701E678-5E6F-470D-B348-9CD1A2C095D1} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
{BB8B9FC5-C4B3-477F-80E2-665DC8E431BD} = {6994C86D-A672-4254-824A-51F4DFEB807F}
{8071EF60-30F7-4A77-81AA-ADCA0E18B1E3} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{76F9323D-34A1-43A5-A594-C4798931FF21} = {8071EF60-30F7-4A77-81AA-ADCA0E18B1E3}
@@ -2376,20 +2378,6 @@ Global
{81AE014F-DD63-47C7-B6E2-DB1D2833DCD1} = {C47CDAA5-6D6C-429E-BC89-7CA0F868FDC8}
{9BDFA4BE-790E-408F-915B-5979BB5078C6} = {47755F2E-D674-4175-9E38-8EA053455072}
{3CE841C0-02E5-46DB-B401-6F8784880173} = {47755F2E-D674-4175-9E38-8EA053455072}
- {A4FC3467-4787-43E8-BBC0-D79AE56B468D} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {B3DD765E-694E-4494-BAD7-37BBF2942517} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {D667AF32-028A-4A5D-BE19-F46776F0F6B2} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {1D5787D4-52E4-45DB-951B-82F220EE0C6A} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {014DA766-B37B-4581-BC26-963EA5507931} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {33D2FD22-DEF2-4507-A58A-368F641AEBE5} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {9A2F2441-5972-4EA8-9215-4119FCE0FB68} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {62836DC1-DF77-4B98-BF2D-45C943B7DDC6} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {CE429AA2-3778-4619-8FD1-49BA3B81197B} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {E6646FFE-3588-4276-8A15-8D65C22711C1} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {668BEED5-AC07-4F35-B3AE-EE65A7F9C976} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
{6E565B48-1923-49CE-9787-9BBB9D96F4C5} = {D45DF403-6781-444E-B654-A96868C5BE68}
{3BF59CCE-D245-420A-9F17-73CE61E284C2} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{811924DE-2F12-4EA0-BE58-E57BEF3B74D1} = {3BF59CCE-D245-420A-9F17-73CE61E284C2}
@@ -2405,29 +2393,20 @@ Global
{1C7D222F-E17B-444F-A18C-6205DEEF27BA} = {FB65FA58-C47B-4A49-9566-40FD5D75FC59}
{5ED4F5DC-E016-4E10-BACD-6A760A0CDE89} = {FB65FA58-C47B-4A49-9566-40FD5D75FC59}
{35CFD8E3-7206-4243-AB5C-AAF610109A5C} = {FB65FA58-C47B-4A49-9566-40FD5D75FC59}
- {EF766CAE-9CB1-494C-9153-0030631A6340} = {60F87E25-BC87-4782-8E20-1621AAEBB113}
{BD46CE02-3740-4526-80F6-CC7973B953E5} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{FB7AF7B9-6BEA-459F-94D9-94D53916D2B6} = {BD46CE02-3740-4526-80F6-CC7973B953E5}
- {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {33EBFE78-A1A8-4961-8938-92A271941F94}
{AC7BA8D3-B4C8-42A4-8507-B359BB6D49E8} = {FB7AF7B9-6BEA-459F-94D9-94D53916D2B6}
{A17AC914-C539-4B47-A80F-9BD25C64E2A0} = {AC7BA8D3-B4C8-42A4-8507-B359BB6D49E8}
{9F1F9C7C-2CC3-410C-ACDC-988B12D6AC14} = {AC7BA8D3-B4C8-42A4-8507-B359BB6D49E8}
- {7FE16CBE-B717-45C9-97FB-FA3191039568} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {7B7A51ED-AA8E-4660-A805-D50235A02120} = {33EBFE78-A1A8-4961-8938-92A271941F94}
- {9BD0A711-0BBD-45B6-B81C-053F03C26CFB} = {33EBFE78-A1A8-4961-8938-92A271941F94}
{08A05A9A-4E45-42D5-83FA-719E99C04A30} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{715C0E2D-6FF6-4B26-9E49-1C68920CFAF6} = {08A05A9A-4E45-42D5-83FA-719E99C04A30}
{48C2A9DE-FB2C-4724-9ADC-744216D79BCF} = {08A05A9A-4E45-42D5-83FA-719E99C04A30}
{2B1046A1-0140-43B7-B3DC-CF7DEEE1009E} = {8071EF60-30F7-4A77-81AA-ADCA0E18B1E3}
- {CDA96AA3-3252-4978-A0BF-2ACD670823CB} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
{8656B71D-E24C-4AC2-8BE4-C07B415A3E15} = {C47CDAA5-6D6C-429E-BC89-7CA0F868FDC8}
{E53E63A0-FAA9-4416-9AD1-08A8FB87FEE1} = {8656B71D-E24C-4AC2-8BE4-C07B415A3E15}
{EC780385-7580-4D15-914B-1D878A295CBC} = {E53E63A0-FAA9-4416-9AD1-08A8FB87FEE1}
{D11F76CC-DB6D-4CB4-B3B7-AB139DE2F5FA} = {E53E63A0-FAA9-4416-9AD1-08A8FB87FEE1}
{181664AC-4C95-4798-A923-09B879215B33} = {8656B71D-E24C-4AC2-8BE4-C07B415A3E15}
- {86883653-8A61-4038-81A0-2379FAE4200A} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {7B7A563D-AA8E-4660-A805-D50235A02120} = {33EBFE78-A1A8-4961-8938-92A271941F94}
{1FB54750-B668-4AC3-966F-ED504020AC06} = {8656B71D-E24C-4AC2-8BE4-C07B415A3E15}
{3E9BD61F-1F0A-4966-BE17-803AEFD1DFA4} = {6994C86D-A672-4254-824A-51F4DFEB807F}
{5560DDD4-1E6E-4F41-B9BD-F52A19DF0B31} = {6994C86D-A672-4254-824A-51F4DFEB807F}
@@ -2445,13 +2424,7 @@ Global
{1141DC61-E014-4DEC-9157-F6B1FC055C7A} = {772A0DB3-4710-4281-8AA9-A9F1F7C543D3}
{EC7298E3-AAA9-4672-941F-0B342C494CB3} = {A1521DC4-C8EC-47BD-9E63-7BE30ED2EC26}
{ECED747C-86D7-4009-B2A9-0525FE5DF4EB} = {EC7298E3-AAA9-4672-941F-0B342C494CB3}
- {82125DA1-1CD7-45B5-9281-E6AE7C287CB7} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {731312A8-6DA3-4841-AFCD-57520BA1BF8E} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {F4CC3AB2-0DB2-4281-929A-2E68E30F0F6E} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
{68263A2F-1D5F-4C46-B5AF-2304B80FC3D4} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
- {CC8DDDCB-D53A-4B30-8596-AEF1C493DB31} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {9F999212-AFC5-4EAC-AA78-F7247D46C456} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
{B586AA4C-0BB9-4629-9EDA-25FF2618AC9F} = {FB7AF7B9-6BEA-459F-94D9-94D53916D2B6}
{C2102C39-BF5F-4B12-9C41-849D1ED35EE8} = {B586AA4C-0BB9-4629-9EDA-25FF2618AC9F}
{4DDFD21D-E82C-4321-B380-8A9382E18107} = {19EE975B-232D-49F0-94C7-6F1C6424FB53}
@@ -2459,13 +2432,7 @@ Global
{4F534076-39A5-40E2-BF87-64EC464C52B2} = {19EE975B-232D-49F0-94C7-6F1C6424FB53}
{31263D7F-F590-475E-B4F0-7DFA4E4FF4B8} = {19EE975B-232D-49F0-94C7-6F1C6424FB53}
{05E45AF7-C069-4057-BC16-0A532D068CE4} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
- {CCC07E8E-F33A-4AF7-9F60-93E2AA61C75E} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
- {1C6E6C53-1AA7-4B69-913E-B97BB5A872CF} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
{E844AB9A-A48F-4A99-9625-F528C5C46D83} = {8656B71D-E24C-4AC2-8BE4-C07B415A3E15}
- {CD721536-CFD3-413E-A3D7-FB0FAF989635} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {16F14058-B116-49D9-8BA0-209F3AFFE849} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {EC7157E9-A51F-4702-A5FD-8DAF88C7029F} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {5D29C76D-648A-456F-920D-48230F2FB3C8} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
{48E51BEE-C69E-4739-8ABF-D481040E1FB7} = {305456F0-D9DE-4452-87BE-1C9F3C34C14F}
{A22E7B97-B4D2-43EA-AD53-307FA767A38D} = {305456F0-D9DE-4452-87BE-1C9F3C34C14F}
{2DD4DF97-4379-4D5F-9C1D-7AAC59E47796} = {305456F0-D9DE-4452-87BE-1C9F3C34C14F}
@@ -2523,43 +2490,86 @@ Global
{784A839C-762F-4A85-9EF1-A1E00546AD6C} = {D30B34AF-3618-4C55-900E-8F60A9F39E66}
{6730F9BE-92AA-45F7-9F98-CD13E725CCA9} = {784A839C-762F-4A85-9EF1-A1E00546AD6C}
{1526F027-B007-472D-82E2-5A91340F3B62} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {277EBD9D-2504-49FA-AC72-59D5515130C3} = {1526F027-B007-472D-82E2-5A91340F3B62}
- {50EF9EE6-5018-453E-A063-F77044EF1A97} = {1526F027-B007-472D-82E2-5A91340F3B62}
{2A95B23C-D91E-4DF9-B8F0-5E997608AB65} = {47755F2E-D674-4175-9E38-8EA053455072}
{FB604F98-008F-45CD-B06E-42C30E121F13} = {2A95B23C-D91E-4DF9-B8F0-5E997608AB65}
{5EDBCD1A-4F07-4618-84C9-FC6905A438B4} = {FB604F98-008F-45CD-B06E-42C30E121F13}
{39C3C8CA-9A8A-4733-ADBB-3E19D0F52528} = {2A95B23C-D91E-4DF9-B8F0-5E997608AB65}
{CB4566F1-6C8F-4270-83EE-F6AED84EBB2B} = {39C3C8CA-9A8A-4733-ADBB-3E19D0F52528}
- {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {3500A847-E024-4E7D-92DD-CC587C17460B} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
{43ED3FD0-824C-4201-BD96-B824DF959ADC} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{789B4AB8-40F1-4A37-823A-BC20D80C8BF1} = {151202CF-C2E4-47A6-A31C-CE039D698519}
{CE223840-1DEE-4849-B530-F06BEE05BAA8} = {789B4AB8-40F1-4A37-823A-BC20D80C8BF1}
{824766FA-759A-4466-9C39-13200D2D3159} = {789B4AB8-40F1-4A37-823A-BC20D80C8BF1}
{BD07C9F3-B10C-4C21-82BC-4F249B65DDFE} = {824766FA-759A-4466-9C39-13200D2D3159}
{5CC403B9-2405-4FFB-A73B-DAE0DC986C76} = {CE223840-1DEE-4849-B530-F06BEE05BAA8}
- {D771A06D-CC25-4582-B5CD-D2A4782BB005} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
- {743FC7AA-3884-4C96-983A-A33FD6C56227} = {43ED3FD0-824C-4201-BD96-B824DF959ADC}
{3BF56127-6F0F-41CF-BFCE-31165A0A5E73} = {47755F2E-D674-4175-9E38-8EA053455072}
{7A27E076-296E-41A8-BA76-164071251372} = {3BF56127-6F0F-41CF-BFCE-31165A0A5E73}
- {40A8CC31-8C08-4156-AE08-E8C0FADC3509} = {7A27E076-296E-41A8-BA76-164071251372}
- {292FF4EE-D9DD-4BA7-85F7-6A22148D1E01} = {47755F2E-D674-4175-9E38-8EA053455072}
{58E3A257-91BE-4DC7-8991-70BFABE0A671} = {8071EF60-30F7-4A77-81AA-ADCA0E18B1E3}
- {4CF94A50-0D17-432A-8B5A-8458E91C44A6} = {7A27E076-296E-41A8-BA76-164071251372}
{C1189678-4FFA-4258-971F-3262B44FCA99} = {6994C86D-A672-4254-824A-51F4DFEB807F}
{F37067BD-8BB1-4F93-AEF4-F37434613AE4} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
- {5D1972FA-F0A4-4035-8E63-8BAEF0230097} = {F37067BD-8BB1-4F93-AEF4-F37434613AE4}
- {65649688-3377-4FA9-8CD0-BDC3AC72E0AD} = {3BF56127-6F0F-41CF-BFCE-31165A0A5E73}
- {20DEE94F-2802-40B1-B88B-22755A03AA48} = {65649688-3377-4FA9-8CD0-BDC3AC72E0AD}
{BEF04803-47B4-4322-B9D7-E10A8468E79F} = {4EAFF1B2-2D70-4486-B95E-684E39A50609}
{C28E4FD7-F9A9-4473-8E5D-D209AF36A1E7} = {4EAFF1B2-2D70-4486-B95E-684E39A50609}
+ {B3B46744-DBB5-42C2-BAD7-9151D9486045} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
+ {3631994A-59E6-4CD6-99A4-6D332F8DABE2} = {3BF56127-6F0F-41CF-BFCE-31165A0A5E73}
+ {E6F26F9A-FF64-4F0A-B749-CD309EE357EE} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {928ABD1B-4D3B-4017-AEF1-0FA1B4467513} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {DE3C54E5-D7D0-47AF-A783-DFDCE59E7937} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {EAD17188-072C-4726-B840-A769C36DAD1B} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {4701E678-5E6F-470D-B348-9CD1A2C095D1} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {EB2BE26F-6BD4-4274-971F-86D080779DD1} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {A4FC3467-4787-43E8-BBC0-D79AE56B468D} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {482999D1-B7E2-466E-9F8D-2119F93EAFD9} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {60BDB847-D0C4-4FD3-A947-0C15C08BCDB5} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {B3DD765E-694E-4494-BAD7-37BBF2942517} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {D667AF32-028A-4A5D-BE19-F46776F0F6B2} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {1D5787D4-52E4-45DB-951B-82F220EE0C6A} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {014DA766-B37B-4581-BC26-963EA5507931} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {33D2FD22-DEF2-4507-A58A-368F641AEBE5} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {9A2F2441-5972-4EA8-9215-4119FCE0FB68} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {62836DC1-DF77-4B98-BF2D-45C943B7DDC6} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {CE429AA2-3778-4619-8FD1-49BA3B81197B} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {E6646FFE-3588-4276-8A15-8D65C22711C1} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {668BEED5-AC07-4F35-B3AE-EE65A7F9C976} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {EF766CAE-9CB1-494C-9153-0030631A6340} = {60F87E25-BC87-4782-8E20-1621AAEBB113}
+ {F0A9637C-20DA-42F0-83D4-23B4704DE602} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {7FE16CBE-B717-45C9-97FB-FA3191039568} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {91973E60-A7BE-4C86-8FDB-59C88A0B3715} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {7B7A51ED-AA8E-4660-A805-D50235A02120} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {9BD0A711-0BBD-45B6-B81C-053F03C26CFB} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {CDA96AA3-3252-4978-A0BF-2ACD670823CB} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {86883653-8A61-4038-81A0-2379FAE4200A} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {7B7A563D-AA8E-4660-A805-D50235A02120} = {33EBFE78-A1A8-4961-8938-92A271941F94}
+ {82125DA1-1CD7-45B5-9281-E6AE7C287CB7} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {731312A8-6DA3-4841-AFCD-57520BA1BF8E} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {E5606ECE-48CA-4464-BB12-09D81D02B9EF} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {F4CC3AB2-0DB2-4281-929A-2E68E30F0F6E} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {CC8DDDCB-D53A-4B30-8596-AEF1C493DB31} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {9F999212-AFC5-4EAC-AA78-F7247D46C456} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {CCC07E8E-F33A-4AF7-9F60-93E2AA61C75E} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
+ {1C6E6C53-1AA7-4B69-913E-B97BB5A872CF} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
+ {CD721536-CFD3-413E-A3D7-FB0FAF989635} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {16F14058-B116-49D9-8BA0-209F3AFFE849} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {EC7157E9-A51F-4702-A5FD-8DAF88C7029F} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
+ {5D29C76D-648A-456F-920D-48230F2FB3C8} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
+ {277EBD9D-2504-49FA-AC72-59D5515130C3} = {1526F027-B007-472D-82E2-5A91340F3B62}
+ {50EF9EE6-5018-453E-A063-F77044EF1A97} = {1526F027-B007-472D-82E2-5A91340F3B62}
+ {4B442D34-641A-4B37-9A4B-D18DBE28A979} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ {3500A847-E024-4E7D-92DD-CC587C17460B} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
+ {D771A06D-CC25-4582-B5CD-D2A4782BB005} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
+ {743FC7AA-3884-4C96-983A-A33FD6C56227} = {43ED3FD0-824C-4201-BD96-B824DF959ADC}
+ {40A8CC31-8C08-4156-AE08-E8C0FADC3509} = {7A27E076-296E-41A8-BA76-164071251372}
+ {292FF4EE-D9DD-4BA7-85F7-6A22148D1E01} = {47755F2E-D674-4175-9E38-8EA053455072}
+ {4CF94A50-0D17-432A-8B5A-8458E91C44A6} = {7A27E076-296E-41A8-BA76-164071251372}
+ {5D1972FA-F0A4-4035-8E63-8BAEF0230097} = {F37067BD-8BB1-4F93-AEF4-F37434613AE4}
+ {65649688-3377-4FA9-8CD0-BDC3AC72E0AD} = {3BF56127-6F0F-41CF-BFCE-31165A0A5E73}
{D5CB8825-0D1F-4940-9906-9BD87614B24E} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
{EA6DC625-7AD7-44A8-BDE9-4620D01B3AA5} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
{C5E944BA-A7C4-482F-BE01-077A7DFC159C} = {05E45AF7-C069-4057-BC16-0A532D068CE4}
{B6DED59B-B52A-4D44-9B61-26FF0382764A} = {6F19321A-65E7-4829-B00C-3886CD6C6EDE}
- {B3B46744-DBB5-42C2-BAD7-9151D9486045} = {6E565B48-1923-49CE-9787-9BBB9D96F4C5}
{0DF2109B-BB85-4718-82DE-1C0536D4F2C3} = {B3B46744-DBB5-42C2-BAD7-9151D9486045}
- {3631994A-59E6-4CD6-99A4-6D332F8DABE2} = {3BF56127-6F0F-41CF-BFCE-31165A0A5E73}
{91EA9F28-B9B6-4FC7-A47D-9838F5915700} = {3631994A-59E6-4CD6-99A4-6D332F8DABE2}
+ {2ECE5AEB-F471-4A1D-9BAD-963D5C8A8A1D} = {DD043083-71A4-409A-AA91-F9C548DCF7EC}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {9FF5B559-FC1B-4694-963F-355905287887}
EndGlobalSection
EndGlobal
diff --git a/Documentation/current_iteration.md b/Documentation/current_iteration.md
index 0ad3e8e2c93..a719d107612 100644
--- a/Documentation/current_iteration.md
+++ b/Documentation/current_iteration.md
@@ -1,104 +1,24 @@
-
-# CNTK v2.3 Release Notes
+# CNTK Current Iteration
-## Highlights of this Release
-- Better ONNX support.
-- Switching to NCCL2 for better performance in distributed training.
-- Improved C# API.
-- OpenCV is not required to install CNTK, it is only required for Tensorboard Image feature and image reader.
-- Various performance improvement.
-- Add Network Optimization API.
-- Faster Adadelta for sparse.
+## Change profiler details output format to be chrome://tracing
-## API
-### C#
-- Improved C# API with performance gains in training and evaluation.
-- During training and evaluation, data batch can be created from single managed buffer with offset. This eases the burden to prepare data in C# code.
-- Internally, data marshalling is done more efficiently than Release 2.2. Use of chatty FloatVector has been avoided during training and evaluation.
-### C++
-- Exported “PreorderTraverse” C++ API: use to search the graph based on the provided criteria.
-### Python and C++
-- Add custom attributes to primitive function, which would be serialized/deserialized when model save/load.
-- Some usage:
-```python
- func = C.plus(a, b)
- func.custom_attributes = {'test':'abc', 'dict':{'a':1, 'b':2}, 'list':[1,2,3]}
- func.custom_attributes['test2'] = 'def'
+## Enable per-node timing. Working example [here](../Examples/Image/Classification/MLP/Python/SimpleMNIST.py)
+- per-node timing creates items in profiler details when profiler is enabled.
+- usage in Python:
```
-### Enabled data unit in frequency specification (Python)
-Now we can specify data unit in sample, minibatch and sweep in training session progress frequency, CrossValidationConfig, and Checkpoint Config. For example,
-```python
- C.training_session(
- trainer=t,
- mb_source=mbs,
- mb_size=C.minibatch_size_schedule(4),
- model_inputs_to_streams=input_map,
- max_samples=60,
- progress_frequency=(5, C.train.DataUnit.minibatch),
- checkpoint_config = C.CheckpointConfig(frequency=(1, C.train.DataUnit.sweep), preserve_all=True,
- filename=str(tmpdir / "checkpoint_save_all")),
- cv_config = C.CrossValidationConfig(mbs1, frequency=(100, C.train.DataUnit.sample), minibatch_size=32),
- ).train(device)
+import cntk as C
+C.debugging.debug.set_node_timing(True)
+C.debugging.start_profiler() # optional
+C.debugging.enable_profiler() # optional
+# executions
+.print_node_timing()
+C.debugging.stop_profiler()
```
-For details, see:
-- [training_session]( https://cntk.ai/pythondocs/cntk.train.training_session.html?highlight=training%20session#module-cntk.train.training_session)
-- [CrossValidationConfig](https://cntk.ai/pythondocs/cntk.train.training_session.html?highlight=crossvalidationconfig#cntk.train.training_session.CrossValidationConfig)
-- [CheckPointConfig](https://cntk.ai/pythondocs/cntk.train.training_session.html?highlight=checkpointconfig#cntk.train.training_session.CheckpointConfig)
-If no data unit is specified, the default data unit is in samples.
+## CPU inference performance improvements using MKL
+- Accelerates some common tensor ops in Intel CPU inference for float32, especially for fully connected networks
+- Can be turned on/off by cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
-### Netopt Module – Network Optimizations for faster Inferences
-- In recent years, the DNN Research community has proposed many techniques to make inference faster and more compact. Proposed techniques include factoring matrix-vector-product and convolution operations, binarization/quantization, sparsification and the use of frequency-domain representations.
-- The goal of cntk.contrib.netopt module is to provide users of CNTK easy-to-use interfaces to speed up or compress their networks using such optimizations, and writers of optimizations a framework within which to export them to CNTK users.
-- The initial release of netopt supports factoring of Dense CNTK layers and the 1-bit binarization of Convolutional layers.
-#### Netopt API
-- Details on how to use the netopt module is available in [Manual_How_to_use_network_optimizations.ipynb](https://github.com/Microsoft/CNTK/tree/release/2.3/Manual/Manual_How_to_use_network_optimizations.ipynb)
-
-## Operators
-### Group convolution
-- We added support for group convolution on the GPU, exposed by C++ and Python API.
-### Free static axes (FreeDimension) support for more operators
-- We have added free static axes support for additional operators such as pooling (MaxPool, AveragePool), global pooling, unpooling, and reshape. With this increased support, it should be possible to run most common convolutional pipelines (CNNs) with free static axes.
-### Backcompat
-- Support loading v1 model with DiagTimes node.
-
-## Performance
-### Convolution with free static axes support
-- We have improved the training performance for models that use convolution operation with free static axes support. For certain models, we see training speed up of more than x5.
-### Validation Performance
-- Improve validation performance and remove a lot of unneeded validation check.
-### CPU Convolution
-- Move CPU Convolution to use MKL-ML, which leads to ~4x speedup in AlexNet training.
-### Moving to NCCL2
-- NCCL2 would be enabled by default in official CNTK releases for Linux GPU build, which reduced aggregation cost in distributed training. For Python users, there’s no impact as NCCL binary is included in the Linux Python wheels. For BrainScript users on Linux, they need to install [NCCL library]( https://github.com/NVIDIA/nccl) as part of CNTK environment setup, similar to CUDA and CUDNN. CPU builds and Windows builds are not affected since NCCL is available for Linux only.
-### Adadelta
-- Faster adadelta updates when gradients are sparse. The running time for the update is now proportional to the number of _non-zero_ elements in the gradient. We observed a speedup of 5x on a single GPU for a feed forward model with a high dimensional sparse input (about 2 million features). Memory requirements increased modestly, requiring 4 additional bytes per sparse input feature (about 8 MB for the aforementioned network).
-
-## ONNX
-- Improved ONNX support in CNTK.
-- Update ONNX to the latest ONNX from https://github.com/onnx/onnx
-- Covers most vision models such as Resnet, Inception, and VGG (only model saved in V2 CNTK format).
-- Fixed several bugs.
-
-## Dependencies
-### Removed OpenCV dependency from CNTK core.
-- CNTK 2.2 requires you to install OpenCV to use CNTK but it is optional for CNTK 2.3
-- You need to install OpenCV only if you are planning to use ImageReader or TensorBoard’s Image feature.
-### Upgraded ImageIO to 2.2.0
-- [Details](https://github.com/Microsoft/CNTK/pull/2385)
-### MKL
-- Switched from CNTKCustomMKL to Intel MKLML. MKLML is released with [Intel MKL-DNN](https://github.com/01org/mkl-dnn/releases) as a trimmed version of Intel MKL for MKL-DNN. To set it up:
-
-#### On Linux:
- sudo mkdir /usr/local/mklml
- sudo wget https://github.com/01org/mkl-dnn/releases/download/v0.11/mklml_lnx_2018.0.1.20171007.tgz
- sudo tar -xzf mklml_lnx_2018.0.1.20171007.tgz -C /usr/local/mklml
-
-#### On Windows:
- Create a directory on your machine to hold MKLML, e.g. mkdir c:\local\mklml
- Download the file [mklml_win_2018.0.1.20171007.zip](https://github.com/01org/mkl-dnn/releases/download/v0.11/mklml_win_2018.0.1.20171007.zip).
- Unzip it into your MKLML path, creating a versioned sub directory within.
- Set the environment variable `MKLML_PATH` to the versioned sub directory, e.g. setx MKLML_PATH c:\local\mklml\mklml_win_2018.0.1.20171007
-
-## Warning
-### Support for Python 3.4 will be removed from CNTK releases later than v2.3.
+## Bug fixes
+- Fixed convergence issue in Tutorial 201B
+- Fixed pooling/unpooling to support free dimension
\ No newline at end of file
diff --git a/Examples/Evaluation/CNTKAzureTutorial01/CNTKAzureTutorial01/CNTKAzureTutorial01.csproj b/Examples/Evaluation/CNTKAzureTutorial01/CNTKAzureTutorial01/CNTKAzureTutorial01.csproj
index 5fbcf1cd6fd..fd78a979a6b 100644
--- a/Examples/Evaluation/CNTKAzureTutorial01/CNTKAzureTutorial01/CNTKAzureTutorial01.csproj
+++ b/Examples/Evaluation/CNTKAzureTutorial01/CNTKAzureTutorial01/CNTKAzureTutorial01.csproj
@@ -23,8 +23,8 @@
-
- ..\packages\CNTK.CPUOnly.2.3.1\lib\net45\x64\Cntk.Core.Managed-2.3.1.dll
+
+ ..\packages\CNTK.CPUOnly.2.4.0\lib\net45\x64\Cntk.Core.Managed-2.4.dll
True
@@ -148,12 +148,16 @@
-
+
+
+
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
+
+
+
%s%s\n", node->FormatOperationPrototype("").c_str(), dumpGradient ? " Grad" : "");
node->WriteMinibatchWithFormatting(stderr, FrameRange(), SIZE_MAX, SIZE_MAX, false/*transpose*/, /*isCategoryLabel=*/false, /*isSparse=*/false, std::vector(),
- ""/*sequenceSeparator*/, " "/*sequencePrologue*/, "\n"/*sequenceEpilogue*/, " "/*elementSeparator*/, "\n "/*sampleSeparator*/,
- "%13.10f"/*valueFormatString*/, dumpGradient, concise);
+ ""/*sequenceSeparator*/, " "/*sequencePrologue*/, "\n"/*sequenceEpilogue*/, " "/*elementSeparator*/, "\n "/*sampleSeparator*/,
+ "%13.10f"/*valueFormatString*/, dumpGradient, concise);
return true;
}
+// helper for logging. Returns false if it was not able to dump
+static bool DumpNode(ComputationNodeBasePtr nodep, bool dumpGradient)
+{
+ let nodef = dynamic_pointer_cast>(nodep);
+ if (nodef) return TypedDumpNode(nodef, dumpGradient);
+ let noded = dynamic_pointer_cast>(nodep);
+ if (noded) return TypedDumpNode(noded, dumpGradient);
+ let nodeh = dynamic_pointer_cast>(nodep);
+ if (nodeh) return TypedDumpNode(nodeh, dumpGradient);
+ return false;
+}
+
// -----------------------------------------------------------------------
// SEQTraversalFlowControlNode methods -- implements SEQ traversal (loop unrolling)
//
@@ -270,7 +284,9 @@ static bool DumpNode(ComputationNodeBasePtr nodep, bool dumpGradient)
{
for (auto& node : m_nestedNodes)
{
+ node->BeginTiming(false /*backward*/);
node->ForwardProp(t);
+ node->EndTiming(false /*backward*/);
node->BumpEvalTimeStamp();
}
}
@@ -280,7 +296,7 @@ static bool DumpNode(ComputationNodeBasePtr nodep, bool dumpGradient)
{
if (node->HasEnvironmentPtr() && node->Environment().ShouldDumpNode())
{
- DumpNode(node, /*dumpGradient=*/false) || DumpNode(node, false);
+ DumpNode(node, /*dumpGradient=*/false);
}
}
}
@@ -310,7 +326,9 @@ static bool DumpNode(ComputationNodeBasePtr nodep, bool dumpGradient)
for (auto nodeIter2 = recurrentNodes.rbegin(); nodeIter2 != recurrentNodes.rend(); ++nodeIter2)
{
auto& node2 = *nodeIter2;
+ node2->BeginTiming(true /*backward*/);
node2->Backprop(t, true /*childrenInThisLoop*/, false /*childrenInOuterLoop*/);
+ node2->EndTiming(true /*backward*/);
// The above flags tell Backprop() to skip back-propagation from inside a node into
// a node that is outside the loop, which is done later in EndBackprop() in PAR mode.
}
@@ -321,7 +339,7 @@ static bool DumpNode(ComputationNodeBasePtr nodep, bool dumpGradient)
{
if (node->HasEnvironmentPtr() && node->Environment().ShouldDumpNode() && node->NeedsGradient())
{
- DumpNode(node, /*dumpGradient=*/true) || DumpNode(node, true);
+ DumpNode(node, /*dumpGradient=*/true);
}
}
}
diff --git a/Source/ComputationNetworkLib/ComputationNetworkLib.vcxproj b/Source/ComputationNetworkLib/ComputationNetworkLib.vcxproj
index c2f5b7b3e2d..40fc853e030 100644
--- a/Source/ComputationNetworkLib/ComputationNetworkLib.vcxproj
+++ b/Source/ComputationNetworkLib/ComputationNetworkLib.vcxproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -52,7 +52,7 @@
- $(SolutionDir)Source\SequenceTrainingLib;$(BOOST_INCLUDE_PATH);$(SolutionDir)Source\CNTKv2LibraryDll\API;$(SolutionDir)Source\CNTKv2LibraryDll;$(SolutionDir)Source\Math;$(SolutionDir)Source\Common\Include;$(SolutionDir)Source\CNTK\BrainScript;$(SolutionDir)Source\ActionsLib;$(MSMPI_INC);$(NvmlInclude)
+ $(SolutionDir)Source\SequenceTrainingLib;$(BOOST_INCLUDE_PATH);$(SolutionDir)Source\CNTKv2LibraryDll\API;$(SolutionDir)Source\CNTKv2LibraryDll;$(SolutionDir)Source\Math;$(SolutionDir)Source\Common\Include;$(SolutionDir)Source\CNTK\BrainScript;$(SolutionDir)Source\ActionsLib;$(MSMPI_INC);$(NvmlInclude);$(SolutionDir)Source\PerformanceProfilerDll;
WIN32;_CONSOLE;%(PreprocessorDefinitions)
diff --git a/Source/ComputationNetworkLib/ComputationNode.cpp b/Source/ComputationNetworkLib/ComputationNode.cpp
index d1057dda6ac..7d6ee20234c 100644
--- a/Source/ComputationNetworkLib/ComputationNode.cpp
+++ b/Source/ComputationNetworkLib/ComputationNode.cpp
@@ -10,13 +10,21 @@
#include "ComputationNetworkBuilder.h" // TODO: We should only pull in NewComputationNodeFromConfig(). Nodes should not know about network at large.
#include "TensorShape.h"
+#ifndef CNTK_UWP
+#include "PerformanceProfiler.h"
+#ifdef _WIN32
+#define PERFORMANCE_PROFILER_LIB_NAME "Cntk.PerformanceProfiler-"##CNTK_COMPONENT_VERSION##".lib"
+#pragma comment(lib, PERFORMANCE_PROFILER_LIB_NAME)
+#endif
+#endif
+
#ifndef let
#define let const auto
#endif
namespace Microsoft { namespace MSR { namespace CNTK {
-using namespace std;
+ using namespace std;
// -----------------------------------------------------------------------
// subroutines for evaluation
@@ -85,18 +93,18 @@ void ComputationNode::Backprop(const FrameRange& fr, bool childrenInTh
for (size_t i = 0; i < m_inputs.size(); i++)
{
- ComputationNodePtr child = Input(i);
- if (child->m_needsGradient &&
+ ComputationNodeBasePtr child = m_inputs[i];
+ if (child->NeedsGradient() &&
((childrenInThisLoop && child->IsPartOfLoop() == IsPartOfLoop()) ||
(childrenInOuterLoop && child->IsPartOfLoop() != IsPartOfLoop()) ))
{
// fprintf(stderr, "Backprop: %ls %ls operation -> child %d %ls %ls\n", NodeName().c_str(), OperationName().c_str(), (int)i, child->NodeName().c_str(), child->OperationName().c_str());
- if (!m_needsGradient)
+ if (!NeedsGradient())
LogicError("%ls %ls operation has m_needsGradient set to false but children require it.", NodeName().c_str(), OperationName().c_str());
#if DUMPOUTPUT
fprintf(stderr, "Backprop%d_%ls\n", i, NodeName().c_str());
#endif
- child->LazyZeroGradient(this); // set gradient to 0 if this is the first time
+ SMART_NODE_INVOKE(ComputationNode, child, LazyZeroGradient, this); // set gradient to 0 if this is the first time
// If we propagate from a loop to a node that is outside the loop, we are not efficient.
// This case is handled by SEQTraversalFlowControlNode::Backprop().
@@ -108,7 +116,7 @@ void ComputationNode::Backprop(const FrameRange& fr, bool childrenInTh
}
// before backprop, verify gradient optimization info
- Input(i)->VerifyGradientOptimization(this);
+ SMART_NODE_INVOKE(ComputationNode, child, VerifyGradientOptimization, this);
// fprintf(stderr, "BackpropTo %d %d %ls %ls\n", (int)fr.timeIdxInSeq, (int)i, NodeName().c_str(), OperationName().c_str());
BackpropTo(i, fr); // this computes partial wrt to the child and sums the gradient value in the child
@@ -753,11 +761,14 @@ template
{
for (size_t i = 0; i < m_inputs.size(); i++)
{
- ComputationNodePtr child = Input(i);
- if (child->m_needsGradient)
+ ComputationNodeBasePtr child = m_inputs[i];
+ if (child->NeedsGradient())
{
- child->MaskMissingGradientColumnsToZero(FrameRange(child->GetMBLayout())); // HasNaN() operates on a whole matrix, so first flatten all gaps to 0
- if (child->Gradient().HasNan("EndBackprop"))
+ SMART_NODE_INVOKE(ComputationNode, child, MaskMissingGradientColumnsToZero, FrameRange(child->GetMBLayout())); // HasNaN() operates on a whole matrix, so first flatten all gaps to 0
+
+ bool hasNan = false;
+ SMART_NODE_INVOKE_WITH_RET(ComputationNode, child, Gradient().HasNan, hasNan, "EndBackprop");
+ if (hasNan)
{
LogicError("%ls %ls operation unexpectedly produced NaN gradients on its input %ls.", NodeName().c_str(), OperationName().c_str(), child->NodeName().c_str());
}
@@ -766,6 +777,67 @@ template
}
}
+template
+/*virtual*/ void ComputationNode::BeginTiming(bool backward)
+{
+ if (!Globals::ShouldEnableNodeTiming()) return;
+
+ int phase = (backward ? (int)TimingPhase_Backward : (int)TimingPhase_Forward);
+ auto& timing = m_timing[phase];
+ timing.beginTime = std::chrono::system_clock::now();
+ timing.count++;
+#ifndef CNTK_UWP
+ timing.profilerId = ProfilerTimeBegin();
+#endif
+}
+
+template
+/*virtual*/ void ComputationNode::EndTiming(bool backward)
+{
+ if (!Globals::ShouldEnableNodeTiming()) return;
+
+ int phase = (backward ? (int)TimingPhase_Backward : (int)TimingPhase_Forward);
+ auto& timing = m_timing[phase];
+ timing.duration += (std::chrono::system_clock::now() - timing.beginTime);
+
+#ifndef CNTK_UWP
+ // the order must match enum
+ static const char* postfixes[TimingPhase_Total] =
+ {
+ "Forward",
+ "Backward",
+ };
+
+ if (timing.profilerName.length() != m_nodeName.length() + strlen(postfixes[phase]))
+ {
+ static char name[256];
+ sprintf_s(name, _countof(name), "%S%s", m_nodeName.c_str(), postfixes[phase]);
+ timing.profilerName = name;
+ }
+ ProfilerTimeEnd(timing.profilerId, timing.profilerName.c_str());
+#endif
+}
+
+template
+void ComputationNode::PrintForwardBackwardTime()
+{
+ if (GetInputs().size() == 0) return;
+
+ auto& forwardCount = m_timing[TimingPhase_Forward].count;
+ auto forwardDuration = m_timing[TimingPhase_Forward].duration.count();
+ auto& backwardCount = m_timing[TimingPhase_Backward].count;
+ auto backwardDuration = m_timing[TimingPhase_Backward].duration.count();
+ fprintf(stderr, "%-30S forward avg %07fs, backward avg %07fs (fwd# %d|bwd# %d)\n",
+ m_nodeName.c_str(),
+ forwardCount == 0 ? 0 : forwardDuration / forwardCount,
+ backwardCount == 0 ? 0 : backwardDuration / backwardCount,
+ forwardCount,
+ backwardCount);
+
+ for (auto& timing : m_timing)
+ timing.Reset();
+}
+
template
/*virtual*/ void ComputationNode::DumpNodeInfo(const bool /*printValues*/, const bool printMetadata, File& fstream) const
{
@@ -1004,7 +1076,7 @@ void ComputationNode::WriteMinibatchWithFormatting(FILE* f,
double absSumLocal = 0;
for (size_t j = 0; j < jend; j++) // loop over elements
{
- absSumLocal += abs(seqData[i * istride + j * jstride]);
+ absSumLocal += (double)abs(seqData[i * istride + j * jstride]);
}
absSum += absSumLocal;
}
@@ -1136,6 +1208,7 @@ atomic_ullong TimeStamp::s_timeStampCounter = ATOMIC_VAR_INIT(0);
template <> map>> ComputationNode::s_constOnes{};
template <> map>> ComputationNode::s_constOnes{};
+template <> map>> ComputationNode::s_constOnes{};
// -----------------------------------------------------------------------
// instantiate the core class templates
@@ -1143,6 +1216,7 @@ template <> map>> ComputationNode;
template class ComputationNode;
+template class ComputationNode;
}}}
diff --git a/Source/ComputationNetworkLib/ComputationNode.h b/Source/ComputationNetworkLib/ComputationNode.h
index 44aef1ca58e..45aa444ba26 100644
--- a/Source/ComputationNetworkLib/ComputationNode.h
+++ b/Source/ComputationNetworkLib/ComputationNode.h
@@ -59,7 +59,9 @@
#define CNTK_MODEL_VERSION_27 27 // Slice: support stride_multiplier, and to_batch / unpack_bach axis ops;
// Reduction: Add reduction over multiple axes
#define CNTK_MODEL_VERSION_28 28 // Padding op
-#define CURRENT_CNTK_MODEL_VERSION CNTK_MODEL_VERSION_28
+#define CNTK_MODEL_VERSION_29 29 // Expose StopGradient in BS
+#define CNTK_MODEL_VERSION_30 30 // LatticeWithSequenceSoftmax node
+#define CURRENT_CNTK_MODEL_VERSION CNTK_MODEL_VERSION_30
// helper mode for debugging
// If TRACK_GAP_NANS is defined then initialize layout gaps to NaN and do NaN checks. Also do detailed logging of node computations.
@@ -100,6 +102,9 @@ struct /*interface*/ IComputationNode
virtual void ForwardProp(const FrameRange&) = 0; // forward prop for one minibatch
virtual void EndForwardProp() = 0; // called after last iteration step of ForwardProp()
+ virtual void BeginTiming(bool backward) = 0; // called before Forward/Backward for node timing
+ virtual void EndTiming(bool backward) = 0; // called after Foward/Backward for node timing
+
virtual void PostForwardAndBackProp() {} // Optional: Post forward and backprop prop for one minibatch, this will be called in a second
// looping on the graph, after the backward pass finish. Or after forward pass in inference
// mode.
@@ -785,6 +790,9 @@ protected: public: // ...the following should be protected, but nodes inquire ab
#endif
}
+ virtual void /*IComputationNode::*/ BeginTiming(bool) override {}
+ virtual void /*IComputationNode::*/ EndTiming(bool) override {}
+
// check whether a node is out of date w.r.t. its children, for lazy evaluation
// If this returns true, node must be evaluated to update m_value.
// This is virtual because it is overridden by traversal nodes, which would check all their nodes' inputs.
@@ -1373,7 +1381,7 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
m_inputs.resize(inputs.size());
for (size_t i = 0; i < m_inputs.size(); i++)
if (inputs[i])
- m_inputs[i] = DownCast(inputs[i]); // (DownCast() checks the type; the assignment then downcasts it again)
+ m_inputs[i] = inputs[i]; // remove DownCast check here to allow CastNode to pass
else
m_inputs[i] = nullptr; // during network creation, nullptrs are possible
@@ -1385,6 +1393,8 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
}
}
+ void PrintForwardBackwardTime();
+
protected:
// AttachInputs() from config
@@ -1428,6 +1438,19 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
return DownCast(m_inputs[inputIndex]);
}
+ template
+ inline shared_ptr> TypedInput(const size_t inputIndex) const
+ {
+ if (inputIndex >= m_inputs.size())
+ LogicError("Inputs: inputIndex %d is out of range for %ls %ls operation.", (int)inputIndex, NodeName().c_str(), OperationName().c_str());
+
+ shared_ptr> node = dynamic_pointer_cast>(m_inputs[inputIndex]);
+ if (!node)
+ InvalidArgument("an TypedInput of mismatching precision was passed");
+
+ return node;
+ }
+
// Fast downcast without runtime type check of dynamic_pointer_cast.
// Meant to be used in Forward and BackPropTo, assuming that Validate() has already used Input() which validated the correct types.
inline ComputationNode& InputRef(const size_t inputIndex) const
@@ -1761,6 +1784,10 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
virtual void /*IComputationNode::*/ EndBackprop() override;
+ virtual void /*IComputationNode::*/ BeginTiming(bool) override;
+
+ virtual void /*IComputationNode::*/ EndTiming(bool) override;
+
// this is the entry point from Network; while it will call virtual BackpropTo() into the actual node implementation
// TODO: move to -Base (or -Network?)
void Backprop(const FrameRange& fr, bool childrenInThisLoop, bool childrenInOuterLoop) override;
@@ -1927,24 +1954,36 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
// if the matrix's size will scale with minibatch size, set mbScale = true
// if workspace flag is true, the memory request will be treated specially. We assume workspace memory will share their own pointers
// this is currently a workaround for workspace memory for convolutions
- void RequestMatrixFromPool(shared_ptr>& matrixPtr, MatrixPool& matrixPool, size_t matrixSize=0, bool mbScale=false, bool isWorkSpace=false, bool aliasing=false)
+ template
+ void TypedRequestMatrixFromPool(shared_ptr>& matrixPtr, MatrixPool& matrixPool, size_t matrixSize=0, bool mbScale=false, bool isWorkSpace=false, bool aliasing=false)
{
if (matrixPtr == nullptr)
{
if (aliasing)
- matrixPool.RequestAliasedAllocate(m_deviceId, this, &matrixPtr, matrixSize, mbScale);
+ matrixPool.RequestAliasedAllocate(m_deviceId, this, &matrixPtr, matrixSize, mbScale);
else
- matrixPool.RequestAllocate(m_deviceId, &matrixPtr, matrixSize, mbScale, isWorkSpace);
+ matrixPool.RequestAllocate(m_deviceId, &matrixPtr, matrixSize, mbScale, isWorkSpace);
}
}
- void ReleaseMatrixToPool(shared_ptr>& matrixPtr, MatrixPool& matrixPool, bool aliasing=false)
+ template
+ void TypedReleaseMatrixToPool(shared_ptr>& matrixPtr, MatrixPool& matrixPool, bool aliasing=false)
{
assert(matrixPtr != nullptr);
if (aliasing)
- matrixPool.RequestAliasedRelease(this);
+ matrixPool.RequestAliasedRelease(this);
else
- matrixPool.RequestRelease(&matrixPtr);
+ matrixPool.RequestRelease(&matrixPtr);
+ }
+
+ void RequestMatrixFromPool(shared_ptr>& matrixPtr, MatrixPool& matrixPool, size_t matrixSize = 0, bool mbScale = false, bool isWorkSpace = false, bool aliasing = false)
+ {
+ TypedRequestMatrixFromPool(matrixPtr, matrixPool, matrixSize, mbScale, isWorkSpace, aliasing);
+ }
+
+ void ReleaseMatrixToPool(shared_ptr>& matrixPtr, MatrixPool& matrixPool, bool aliasing = false)
+ {
+ TypedReleaseMatrixToPool(matrixPtr, matrixPool, aliasing);
}
public:
@@ -2112,7 +2151,7 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
s_constOnes[rows].find(cols) == s_constOnes[rows].end()) // not found
{
shared_ptr> matrix = make_shared>(rows, cols, (DEVICEID_TYPE) deviceId);
- matrix->SetValue(1);
+ matrix->SetValue((ElemType)1);
s_constOnes[rows][cols] = matrix;
}
@@ -2133,6 +2172,28 @@ class ComputationNode : public ComputationNodeBase // abstract class that cannot
static std::map>>> s_constOnes;
MatrixType m_preferredGradientMatrixType = UNDETERMINED;
+
+ enum TimingPhase
+ {
+ TimingPhase_Forward = 0,
+ TimingPhase_Backward,
+ TimingPhase_Total
+ };
+
+ struct Timing
+ {
+ std::chrono::system_clock::time_point beginTime;
+ int count = 0;
+ std::chrono::duration duration = std::chrono::duration(0);
+ long long profilerId;
+ std::string profilerName;
+
+ void Reset()
+ {
+ duration = std::chrono::duration(0);
+ count = 0;
+ }
+ } m_timing[TimingPhase_Total];
};
// convenience wrapper for ComputationNode::New()
@@ -2514,4 +2575,26 @@ class BinaryElementWiseNode : public ComputationNode, public NumInputs
#pragma endregion base computation class
+#define SMART_NODE_INVOKE(nodeClass, node, func, ...) \
+ do { \
+ if (dynamic_pointer_cast>(node)) \
+ dynamic_pointer_cast>(node)->func(__VA_ARGS__); \
+ else if (dynamic_pointer_cast>(node)) \
+ dynamic_pointer_cast>(node)->func(__VA_ARGS__); \
+ else if (dynamic_pointer_cast>(node)) \
+ dynamic_pointer_cast>(node)->func(__VA_ARGS__); \
+ else \
+ LogicError("Unknown nodeClass type"); \
+ } while(0)
+
+#define SMART_NODE_INVOKE_WITH_RET(nodeClass, node, func, ret, ...) \
+ do { \
+ if (dynamic_pointer_cast>(node)) \
+ ret = dynamic_pointer_cast>(node)->func(__VA_ARGS__); \
+ else if (dynamic_pointer_cast>(node)) \
+ ret = dynamic_pointer_cast>(node)->func(__VA_ARGS__); \
+ else if (dynamic_pointer_cast>(node)) \
+ ret = dynamic_pointer_cast>(node)->func(__VA_ARGS__); \
+ else LogicError("Unknown ComputationNode type"); \
+ } while(0)
}}}
diff --git a/Source/ComputationNetworkLib/ConvolutionalNodes.h b/Source/ComputationNetworkLib/ConvolutionalNodes.h
index 6c75a3082c9..32747da4165 100644
--- a/Source/ComputationNetworkLib/ConvolutionalNodes.h
+++ b/Source/ComputationNetworkLib/ConvolutionalNodes.h
@@ -244,6 +244,13 @@ class ConvolutionNodeBase : public ComputationNode
return result;
}
+ TensorShape ComputeOutputShape(const TensorShape& inputShape, const TensorShape& dilate, bool ceilOutDim, bool isFinalValidationPass)
+ {
+ return ConvolveGeometry::ComputeOutputShape(inputShape, m_kernelShape, m_mapCount, m_stride,
+ m_sharing, m_autoPad, m_lowerPad, m_upperPad, dilate, ceilOutDim,
+ Base::NeedsDynamicValidation(), isFinalValidationPass);
+ }
+
protected:
TensorShape m_kernelShape;
TensorShape m_mapCount;
@@ -280,7 +287,7 @@ protected: \
using Base::m_transpose; \
using Base::m_outputShape; \
using Base::m_ceilOutDim; \
- using Base::m_poolIncludePad; \
+ using Base::m_poolIncludePad; \
using Base::m_imageLayout; \
using Base::m_maxTempMemSizeInSamples; \
using Base::m_tempMatrixForward; \
@@ -493,8 +500,7 @@ class ConvolutionNode : public ConvolutionNodeBase, public NumInputs<2
Input(0)->NodeName().c_str(), (int)mapCount, (int)weightCols);
}
- outputShape = ConvolveGeometry::ComputeOutputShape(inputShape, m_kernelShape, m_mapCount, m_stride,
- m_sharing, m_autoPad, m_lowerPad, m_upperPad);
+ outputShape = this->ComputeOutputShape(inputShape, TensorShape(1), /*ceilOutDim*/false, isFinalValidationPass);
// ConvolveGeometry always uses CHW.
SetDims(ImageDimensions(outputShape, ImageLayoutKind::CHW).AsTensorShape(m_imageLayout), HasMBLayout());
}
@@ -505,9 +511,7 @@ class ConvolutionNode : public ConvolutionNodeBase, public NumInputs<2
InferReductionDims(inputShape, inputShape);
if (!m_transpose)
{
- outputShape = ConvolveGeometry::ComputeOutputShape(inputShape, m_kernelShape, m_mapCount, m_stride,
- m_sharing, m_autoPad, m_lowerPad, m_upperPad, m_dilation, false,
- this->NeedsDynamicValidation(), isFinalValidationPass);
+ outputShape = this->ComputeOutputShape(inputShape, m_dilation, /*ceilOutDim*/false, isFinalValidationPass);
if (m_outputShape.GetRank() > 0 && m_outputShape != TensorShape(0)) // user have explicitly set m_outputShape, we check if it's the same as outputShape
{
@@ -529,15 +533,13 @@ class ConvolutionNode : public ConvolutionNodeBase, public NumInputs<2
// and node output (outDims) is convolution input. ConvolveGeometry does not care about deconvolutions (it does not have to).
outputShape = ConvolveGeometry::ComputeInputShape(inputShape, m_kernelShape, m_mapCount, m_stride,
m_sharing, m_autoPad, m_lowerPad, m_upperPad, TensorShape(1), false,
- this->NeedsDynamicValidation(), isFinalValidationPass);
+ Base::NeedsDynamicValidation(), isFinalValidationPass);
}
else
{
// in case the user specifies the output shape, we make sure the input shape can be the result of
// convolution from the specified output shape
- auto inferredShape = ConvolveGeometry::ComputeOutputShape(m_outputShape, m_kernelShape, m_mapCount, m_stride,
- m_sharing, m_autoPad, m_lowerPad, m_upperPad, TensorShape(1), false,
- this->NeedsDynamicValidation(), isFinalValidationPass);
+ auto inferredShape = this->ComputeOutputShape(m_outputShape, TensorShape(1), false, isFinalValidationPass);
if (inputShape != inferredShape)
InvalidArgument("%ls %ls the shape of the convolution transpose operand %ls is different from "
"the result of convoluting the specified output argument using "
@@ -954,8 +956,7 @@ class PoolingNode : public ConvolutionNodeBase, public NumInputs<1>, p
// infer reduction dimensions if not given
InferReductionDims(inputShape, TensorShape());
- auto outDims = ConvolveGeometry::ComputeOutputShape(inputShape, m_kernelShape, m_mapCount, m_stride,
- m_sharing, m_autoPad, m_lowerPad, m_upperPad, TensorShape(1), m_ceilOutDim);
+ auto outDims = this->ComputeOutputShape(inputShape, TensorShape(1), m_ceilOutDim, isFinalValidationPass);
SetDims(outDims, HasMBLayout());
if (isFinalValidationPass)
{
@@ -1078,8 +1079,7 @@ class MaxUnpoolingNode : public ConvolutionNodeBase, public NumInputs<
// Same as in case of deconvolution, node input (inputShape) is really the output of the max pooling
// and node output (outDims) is pooling input.
auto outputShape = GetInputSampleLayout(1);
- auto inferredShape = ConvolveGeometry::ComputeOutputShape(outputShape, m_kernelShape, m_mapCount, m_stride,
- m_sharing, m_autoPad, m_lowerPad, m_upperPad);
+ auto inferredShape = this->ComputeOutputShape(outputShape, TensorShape(1), false, isFinalValidationPass);
if (inputShape != inferredShape)
InvalidArgument("%ls %ls the shape of the unpooling operand %ls is different from "
"the result of pooling the poolingInput argument using"
diff --git a/Source/ComputationNetworkLib/EvaluationNodes.h b/Source/ComputationNetworkLib/EvaluationNodes.h
index 27031941090..8431eb95491 100644
--- a/Source/ComputationNetworkLib/EvaluationNodes.h
+++ b/Source/ComputationNetworkLib/EvaluationNodes.h
@@ -873,6 +873,7 @@ class OneHotNode : public ComputationNodeNonLooping, public NumInputs<
template class OneHotNode;
template class OneHotNode;
+template class OneHotNode;
#ifdef COMING_SOON
diff --git a/Source/ComputationNetworkLib/InputAndParamNodes.cpp b/Source/ComputationNetworkLib/InputAndParamNodes.cpp
index a04e5cc182e..821fa7b8ffc 100644
--- a/Source/ComputationNetworkLib/InputAndParamNodes.cpp
+++ b/Source/ComputationNetworkLib/InputAndParamNodes.cpp
@@ -104,7 +104,7 @@ LearnableParameter::LearnableParameter(const ScriptableObjects::IConfi
static unsigned long randomSeed = 1;
int forcedRandomSeed = configp->Get(L"randomSeed"); // forcing a specific random seed is useful for testing to get repeatable initialization independent of evaluation order
m_randomSeed = forcedRandomSeed < 0 ? randomSeed++ : (unsigned long)forcedRandomSeed;
- m_initValueScale = configp->Get(L"initValueScale");
+ m_initValueScale = (ElemType)(float)configp->Get(L"initValueScale");
m_initFilterRank = configp->Get(L"initFilterRank");
m_initOutputRank = configp->Get(L"initOutputRank");
m_initOnCPUOnly = configp->Get(L"initOnCPUOnly");
@@ -112,12 +112,12 @@ LearnableParameter::LearnableParameter(const ScriptableObjects::IConfi
else if (initString == L"zero")
{
m_initString = L"fromValue";
- m_initValue = 0;
+ m_initValue = (ElemType)0;
}
else if (initString == L"fromValue") // from 'initValue'
{
m_initString = initString;
- m_initValue = initValue;
+ m_initValue = (ElemType)(float)initValue;
}
else if (initString == L"bilinear")
{
@@ -138,7 +138,7 @@ LearnableParameter::LearnableParameter(const ScriptableObjects::IConfi
else if (initString == L"fixedValue") // deprecated. Use initValue=... instead
{
m_initString = L"fromValue";
- m_initValue = (ElemType)configp->Get(L"value");
+ m_initValue = (ElemType)(float)configp->Get(L"value");
}
else if (initString == L"fromLiteral") // deprecated. Use initValue=array instead
{
@@ -549,7 +549,7 @@ void LearnableParameter::LazyInitParameters()
if (m_initString == L"fromValue")
{
if (GetEnvironmentPtr() && Environment().traceLevel > 0) // note: this will not log before node is part of network
- fprintf(stderr, "%ls: Initializing Parameter[%s] <- %f.\n", NodeDescription().c_str(), string(GetSampleLayout()).c_str(), m_initValue);
+ fprintf(stderr, "%ls: Initializing Parameter[%s] <- %f.\n", NodeDescription().c_str(), string(GetSampleLayout()).c_str(), (float)m_initValue);
Value().SetValue(m_initValue);
}
else if (ParseRandomizationType(m_initString).second != 0)
@@ -651,5 +651,6 @@ template
template class LearnableParameter;
template class LearnableParameter;
+template class LearnableParameter;
}}}
diff --git a/Source/ComputationNetworkLib/InputAndParamNodes.h b/Source/ComputationNetworkLib/InputAndParamNodes.h
index 0ae96a60c39..84642fe7227 100644
--- a/Source/ComputationNetworkLib/InputAndParamNodes.h
+++ b/Source/ComputationNetworkLib/InputAndParamNodes.h
@@ -108,7 +108,7 @@ class LearnableParameter : public ComputationNode, public NumInputs<0>
{
fprintf(stderr, "%ls: Initializing Parameter[%s] <- %ls(seed=%d, init dims=[%d x %d], range=%f(%f*%f), onCPU=%s.\n)",
NodeDescription().c_str(), string(GetSampleLayout()).c_str(), m_initString.c_str(),
- (int)randomSeed, (int)fanOut, (int)fanIn, range, range/initValueScale, initValueScale, initOnCPUOnly ? "true" : "false");
+ (int)randomSeed, (int)fanOut, (int)fanIn, (float)range, (float)(range/initValueScale), (float)(initValueScale), initOnCPUOnly ? "true" : "false");
}
}
diff --git a/Source/ComputationNetworkLib/LinearAlgebraNodes.cpp b/Source/ComputationNetworkLib/LinearAlgebraNodes.cpp
index bfe76624a84..6db28c4a74c 100644
--- a/Source/ComputationNetworkLib/LinearAlgebraNodes.cpp
+++ b/Source/ComputationNetworkLib/LinearAlgebraNodes.cpp
@@ -41,6 +41,9 @@ template void Microsoft::MSR::CNTK::UpdateRunningAverage(ComputationNode<
template void Microsoft::MSR::CNTK::UpdateRunningAverage(ComputationNode& newInput,
TensorView& runningAverage,
size_t& runningCount);
+template void Microsoft::MSR::CNTK::UpdateRunningAverage(ComputationNode& newInput,
+ TensorView& runningAverage,
+ size_t& runningCount);
template
EpochAccumulatorNode::EpochAccumulatorNode(DEVICEID_TYPE deviceId, const wstring& name)
@@ -127,4 +130,5 @@ void EpochAccumulatorNode::Reset()
}
template class EpochAccumulatorNode;
-template class EpochAccumulatorNode;
\ No newline at end of file
+template class EpochAccumulatorNode;
+template class EpochAccumulatorNode;
\ No newline at end of file
diff --git a/Source/ComputationNetworkLib/LinearAlgebraNodes.h b/Source/ComputationNetworkLib/LinearAlgebraNodes.h
index 7d464b95aff..14b4133a6d1 100755
--- a/Source/ComputationNetworkLib/LinearAlgebraNodes.h
+++ b/Source/ComputationNetworkLib/LinearAlgebraNodes.h
@@ -91,6 +91,7 @@ class PlusNode : public BinaryElementWiseNode
template class PlusNode;
template class PlusNode;
+template class PlusNode;
// -----------------------------------------------------------------------
// LogPlusNode (summand1, summand2)
@@ -165,6 +166,7 @@ class LogPlusNode : public BinaryElementWiseNode
template class LogPlusNode;
template class LogPlusNode;
+template class LogPlusNode;
// -----------------------------------------------------------------------
@@ -225,6 +227,7 @@ class PowNode : public BinaryElementWiseNode
template class PowNode;
template class PowNode;
+template class PowNode;
// -----------------------------------------------------------------------
@@ -287,6 +290,7 @@ class MinusNode : public BinaryElementWiseNode
template class MinusNode;
template class MinusNode;
+template class MinusNode;
// -----------------------------------------------------------------------
// ElementTimesNode (factor1, factor2)
@@ -360,6 +364,7 @@ class ElementTimesNode : public BinaryElementWiseNode
template class ElementTimesNode;
template class ElementTimesNode;
+template class ElementTimesNode;
// -----------------------------------------------------------------------
// TimesNodeBase (A, B, outputRank=1)
@@ -439,6 +444,19 @@ class TimesNodeBase : public ComputationNode, public NumInputs<2>
return TensorView(data, tensorShape);
}
+ static std::pair CalcOutputMatrixSize(const size_t leftRank , const size_t rightRank, const TensorShape& outShape)
+ {
+ size_t outRank = outShape.GetRank();
+ size_t m = 1;
+ size_t n = 1;
+ size_t firstReducedDim = leftRank - (leftRank + rightRank - outRank) / 2;
+ for (size_t i = 0; i < firstReducedDim; i++)
+ m *= outShape.GetDim(i);
+ for (size_t i = firstReducedDim; i < outRank; i++)
+ n *= outShape.GetDim(i);
+ return std::make_pair(m, n);
+ }
+
private:
// Check if TimesNodeBase could be simplified to ElementTimes to avoid unroll when:
// 1. input0: is rank-1 and transposed, or is rank-2 with Dim(0)==1
@@ -593,7 +611,7 @@ class TimesNodeBase : public ComputationNode, public NumInputs<2>
Matrix inputValueSlice = unpackedInputValue.ColumnSlice(s * maxNumTimeSteps, maxNumTimeSteps); // k x s*
inputValueSlice.Reshape(k * maxNumTimeSteps, 1); // (k * s*) x 1
Matrix gradientSlice = Gradient().ColumnSlice(s, 1); // m x 1
- Matrix::MultiplyAndWeightedAdd(1, gradientSlice, false, inputValueSlice, true, unpacked[inputIndex] ? 0 : beta, inputGradientSlice);
+ Matrix::MultiplyAndWeightedAdd(1, gradientSlice, false, inputValueSlice, true, unpacked[inputIndex] ? (ElemType)0 : beta, inputGradientSlice);
}
if (unpacked[inputIndex])
@@ -611,7 +629,7 @@ class TimesNodeBase : public ComputationNode, public NumInputs<2>
Matrix inputValueSlice = unpackedInputValue.ColumnSlice(s * maxNumTimeSteps, maxNumTimeSteps); // (m * k) x s*
inputValueSlice.Reshape(m, k * maxNumTimeSteps); // m x (k * s*)
Matrix gradientSlice = Gradient().ColumnSlice(s, 1); // m x 1
- Matrix::MultiplyAndWeightedAdd(1, inputValueSlice, true, gradientSlice, false, unpacked[inputIndex] ? 0 : beta, inputGradientSlice);
+ Matrix::MultiplyAndWeightedAdd(1, inputValueSlice, true, gradientSlice, false, unpacked[inputIndex] ? (ElemType)0 : beta, inputGradientSlice);
}
if (unpacked[inputIndex])
@@ -663,6 +681,16 @@ class TimesNodeBase : public ComputationNode, public NumInputs<2>
return;
}
+ if (fr.IsBatchMatmul(inputMBLayout) && fr.IsBatchMatmul(InputRef(1).GetMBLayout()) && !hasSparse)
+ {
+ auto mn = CalcOutputMatrixSize(InputRef(0).GetSampleLayout().GetRank(), InputRef(1).GetSampleLayout().GetRank(), GetSampleLayout());
+ Matrix value = ValueFor(fr);
+ Matrix input0 = InputRef(0).ValueFor(fr);
+ Matrix input1 = InputRef(1).ValueFor(fr);
+ Matrix::BatchMatMul(ElemType(0.0), input0, m_transpose, mn.first, input1, false, mn.second, value, true);
+ return;
+ }
+
// recursively call ourselves for each individual time and sequence
// note this is not performant, warn user about the slow path being used
@@ -726,6 +754,45 @@ class TimesNodeBase : public ComputationNode, public NumInputs<2>
return;
}
+ ElemType beta = Input(inputIndex)->IsGradientInitializedBy(this) ? (ElemType)0.0 : (ElemType)1.0;
+ if (inputIndex == 0)
+ {
+ if (fr.IsBatchMatmul(InputRef(0).GetMBLayout()) && fr.IsBatchMatmul(InputRef(1).GetMBLayout()) && !hasSparse)
+ {
+ Matrix outputGradient = GradientFor(fr);
+ Matrix input1 = InputRef(1).ValueFor(fr);
+ Matrix input0Gradient = InputRef(0).GradientFor(fr);
+ if (!m_transpose)
+ {
+ auto mn = CalcOutputMatrixSize(GetSampleLayout().GetRank(), InputRef(1).GetSampleLayout().GetRank(), InputRef(0).GetSampleLayout());
+ Matrix::BatchMatMul(beta, outputGradient, false, mn.first, input1, true, mn.second, input0Gradient, true);
+ }
+ else
+ {
+ auto mn = CalcOutputMatrixSize(InputRef(1).GetSampleLayout().GetRank(), GetSampleLayout().GetRank(), InputRef(0).GetSampleLayout());
+ Matrix::BatchMatMul(beta, input1, false, mn.first, outputGradient, true, mn.second, input0Gradient, true);
+ }
+ return;
+ }
+ }
+ else if (inputIndex == 1)
+ {
+ if (fr.IsBatchMatmul(InputRef(0).GetMBLayout()) && fr.IsBatchMatmul(InputRef(1).GetMBLayout()) && !hasSparse)
+ {
+ auto mn = CalcOutputMatrixSize(InputRef(0).GetSampleLayout().GetRank(), GetSampleLayout().GetRank(), InputRef(1).GetSampleLayout());
+ Matrix input0 = InputRef(0).ValueFor(fr);
+ Matrix input1Gradient = InputRef(1).GradientFor(fr);
+ Matrix outputGradient = GradientFor(fr);
+
+ Matrix::BatchMatMul(beta, input0, !m_transpose, mn.first, outputGradient, false, mn.second, input1Gradient, true);
+ return;
+ }
+ }
+
+ // note this is not performant, warn user about the slow path being used
+ if (Base::HasEnvironmentPtr() && Base::Environment().traceLevel > 0)
+ std::call_once(m_unrollWarningOnceFlag, [this] { fprintf(stderr, "WARNING: %ls %ls operation: being unrolled in backprop, execution may be slow\n", NodeName().c_str(), OperationName().c_str()); });
+
auto timeRange = fr.GetTimeRange();
auto sequenceRange = fr.GetSequenceRange();
// when unroll, parent overwrite gradient should be ignored
@@ -1051,6 +1118,7 @@ class TimesNode : public TimesNodeBase
template class TimesNode;
template class TimesNode;
+template class TimesNode;
// -----------------------------------------------------------------------
// TransposeTimesNode (A', B)
@@ -1080,6 +1148,7 @@ class TransposeTimesNode : public TimesNodeBase
template class TransposeTimesNode;
template class TransposeTimesNode;
+template class TransposeTimesNode;
// Fixed-point matrix product. This scales inputs to 16bit signed integers by Symmetric quantizers, performs
// integer multiplication using SSE/AVX2, and transforms the results back.
@@ -1170,6 +1239,7 @@ class QuantizedTimesNode : public TimesNodeBase
template class QuantizedTimesNode;
template class QuantizedTimesNode;
+template class QuantizedTimesNode;
// -----------------------------------------------------------------------
// SumElementsNode (input)
@@ -1405,6 +1475,7 @@ class TransposeDimensionsNode : public ComputationNode /*ComputationNode*/;
template class TransposeDimensionsNode;
+template class TransposeDimensionsNode;
// -----------------------------------------------------------------------
// CosDistanceNode (left, right)
@@ -1525,6 +1596,7 @@ class CosDistanceNode : public ComputationNode, public NumInputs<2>
template class CosDistanceNode;
template class CosDistanceNode;
+template class CosDistanceNode;
// -----------------------------------------------------------------------
// KhatriRaoProductNode (left, right)
@@ -1851,6 +1923,7 @@ class CosDistanceWithNegativeSamplesNode : public ComputationNode, pub
template class CosDistanceWithNegativeSamplesNode;
template class CosDistanceWithNegativeSamplesNode;
+template class CosDistanceWithNegativeSamplesNode;
template
void UpdateRunningAverage(ComputationNode& newInput, TensorView& runningAverage,
@@ -1930,4 +2003,48 @@ class EpochAccumulatorNode : public ComputationNodeNonLooping, public
size_t m_numSamples;
};
+// -----------------------------------------------------------------------
+// CastNode converts data types from InputType to ElemType
+// -----------------------------------------------------------------------
+template
+class CastNode : public UnaryElementWiseNode
+{
+ typedef UnaryElementWiseNode Base; UsingUnaryElementwiseNodeBaseMembers;
+ static const std::wstring TypeName() { return L"Cast"; }
+
+public:
+ CastNode(DEVICEID_TYPE deviceId, const wstring& name)
+ : Base(deviceId, name)
+ {
+ }
+
+ virtual void /*ComputationNode::*/ ForwardProp(const FrameRange& fr) override
+ {
+ auto result = ValueFor(fr);
+ auto input = static_cast&>(*m_inputs[0].get()).ValueFor(fr);
+ result.CastAssignValuesOf(input);
+ }
+
+ virtual void /*ComputationNode::*/ BackpropTo(const size_t /*inputIndex*/, const FrameRange& fr) override
+ {
+ auto grad = GradientFor(fr);
+ auto inputGrad = static_cast&>(*m_inputs[0].get()).GradientFor(fr);
+ inputGrad.CastAssignValuesOf(grad);
+ }
+
+ virtual void /*ComputationNodeBase::*/ Validate(bool isFinalValidationPass) override
+ {
+ ValidateUnaryMap(isFinalValidationPass);
+ }
+
+ virtual bool OutputUsedInComputingInputNodesGradients() const override { return false; }
+ virtual bool InputUsedInComputingInputNodesGradients(size_t /*childIndex*/) const override { return false; }
+};
+
+template class CastNode;
+template class CastNode;
+template class CastNode;
+template class CastNode;
+template class CastNode;
+template class CastNode;
}}}
diff --git a/Source/ComputationNetworkLib/MatrixPool.h b/Source/ComputationNetworkLib/MatrixPool.h
index 5c4ead2e925..cdf7c51d1ca 100644
--- a/Source/ComputationNetworkLib/MatrixPool.h
+++ b/Source/ComputationNetworkLib/MatrixPool.h
@@ -72,6 +72,7 @@ class MatrixPool
protected:
vector> m_memRequestInfoFloatVec;
vector> m_memRequestInfoDoubleVec;
+ vector> m_memRequestInfoHalfVec;
set m_deviceIDSet;
int m_stepCounter;
@@ -151,6 +152,7 @@ class MatrixPool
// MatrixPool is not templated, so we call both float and double versions here
OptimizedMemoryAllocationFunc();
OptimizedMemoryAllocationFunc();
+ OptimizedMemoryAllocationFunc();
return;
}
diff --git a/Source/ComputationNetworkLib/NonlinearityNodes.h b/Source/ComputationNetworkLib/NonlinearityNodes.h
index e26b587b2a9..0f7edea527e 100644
--- a/Source/ComputationNetworkLib/NonlinearityNodes.h
+++ b/Source/ComputationNetworkLib/NonlinearityNodes.h
@@ -446,6 +446,7 @@ class HardmaxNode : public SoftmaxNodeBase /*ComputationNode*/
template class HardmaxNode;
template class HardmaxNode;
+template class HardmaxNode;
@@ -517,7 +518,8 @@ class TopKNode : public ComputationNode, public MultiOutputNodeGetSampleLayout().GetDimPadded(0);
auto tmp = new ElemType[numCols];
- std::generate(tmp, tmp + numCols, [i = ElemType(0), dim]() mutable { auto ret = i; i += dim; return ret; });
+ ElemType i = ElemType(0);
+ std::generate(tmp, tmp + numCols, [&i, dim]() mutable { auto ret = i; i += dim; return ret; });
m_steps->SetValue(1, numCols, this->m_deviceId, tmp);
delete[] tmp;
m_sortedIndices->ScaleAndAdd(ElemType(1), *m_steps, *m_sortedIndices);
@@ -768,7 +770,8 @@ public: \
}; \
\
template class ClassName; \
-template class ClassName;
+template class ClassName; \
+template class ClassName;
DefineComparisonNode(LessNode, -1, 0)
DefineComparisonNode(EqualNode, 0, 0)
diff --git a/Source/ComputationNetworkLib/RNNNodes.cpp b/Source/ComputationNetworkLib/RNNNodes.cpp
index dac0b4640ef..0ffbf8a4d85 100644
--- a/Source/ComputationNetworkLib/RNNNodes.cpp
+++ b/Source/ComputationNetworkLib/RNNNodes.cpp
@@ -341,5 +341,6 @@ void OptimizedRNNStackNode::UnpackSequencesFromCuDNN(const Matrix;
template class OptimizedRNNStackNode;
+template class OptimizedRNNStackNode;
}}}
diff --git a/Source/ComputationNetworkLib/RecurrentNodes.cpp b/Source/ComputationNetworkLib/RecurrentNodes.cpp
index 6d3527f60d2..375fac4ce67 100644
--- a/Source/ComputationNetworkLib/RecurrentNodes.cpp
+++ b/Source/ComputationNetworkLib/RecurrentNodes.cpp
@@ -341,6 +341,15 @@ template
// truncated BPTT carry-over
size_t T_delayedActivation = m_delayedActivationMBLayout ? m_delayedActivationMBLayout->GetNumTimeSteps() : 0; // (note: should never happen in full-sequence mode)
auto tensorShape = GetTensorShape(rank);
+
+ // Make sure we properly have the sequence length from the previous minibatch.
+ if (T_delayedActivation > 0 && HasMBLayout())
+ {
+ auto dims = tensorShape.GetDims();
+ dims[dims.size() - 1] = T_delayedActivation;
+ tensorShape = TensorShape(dims);
+ }
+
auto slice = TensorSliceWithMBLayoutFor(tensorShape.GetDims(), FrameRange(m_delayedActivationMBLayout, t_delayed/*<0*/ + T_delayedActivation), m_delayedActivationMBLayout);
tensorShape.NarrowTo(slice);
src = TensorView(m_delayedValue, tensorShape);
@@ -578,9 +587,11 @@ template
// instantiate the classes that derive from the above
template class PastValueNode;
template class PastValueNode;
+template class PastValueNode;
template class FutureValueNode;
template class FutureValueNode;
+template class FutureValueNode;
// -----------------------------------------------------------------------
// DelayedValueNodeState -- helper class for exporting/importing state from/to DelayedValueNodes.
diff --git a/Source/ComputationNetworkLib/ReshapingNodes.cpp b/Source/ComputationNetworkLib/ReshapingNodes.cpp
index ad6f2accc3f..396f3492567 100644
--- a/Source/ComputationNetworkLib/ReshapingNodes.cpp
+++ b/Source/ComputationNetworkLib/ReshapingNodes.cpp
@@ -373,6 +373,7 @@ template
template class ReduceElementsNode;
template class ReduceElementsNode;
+template class ReduceElementsNode;
// -----------------------------------------------------------------------
// Where(bitVector) -- extract indices of non-0 values in a sequence
@@ -490,6 +491,7 @@ template
template class WhereNode;
template class WhereNode;
+template class WhereNode;
// -----------------------------------------------------------------------
// PackedIndexNode(targetObject, indexSequence) -- map sequence
@@ -551,6 +553,7 @@ template
template class PackedIndexNode;
template class PackedIndexNode;
+template class PackedIndexNode;
// -----------------------------------------------------------------------
// GatherPackedNode(packedIndex, sourceData) -- gather operation
@@ -623,6 +626,7 @@ template
template class GatherPackedNode;
template class GatherPackedNode;
+template class GatherPackedNode;
// -----------------------------------------------------------------------
// ScatterPackedNode(layoutData, packedIndex, sourceData) -- scatter operation
@@ -686,6 +690,7 @@ template
template class ScatterPackedNode;
template class ScatterPackedNode;
+template class ScatterPackedNode;
// -----------------------------------------------------------------------
// CropNode -- crop operation, crops first input according to shape of second
@@ -1026,5 +1031,6 @@ bool CropNode::SupportsTransformOnInput(size_t inputIndex)
template class CropNode;
template class CropNode;
+template class CropNode;
}}}
diff --git a/Source/ComputationNetworkLib/ReshapingNodes.h b/Source/ComputationNetworkLib/ReshapingNodes.h
index 857524377ff..c4ffc388cb1 100644
--- a/Source/ComputationNetworkLib/ReshapingNodes.h
+++ b/Source/ComputationNetworkLib/ReshapingNodes.h
@@ -878,8 +878,8 @@ class PaddingNode : public ComputationNode, public NumInputs<1>
public:
- PaddingNode(DEVICEID_TYPE deviceId, const wstring& name, std::vector head, std::vector foot, PaddingType mode = PaddingType::CONSTANTPAD, ElemType constantValue = 0)
- : Base(deviceId, name), m_head(head), m_foot(foot), m_mode(mode), m_constant_value(constantValue)
+ PaddingNode(DEVICEID_TYPE deviceId, const wstring& name, std::vector head, std::vector foot, PaddingType mode = PaddingType::CONSTANTPAD, double constantValue = 0)
+ : Base(deviceId, name), m_head(head), m_foot(foot), m_mode(mode), m_constant_value((ElemType)constantValue)
{
}
diff --git a/Source/ComputationNetworkLib/SequenceReshapeNodes.h b/Source/ComputationNetworkLib/SequenceReshapeNodes.h
index 04e49a676f4..1b531c0b5f4 100644
--- a/Source/ComputationNetworkLib/SequenceReshapeNodes.h
+++ b/Source/ComputationNetworkLib/SequenceReshapeNodes.h
@@ -312,8 +312,8 @@ class UnpackSequenceNode : public ComputationNodeNonLooping, public Mu
public:
DeclareConstructorFromConfig(UnpackSequenceNode);
- UnpackSequenceNode(DEVICEID_TYPE deviceId, const wstring& name, ElemType paddingValue = 0, bool suppressMaskOutput = false)
- : Base(deviceId, name), MultiOutputNode(suppressMaskOutput ? 1 : 2), m_paddingValue(paddingValue), m_suppressMaskOutput(suppressMaskOutput)
+ UnpackSequenceNode(DEVICEID_TYPE deviceId, const wstring& name, double paddingValue = 0, bool suppressMaskOutput = false)
+ : Base(deviceId, name), MultiOutputNode(suppressMaskOutput ? 1 : 2), m_paddingValue((ElemType)paddingValue), m_suppressMaskOutput(suppressMaskOutput)
{}
virtual void /*ComputationNodeNonLooping::*/ ForwardPropNonLooping() override
diff --git a/Source/ComputationNetworkLib/SpecialPurposeNodes.cpp b/Source/ComputationNetworkLib/SpecialPurposeNodes.cpp
index fbb030a80cb..dc9084f8fa4 100644
--- a/Source/ComputationNetworkLib/SpecialPurposeNodes.cpp
+++ b/Source/ComputationNetworkLib/SpecialPurposeNodes.cpp
@@ -144,5 +144,6 @@ template
template class TraceNode;
template class TraceNode;
+template class TraceNode;
}}}
diff --git a/Source/ComputationNetworkLib/SpecialPurposeNodes.h b/Source/ComputationNetworkLib/SpecialPurposeNodes.h
index 2d140b1bc7a..9411d29f1f1 100755
--- a/Source/ComputationNetworkLib/SpecialPurposeNodes.h
+++ b/Source/ComputationNetworkLib/SpecialPurposeNodes.h
@@ -8,6 +8,8 @@
#include "ComputationNode.h"
#include "gammacalculation.h"
#include "NonlinearityNodes.h"
+#include "latticearchive.h"
+#include "ProgressTracing.h"
#include