因为要用到图像识别,所以看的他CNN网络
cntk\Examples\Image\MNIST\Config\02_Convolution.cntk
先看配置文件:
rootDir = ".."
configDir = "$rootDir$/Config"
dataDir = "$rootDir$/Data"
outputDir = "$rootDir$/Output"
modelDir = "$outputDir$/Models"
deviceId = 0
# Override the above as follows when running on CPU:
# deviceId = -1
command = train:test
precision = "float"
modelPath = "$modelDir$/02_Convolution"
# uncomment the following line to write logs to a file
# stderr = "$outputDir$/02_Convolution_out"
traceLevel = 1
numMBsToShowResult = 500
#######################################
# TRAINING CONFIG #
#######################################
train = [
action = "train"
NDLNetworkBuilder = [
imageLayout = "cudnn"
initOnCPUOnly = true
ndlMacros = "$configDir$/Macros.ndl"
networkDescription = "$ConfigDir$/02_Convolution.ndl"
]
SGD = [
epochSize = 60000
minibatchSize = 32
#learningRatesPerSample = 0.003125 # TODO
#momentumAsTimeConstant = 0
learningRatesPerMB = 0.1*5:0.3
momentumPerMB = 0*10:0.7
maxEpochs = 15
]
reader = [
readerType = "CNTKTextFormatReader"
# See ../REAMDE.md for details on getting the data (Train-28x28_cntk_text.txt).
file = "$DataDir$/Train-28x28_cntk_text.txt"
input = [
features = [
dim = 784
format = "dense"
]
labels = [
dim = 10
format = "dense"
]
]
]
]
#######################################
# TEST CONFIG #
#######################################
test = [
action = test
minibatchSize = 1024
reader = [
readerType = "CNTKTextFormatReader"
file = "$DataDir$/Test-28x28_cntk_text.txt"
input = [
features = [
dim = 784
format = "dense"
]
labels = [
dim = 10
format = "dense"
]
]
]
]
配置文件总体分为两部分,按JAVA的解释,第一部分为变量声明,第二部分为类方法。这个文件里有两个类,第一个为train,第二个为test。这篇主要解释变量声明里的modelDir 。
可以看到配置文件是先指定了一些文件路径:
rootDir = ".."
configDir = "$rootDir$/Config"
dataDir = "$rootDir$/Data"
outputDir = "$rootDir$/Output"
modelDir = "$outputDir$/Models"
modelDir是训练模型得到的参数存储的路径。别的路径在下面的配置文件里都用到了,但是这个modelDir只是在这里声明了一下,下面没有再用。但是它很重要。很多工作都是CNTK框架给我们做了。不像其他一些机器学习框架,需要自己在代码里指定模型的路径。在进行网络训练和测试的时候,要先判断是否这个路径,如果模型存在,那么就不在进行训练。如果直接进行”test”,也会判断有没有已经训练好的模型。如果有就用这个模型进行test。感觉说的很啰嗦。测试一下就知道了:
测试一:
02_Convolution.cntk里面指定的执行命令为:
command = train:test
就是先执行train,再执行test。由于我之前已经训练好了。所以在执行的时候,就执行test了。
如果把../Output/Models这个文件改了名,找不到这个路径。再从新运行就会出现:
测试二:
command = test
模型已经训练好,只执行test
如果模型没有训练好,只执行test