如何用CNTK BrainsScript描述用于函数逼近的网络?

时间:2017-09-14 07:26:23

标签: regression config cntk

我想要一个近似于任意功能的网络。 在这里,我假设这个网络有一个输入,(n)隐藏层,每层有(n)个节点和一个输出。

我主要使用CNTK配置文件。 如何在CNTK配置文件中描述这样的网络?

我一直在尝试使用SimpleNetworkBuilder,如下所示并使用正弦波训练数据。

这是配置文件和培训数据。请参考。

https://drive.google.com/open?id=0B83LnG3hRTNGUGxvTHJfYmZuMEE

为了评估这个网络,我稍微修改了CNTK包中的示例项目CNTKLibraryCPPEvalGPUExamples。我只把'EvalMultithreads.cpp'在上面的zip文件中。

这个网络开始学习迭代,但它在我的评估过程中输出了错误的值(我一直在使用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 个答案:

答案 0 :(得分:1)

进行回归时,您应该使用SquaredError而不是CrossEntropyWithSoftmax。