CNTK жалуется на нереализованную функцию

У меня есть следующая сеть в Brainscript.

BrainScriptNetworkBuilder = {
    inputDim = 4
    labelDim = 1
    embDim = 20
    hiddenDim = 40

    model = Sequential (
        EmbeddingLayer {embDim} :                            # embedding
        RecurrentLSTMLayer {hiddenDim, goBackwards=false} :  # LSTM
        DenseLayer {labelDim}                                # output layer
    )

    # features
    t = DynamicAxis{}
    features = SparseInput {inputDim, tag="feature", dynamicAxis=t}
    anomaly  = Input {labelDim, tag="label"}

    # model application
    z = model (features)

    zp = ReconcileDynamicAxis(z, anomaly)

    # loss and metric
    ce   = CrossEntropyWithSoftmax (anomaly, zp)
    errs = ClassificationError     (anomaly, zp)

    featureNodes    = (features)
    labelNodes      = (anomaly)
    criterionNodes  = (ce)
    evaluationNodes = (errs)
    outputNodes     = (z)
}

и мои данные выглядят так:

2 |Features -0.08169 -0.07840 -0.09580 -0.08748 
2 |Features 0.00354 -0.00089 0.02832 0.00364 
2 |Features -0.18999 -0.12783 -0.02612 0.00474 
2 |Features 0.16097 0.11350 -0.01656 -0.05995 
2 |Features 0.09638 0.07632 -0.04359 0.02183 
2 |Features -0.12585 -0.08926 0.02879 -0.00414 
2 |Features -0.10224 -0.18541 -0.16963 -0.05655 
2 |Features 0.08327 0.15853 0.02869 -0.17020 
2 |Features -0.25388 -0.25438 -0.08348 0.13638 
2 |Features 0.20168 0.19566 -0.11165 -0.40739 |IsAnomaly 0

Когда я запускаю команду cntk, чтобы попытаться обучить модель, я получаю следующее исключение.

ИСКЛЮЧЕНИЕ: Внутренний файл: Matrix.cpp Строка: 1323 Функция: Microsoft::MSR::CNTK::Matrix::SetValue -> Функция не реализована.

Что мне не хватает?


person Nikos Karampatziakis    schedule 12.01.2017    source источник
comment
Не могли бы вы опубликовать это как проблему на GitHub CNTK?   -  person Ark-kun    schedule 06.03.2017


Ответы (1)


Вот несколько предложений:

  • Во-первых, входные данные должны соответствовать типу данных, как описано в ридере. Таким образом, переменная функций не должна быть разреженной, так как входные данные плотные.

  • Во-вторых, LSTM выведет последовательность выходных данных, по одному для каждого образца во входной последовательности. Вам нужно игнорировать все, кроме последнего.

      model = Sequential ( DenseLayer {embDim} :  # embedding
                           RecurrentLSTMLayer {hiddenDim, goBackwards=false} :  # LSTM
                           BS.Sequences.Last :    #Use only the last in the LSTM sequence
                           DenseLayer {labelDim, activation=Sigmoid}  # output layer
                         )
    
person Sayan Pathak    schedule 12.01.2017
comment
Тем не менее, сообщение об ошибке, которое CNTK выводит здесь, совершенно бесполезно, потому что оно не указывает пользователю, где может быть проблема. Я считаю, что сообщение об ошибке должно, по крайней мере, указывать, где в сети произошла ошибка и каковы размеры данных. - person Anton Schwaighofer; 13.01.2017