Aracılığıyla paylaş


CNTK kullanımına genel bakış

CNTK kullanmak için yürütülebilir ikili dosyaları indirmeniz veya kaynak kodu indirip makinenizde derlemeniz gerekir (ayrıntılar). CNTK tarafından desteklenen üç ana görev (veya eylem) vardır:

  • Eğit - Bir ağ tanımlayın ve eğitim verilerini kullanarak eğitilmiş bir model üretmek için eğitin
  • Değerlendirme - Test verilerini kullanarak performansını değerlendirmek için eğitilmiş bir modeli test etme
  • Dağıtma - Yeni örnekleri sınıflandırmak için eğitilmiş bir model kullanın( örneğin kendi çözümünüzde)

Bu görevlerin her biri için kısa bir genel bakış aşağıda verilmiştir ve daha ayrıntılı bir açıklamaya yönelik işaretçiler sağlanır. Ayrıca, mevcut modelleri düzenleme ve dosyaya düğüm çıktıları yazma gibi CNTK tarafından desteklenen başka görevler de vardır. Bunların açıklaması, Üst düzey komutlar sayfasının Gelişmiş Konular bölümünde sağlanır.

CNTK kullanarak model eğitin

CNTK ile bir sinir ağı eğitilmesi, yapılandırılması gereken üç bileşeni içerir:

  • network: yapısı/formülü, model parametreleri dahil olmak üzere sinir ağı. Eğitim ölçütleri ve değerlendirme ölçümü de burada yer alır.
  • okuyucu: eğitim verilerinin okunma şekli
  • SGD: stokastik gradyan işleminin hiper parametreleri

CNTK yürütülebilir dosyasını çağırırken ilk bağımsız değişken olarak bir yapılandırma dosyası aracılığıyla bu bilgileri sağlamanız gerekir. Yapılandırma dosyası belirli bir söz dizimi kullanır. Yapılandırma dosyalarıyla ilgili ayrıntılar için lütfen yapılandırma dosyasına genel bakış bölümüne bakın.

Aşağıda, MNIST örneğinin CNTK yapılandırmasını ve sonuçlarını, özellikle de '01_OneHidden_ndl_deprecated.cntk' yapılandırmasını kullanırız (tüm ayrıntılar için bkz. Image/GettingStarted ve 01_OneHidden.cntk).

Bu örnekteki CNTK komut satırı şeklindedircntk configFile=01_OneHidden_ndl_deprecated.cntk. Aşağıdaki kod parçacığı, eğitimle ilgili yapılandırma dosyası içeriğine genel bir bakış sağlar.

modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain

modelPath = "$modelDir$/01_OneHidden"

MNISTtrain = [
    action = "train"

    # network definition   
    BrainScriptNetworkBuilder = (new ComputationNetwork
        include "$ConfigDir$/01_OneHidden.bs"
    )

    # learner configuration       
    SGD = [
        ...
    ]

    # reader configuration   
    reader = [
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Train-28x28_cntk_text.txt"
        ...
    ]    
]

Yukarıdaki kod parçacığı ile action = "train"adlı MNISTtrain bir komut tanımlar. Desteklenen diğer eylemler şunlardır: test veya write. deviceId parametresi CPU veya GPU kullanılıp kullanılmayacağını belirtir. olarak ayarlandığında"auto", CNTK kullanılabilir en iyi cihazı seçer. CPU kullanacak şekilde -1 veya belirli bir GPU kullanmak için =0 değerine >ayarlayın. , modelPath ara ve son eğitilen modellerin depolandığı yeri tanımlar. Bu örnekte, yapılandırma dosyasının ModelDir başında tanımlanan değişkeni kullanır.

Eğitim için üç ana yapılandırma bloğu ağın kendisini ve eğitim algoritması ile veri okuyucusunun parametrelerini tanımlar.

  • Ağ oluşturucusu : Burada topolojiyi ve katmanların boyutu, sayısı ve düğüm türü gibi ağ ayrıntılarını tanımlarsınız. Standart modeller için Basit Ağ Oluşturucusu'nu veya özel modeller için BrainScript Ağ Oluşturucusu'nu kullanabilirsiniz. Ayrıntılar için lütfen ilgili sayfalara bakın.
  • SGD : Bu blok, eğitim algoritmasını parametreleştirmenize (stokastik gradyan azalma) olanak tanır. Yapılandırılabilir seçenekler arasında ivme, uyarlamalı öğrenme hızı, uyarlamalı minibatch boyutu, paralel eğitim yer alır. Diğer ayrıntılar için bkz. SGD bloğu .
  • reader - okuyucu bloğu, hangi okuyucunun kullanılacağını ve ilgili giriş dosyalarının nerede olduğunu tanımlar. CNTK, farklı biçimler ve görevler için çeşitli veri okuyucular sağlar (bkz. Okuyucu bloğu).

Son olarak, satır command = MNISTtrain tanımlı görevlerden hangilerinin yürütüleceklerini belirtir. Eğitim ve değerlendirme gibi birkaç görevi art arda yürütmek için komutuna iki nokta üst üste ile ayrılmış daha fazla görev eklemeniz yeterlidir: command = "MNISTtrain:MNISTtest".

Eğitilmiş modeli değerlendirme

Eğitilmiş bir modelin doğruluğunu değerlendirmek için veya test komutunu kullanırsınız eval (tüm ayrıntılar için bkz. Eğit, Test, Değerlendirme). MNIST 01_OneHidden.cntk örneğinde karşılık gelen yapılandırma aşağıdaki gibi görünür.

testNetwork = {
    action = "test"
    minibatchSize = 1024    # reduce this if you run out of memory

    reader = {
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Test-28x28_cntk_text.txt"
        input = {
            features = { dim = 784 ; format = "dense" }
            labels =   { dim = 10  ; format = "dense" }
        }
    }
}

MNISTtest bloğu kullanıraction = "test". Eylem için test parametresini kullanarak modelPath test etmek için kullanılması gereken bir model tanımlamanız gerekir. Bu örnekte, modelPath bloğun MNISTtest içinde değil en üst düzeyde (yukarıdaki eğitim bölümüne bakın) tanımlanır ve hem hem de traintest eylemleri tarafından kullanılır. Bloğun reader içinde, Test-28x28.txt örnekte test için kullanılacak veri dosyasını belirtirsiniz. Son olarak, testi yürütmek için ayarlayıp command = MNISTtest çalıştırmanız cntk configFile=01_OneHidden_ndl_deprecated.cntk gerekir. Komut satırındaki sonuç:

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

Kendi kodunuzda eğitilmiş bir model kullanma

Bir modeli eğitdikten sonra, modeli hedef ortamınızda değerlendirme işlevselliğine ihtiyacınız vardır. CNTK, modellerinize farklı senaryolarda hizmet vermek için çeşitli yollar sağlar. C++, Python, C# veya diğer .NET dillerinden eğitilmiş bir model kullanabilirsiniz. Değerlendirmeyi makinenizde veya Azure'da çalıştırabilirsiniz. CNTK Modellerini Değerlendirme bölümünde (bkz. kenar çubuğu), C++/Python/C#/Azure kullanarak değerlendirme de dahil olmak üzere birçok ayrıntı vardır.

Sonraki adımlar