Aracılığıyla paylaş


Komut satırı ayrıştırma kuralları aracılığıyla BrainScript

Aşağıda CNTK komut satırı ayrıştırma kuralları açıklanmaktadır. CNTK bir görevi tamamlamak için bir dizi bileşenden oluşur. Bu bileşenlerin çoğunun çalışması için kullanılabilir bazı yapılandırma bilgileri gerekir ve bu yapılandırma parametreleri CNTK yapılandırma dosyaları aracılığıyla sağlanır.

Yapılandırma dosyaları, ad-değer çiftlerinin koleksiyonlarıdır. Yapılandırma verileri aşağıdaki türlerden biri olabilir:

  • Basit: Yapılandırma parametresine tek bir değer atanır. Örneğin, deviceId = "Auto".
  • Dizi: Yapılandırma parametresine tekdüzen türde olması gerekmeyen bir değer dizisi atanır. : diziler için varsayılan ayırıcıdır. Ayırıcı, dizi değerleri parantez içine alınarak ve yeni ayırıcı karakteri açık parantezin hemen ardından yerleştirilerek değiştirilebilir. karakteri * , belirli bir değerin dizide birden çok kez tekrarlanmasına izin verir. Örneğin, minibatchSize = 256:512:512:512:1024 eşittir minibatchSize = 256:512*3:1024.
  • Set: parametre kümeleri herhangi bir tür yapılandırma parametresi kümesi içerir. Parametre kümeleri iç içe olabilir. Parametre kümeleri için varsayılan ayırıcı, ; bir satıra birden çok öğe eklenip eklenmediğini belirtir. Satır ayırıcıları, öğeler için ayırıcı olarak da görev görür. Örnek:

block1 = [id=1;size=256]

block2 = [
    subblock = [string="hi";num=5]
    value = 1e-10
    array = 10:"this is a test":1.25
]

CNTK yapılandırma dosyaları hiyerarşik bir şekilde düzenlenir. Bir CNTK bileşeni değeri isteyene kadar gerçek veri değerleri değerlendirilmez. Bir bileşen tarafından bir değer istendiğinde, CNTK önce bileşen bloğunun içinde arama yapacaktır. Değer bulunamazsa, parametre bulunana veya yapılandırma hiyerarşisinin en üst düzeyine eşleşme olmadan ulaşılana kadar üst ve üst parametre kümesinde aramaya devam eder. Bu, aynı parametre değerlerinin farklı bloklar arasında daha kolay paylaşılmasını sağlar. Daha önce de belirttiğimiz gibi, CNTK çalıştırmak için komut satırında yapılandırma dosyasını belirtmeniz gerekir. cntk configFile=yourExp.cntk Bu işlem istenen yapılandırma dosyasını yükler ve yapılandırma dosyasındaki komut parametrelerinde listelenen tüm komut bloklarını yürütür.

Komutlar ve Eylemler

Yapılandırma dosyasında yürütülecek komutları (ile :ayrılmış) tanımlayan bir üst düzey komut parametresi olmalıdır. Her komut, dosyadaki bir komut bloğuna başvurur ve bu bloğun gerçekleştireceği işlemi tanımlayan bir eylem parametresi içermelidir. Örneğin aşağıdaki komut, eğit eylemini mnistTrain yürüten bloğu ve ardından mnistTest modeli değerlendiren bloğu yürütür.

command = mnistTrain:mnistTest

mnistTrain = [
    action = "train"
    ...
]

mnistTest = [
    action = "eval"
    ...
]

Komut Satırında Yapılandırma Aşırı Yüklemeleri

Temel yapılandırma olarak kullanılabilecek bir yapılandırmaya sahip olmak ve her deneysel çalıştırma için yalnızca birkaç parametreyi değiştirmek yaygın bir durumdur. Bu işlem birkaç farklı yolla yapılabilir ve bunlardan biri komut satırında ayarları geçersiz kılmaktır. Örneğin, model dosya yolunu geçersiz kılmak için komut satırını aşağıdaki gibi değiştirebilirsiniz:

cntk configFile=yourExp.cntk stderr="c:\temp\newpath"

Bu, yapılandırma dosyasının kök düzeyinde tanımlanan için stderrgeçerli ayarını yeni değerle geçersiz kılar. Komut bloğu içindeki bir parametrenin değiştirilmesi gerekiyorsa, bloğun da belirtilmesi gerekir. Örneğin, komut satırında bir denemenin öğesini şu şekilde değiştirebilirsiniz minibatchSize :

cntk configFile=yourExp.cntk mnistTrain=[minibatchSize=256]

veya bir deneme için kullanılan veri dosyasını şu şekilde değiştirin:

cntk configFile=yourExp.cntk mnistTrain=[reader=[file="mynewfile.txt"]]

Katmanlı Yapılandırma Dosyaları

Komut satırı parametrelerini kullanarak yapılandırma dosyasının bazı bölümlerini geçersiz kılmak yerine, birden çok yapılandırma dosyası da belirtilebilir; burada ikinci dosyalar öncekileri geçersiz kılar. Bu, kullanıcının bir ana yapılandırma dosyasına sahip olmasını ve ardından ana dosyanın belirli bir CNTK çalıştırması için hangi parametrelerini geçersiz kılmak istediklerini ayrı bir yapılandırma dosyasında belirtmesini sağlar. Bu, yapılandırma dosyalarının '+' ayrılmış listesi belirtilerek veya etiketi birden çok kez kullanılarak configFile= gerçekleştirilebilir. Aşağıdakiler eşdeğerdir.

cntk configFile=yourExp1.cntk+yourExp2.cntk

cntk configFile=yourExp1.cntk configFile=yourExp2.cntk

yourExp2.cntk Yalnızca dizesini mnistTrain=[reader=[file=mynewfile.txt]]içeriyorsa, bu komutların her ikisi de şunun eşdeğeri olacaktır:

cntk configFile=yourExp1.cntk mnistTrain=[reader=[file="mynewfile.txt"]]

Bir değişkenin değerinin her zaman son atanışına göre belirlendiğini unutmayın. Komut satırı parametrelerini ve katmanlı yapılandırma dosyalarını rastgele birleşimlerle karıştırmak da mümkündür. Örneğin,

cntk configFile=yourExp1.cntk+yourExp2.cntk var1=value configFile=yourExp3.cntk

bu yapılandırma parametrelerini komut satırında göründükleri sırayla işler ve en son atanan değer kullanılan değerdir.

Komut satırında birden çok yapılandırma dosyası belirtebilmenin yanı sıra, kullanıcı bir yapılandırma dosyasını başka bir yapılandırma dosyasına da ekleyebilir. Örneğin, ilk satırı yourExp2.cntk

include=yourExp1.cntk

daha sonra yalnızca çalıştırma

cntk configFile=yourExp2.cntk

çalıştırmaya eşdeğer olacaktır

cntk configFile=yourExp1.cntk+yourExp2.cntk

burada ikinci durumda include yourExp2.cntk deyimini içermez. Bu include deyimlerinin bir yapılandırma dosyasının içinde herhangi bir yerde görünebileceğini unutmayın; include deyimi nerede görünürse görün, belirtilen yapılandırma dosyasının eklendiği yerdir. Yapılandırma dosyası eklemek, söz konusu dosyanın içeriğini include deyiminin konumuna yapıştırmaya eşdeğerdir. Include deyimleri özyinelemeli olarak (derinlik öncelikli arama kullanılarak) çözümlenir; başka yourExpA.cntkyourExpB.cntkbir deyişle , ve yourExpB.cntk içeriyorsa yourExpC.cntk, tam zincir çözülür ve yourExpC.cntk etkin bir şekilde içinde yourExpA.cntkyer alır. Bir yapılandırma dosyası birden çok kez dahil edilirse (örneğin, 'A' 'B' ve 'C' ve 'B' de 'C' içeriyorsa), yalnızca ilk karşılaşıldığında etkin bir şekilde eklenir.

Değişkenleri Dizeleştirme

Katmanlı yapılandırma dosyaları kullanıcıların denemeler arasında yapılandırma dosyalarını yeniden kullanmasına izin verirken, bu yine de hantal bir işlem olabilir. Her deneme için, bir kullanıcının birkaç parametreyi geçersiz kılması gerekebilir ve bazıları uzun dosya yolları (örneğin, stderr, modelPath, file) olabilir. "Stringize" işlevi bu işlemi çok daha kolay hale getirir. Kullanıcının aşağıdaki gibi bir yapılandırma belirtmesine olanak tanır:

command = SpeechTrain
stderr = "$Root$\$RunName$.log"
speechTrain = [
    modelPath = "$Root$\$RunName$.cn"
    SGD = [
        reader = [
            features = [
                type = "real"
                dim = "$DataSet1_Dim$"
                file = "$DataSet1_Features$"
            ]
        ]
    ]
]

Burada, Root,RunName, DataSet1_Dimve DataSet1_Features yapılandırmanın başka bir yerinde belirtilen değişkenlerdir (kullanıldıkları noktadan görünen bir kapsamda). Bu yapılandırma dosyasını yorumlarken, ayrıştırıcı formun $VarName$ her dizesini dizesiyle VarValuedeğiştirir ve burada VarValue adlı VarNamedeğişkenin değerini temsil eder. Değişken çözümleme işlemi özyinelemeli; örneğin, A=$B$, B=$C$ve C=HelloWorld.txt ise, A "HelloWorld.txt" olarak çözümlenir. Yapılandırma dosyanızda başvuru döngüsü olmadığından emin olun. Aksi takdirde ayrıştırıcı şu anda sonsuz döngüye girer.

Kullanıcının yapılandırma dosyasındaki ve komut satırındaki bir değişkenin değerini belirtmesi eşdeğer olduğundan, bu değişkenlerin değerlerinin her iki konumda da belirtilebileceğine dikkat edin. Bir değişkenin değerinin son atanışına, bunun bir yapılandırma dosyasında mı yoksa komut satırında mı olduğuna göre belirlendiğini hatırlayın. Bu nedenle, config1.txt içinde tanımlanıyorsa ancak komut satırında geçersiz kılınıyorsa Root , komut satırında belirtilen değer configFile1.txt içindeki örneklerini $Root$ çözümlemek için kullanılan değer olacaktır. Yararlı bir özellik, mevcut olmayan dizinler varsa stderr veya modelPath dizinlere işaret ederse, bu dizinlerin CNTK tarafından oluşturulmasıdır; bu, dizini $Root$\$RunName$ mevcut olmasa bile gibi stderr = $Root$\$RunName$\$RunName$.logbir şey belirtmenize olanak tanır.

Varsayılan, Yinelenen Değerler ve Açıklamalar

Yapılandırma dosyalarındaki parametrelerin çoğu, yapılandırma değeri belirtilmezse kullanılacak bir varsayılan değere sahiptir. Varsayılan değer yoksa ve değer aramada bulunamazsa, bir özel durum görüntülenir ve programdan çıkar. Parametre adı birden çok kez belirtilirse, bu değere ayarlanan son değer korunacak değerdir. Bunun tek özel durumu, köşeli ayraçlarla ]çevrili [ parametre kümelerindedir. Bu durumlarda küme ayraçları içindeki değerler parametre kümesi olarak kabul edilir ve mevcut parametre kümesine eklenir. Örnek:

params=[a=1;b=2;c=3]
params=[c=5;d=6;e=7]

etkin bir şekilde şuna eşittir:

params=[a=1;b=2;c=5;d=6;e=7]

Bu ekleme işleminin dizi öğeleri için KULLANILMADIĞINI ve dizi birden çok kez ayarlanırsa tüm dizinin değiştirileceğini unutmayın. Karakter # , bir açıklamanın başlangıcını gösterir ve sonrasında gerçekleşen # her şey yoksayılır. bir # açıklama olarak yorumlanması için önünde boşluk bulunmalıdır veya satırın başında olmalıdır. Aşağıdakiler geçerli bir açıklamadır

stderr="c:\cntk\log\cntk" # "_mnistTrain_mnistTest.log"

Aşağıda, yorumlanmayacak bir değer örneği verilmiştir. içinde 1#INF bir açıklama işaretçisi olmadığından bir parametreyi #var sonsuz olarak ayarlar

var=1#INF