2016-05-18 14 views
-2

Ich teste die NVIDIA cuDNN-Bibliothek auf einfache Probleme. Ich versuche etwas zu erreichen, von dem ich dachte, dass es einfach wäre, eine "volle" Faltung zu machen. Ich konnte eine 'gültige' Faltung mit dem Forward-Algorithmus ohne zu viele Probleme berechnen, aber ich bin nicht in der Lage, dasselbe mit dem Rückwärtsalgorithmus für die 'volle' Faltung zu tun.Wie berechnet man eine 'volle' Faltung mit NVIDIA cuDNN?

Ich habe die Tensoren für meinen Input, kernel und Faltung und versuchte hergestellt:

cudnnConvolutionBackwardData(handle.get(), 
    alpha, //Set to 1.0 
    filter, //Filter descriptor 
    kernel_gpu_memory, 
    input_tensor, //The input tensor descriptor 
    input_gpu_memory, 
    convolution, //The convolution descriptor 
    conv_algo, //Obtained with getConvolutionBackwardDataAlgorithm 
    workspace_cpu_memory, 
    workspace_size, //Obtained with getConvolutionBackwardDataWorkspaceSize 
    beta, //Set to 0.0 
    output_tensor, //The output tensor descriptor 
    conv_gpu_memory); 

Ich habe die Rückkehr aller CUDA Anrufe überprüft und ich habe keine Fehler, aber das Ergebnis sind nicht die Ergebnisse der die richtige 'volle' Faltung. Ich vergleiche die erhaltenen Ergebnisse mit der 'vollen' Faltung von Matlab.

Ich denke, dass dies nicht das tut, was ich erwarte. Sollte ich den ConvolutionBackwardFilter-Algorithmus ausprobieren?

Wie kann ich mit cudnn eine 'volle' Faltung durchführen?

+2

Wir sind nicht psychisch. Was sollten die Ergebnisse sein und was sind die Ergebnisse? Versuchen Sie es zuerst mit ** wirklich ** einfachen Problemen, wie einer Eingabe mit allen Nullen oder allen Eins und mit nur einem einzigen Element, das auf eins gesetzt ist. – MSalters

Antwort

1

Ich habe es. Standardmäßig berücksichtigen sie, dass die Gewichtungen vor der Operation gewendet wurden. Daher muss es als CUDNN_CROSS_CORRELATION anstelle von CUDNN_CONVOLUTION konfiguriert werden.