Как я могу описать сеть для приближения функций с помощью CNTK BrainsScript?
Я хочу сеть, которая приближает произвольные функции. Здесь я предполагаю, что эта сеть имеет один вход, (n) скрытых слоев, каждый слой имеет (n) узлов и один выход.
Я использую в основном файл конфигурации CNTK. Как я могу описать такую сеть в конфигурационном файле CNTK?
Я пробовал это с SimpleNetworkBuilder, как показано ниже, и использовал данные обучения синусоидальной волны.
Вот файл конфигурации и данные обучения. Пожалуйста, отошлите это.
https://drive.google.com/open?id=0B83LnG3hRTNGUGxvTHJfYmZuMEE
Чтобы оценить эту сеть, я немного изменил пример проекта в пакете CNTK, CNTKLibraryCPPEvalGPUExamples. Я только поместил 'EvalMultithreads.cpp' в вышеупомянутый файл почтового индекса.
Эта сеть начинает изучение итерации, но выводит неверные значения в процессе оценки (я использую C++ Eval Library).
Я дал несколько данных этой программе оценки, и она выводит "1" на всех выходах. Эта сеть, очевидно, научилась неправильно.
command = trainNetwork:testNetwork
precision = "float";
traceLevel = 1;
deviceId = 0;
rootDir = ".";
dataDir = ".";
outputDir = "./Output";
modelPath = "$outputDir$/Models/mynn2"
dimension = 1
labelDimension = 1
# TRAINING CONFIG
trainNetwork = {
action = "train"
SimpleNetworkBuilder = [
layerSizes = 1:50*1:1
trainingCriterion = "CrossEntropyWithSoftmax"
evalCriterion = "ErrorPrediction"
layerTypes = "Sigmoid"
applyMeanVarNorm = true
]
SGD = [
epochSize = 10000
minibatchSize = 1
learningRatesPerSample = 0.0001
momentumAsTimeConstant = 0.0
maxEpochs = 1
]
reader = {
readerType = "CNTKTextFormatReader"
file = "train_sine.txt"
input = {
features = { dim = $dimension$; format = "dense" }
labels = { dim = $labelDimension$; format = "dense" }
}
}
}
# TEST CONFIG
testNetwork = {
action = "test"
minibatchSize = 1 # reduce this if you run out of memory
reader = {
readerType = "CNTKTextFormatReader"
file = "test.txt"
input = {
features = { dim = $dimension$; format = "dense" }
labels = { dim = $labelDimension$; format = "dense" }
}
}
}
1 ответ
При выполнении регрессии вы должны использовать SquaredError, а не CrossEntropyWithSoftmax.