Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Hataya neden olan değişiklik
- Bu yineleme, genişlemiş kıvrımı ve belirlenici havuzu desteklemek için cuDNN 6.0 gerektirir. Lütfen cuDNN'nizi güncelleştirin.
- Bu yineleme, OpenCV'nin TensorBoard Görüntüsü özelliğini desteklemesini gerektirir . CNTK yüklemeden önce lütfen OpenCV'yi yükleyin.
Belgeler
Aranabilir olmaları için öğreticilerin ve kılavuzların HTML sürümünü ekleyin
Python belgeleriyleöğreticilerin ve kılavuzların HTML sürümlerini ekledik. Bu, öğretici not defterlerini ve el kitaplarını da aranabilir hale getirir.
Güncelleştirilmiş değerlendirme belgeleri
Model değerlendirmesiyle ilgili belgeler güncelleştirildi. Lütfen en son belgeleri buradan kontrol edin.
Sistem
Volta GPU'da eğitim için 16 bit destek (sınırlı işlevsellik)
Test altyapısı güncelleştirmelerine bağımlılık nedeniyle bu çalışma bir sonraki sürüme geçirilir.
NCCL 2 desteği
Artık NCCL makineler arasında kullanılabilir. Kullanıcının derleme yapılandırmasında NCCL'yi burada olduğu gibi etkinleştirmesi gerekir. Not:
- İndirilen NCCL 2 paketini yükledikten sonra iki paket vardır:
/var/nccl-repo-2.0.4-ga/libnccl2_2.0.4-1+cuda8.0_amd64.deb
/var/nccl-repo-2.0.4-ga/libnccl-dev_2.0.4-1+cuda8.0_amd64.deb.
NCCL 2 ile CNTK oluşturmak için her ikisini de yükleyin.
- Sistem yapılandırmasındaki sorunlar nedeniyle, kullanıcı NCCL başlatma sırasında hatayla karşılaşabilir. Hata hakkında ayrıntılı bilgi almak için lütfen ortam değişkenini
NCCL_DEBUG=INFO
ayarlayın. - Karma IB ve IPoIB modlarında çalışan InfiniBand cihazlarıyla yapılandırılmış sistemde NCCL 2'nin geçerli sürümünde bilinen sorunlar vardır. Yalnızca IB modu cihazlarını kullanmak için lütfen IB modunda çalışan ortam değişkenini
NCCL_IB_HCA=devices
ayarlayın; örneğin:
export NCCL_IB_HCA=mlx5_0,mlx5_2
CNTK öğrenci arabirimi güncelleştirmesi
Bu güncelleştirme, öğrenci API'lerini basitleştirir ve ve UnitType.sample
kavramlarını unitType.minibatch
kullanımdan kaldırmaktadır. Amaç, HER N örneğin ortalama gradyanlarının gerçek veri minibatch boyutlarına bakılmaksızın model güncelleştirmelerine yaklaşık olarak aynı katkıyı CNTK --- benzersiz model güncelleştirme tekniklerini korurken, api'nin öğrenci hiper parametrelerini belirtmesini sezgisel hale getirmektir. Ayrıntılı açıklama, CNTK Öğrenenlerin Kullanımı kılavuzunda bulunabilir.
Yeni API'de AdaDelta, AdaGrad, FSAdaGrad, Adam, MomentumSGD, Nesterov, RMSProp ve SGD gibi desteklenen tüm öğrenciler artık
cntk.<cntk_supporting_learner>(parameters=model.parametes,
lr=<float or list>,
[momentum=<float or list>], [variance_momentum=<float or list>],
minibatch_size=<None, int, or cntk.learners.IGNORE>,
...other learner parameters)
İki önemli değişiklik vardır:
lr
: Öğrenme hızı zamanlaması float, float listesi veya çift listesi (float, int) olarak belirtilebilir ( learning_parameter_schedule parametre tanımına bakın). Aynı belirtim, bu tür hiper parametrelerin gerekli olduğu öğrenciler, FSAdaGrad, Adam, MomentumSGD, Nesterov'un momentum ve variance_moment için de geçerlidir.minibatch_size
: Her N (minibatch_size=N) örneğinin ortalama gradyanının, verilerin gerçek minibatch boyutu N'den farklı olsa bile model güncelleştirmelerine aynı öğrenme hızıyla katkıda bulunduğunu garanti etmek için bir minibatch_size belirtilebilir. Bu, özellikle değişken uzunlukta sıralı eğitim senaryolarında ve/veya dağıtılmış eğitimde eşit olmayan veri bölümü senaryolarında veri minibatch boyutu değiştiğinde yararlıdır.- ayarlarsak
minibatch_size=cntk.learners.IGNORE
, literatürdeki davranışı kurtarırız: Tüm minibatch'in ortalama gradyanı, model güncelleştirmesine aynı öğrenme hızıyla katkıda bulunur. Veri minibatch veri boyutunu yoksayma davranışı, veri minibatch boyutu belirtilen minibatch boyutuna eşit olduğunda öğrenci için bir minibatch boyutu belirtmekle aynıdır.
- ayarlarsak
Yeni API ile:
- Model güncelleştirmelerinin klasik derin öğrenme literatüründe olduğu gibi olması için minibatch boyutunu yoksayarak öğrenciyi
minibatch_size=cntk.learners.IGNORE
belirtebiliriz; örneğin.
sgd_learner_m = C.sgd(z.parameters, lr = 0.5, minibatch_size = C.learners.IGNORE)
Not
- Gerçek minibatch boyutlarına bakılmaksızın her N örneğinin ortalama gradyanı için aynı öğrenme oranını uygulayan CNTK belirli teknikleri etkinleştirmek için, öğrenciyi ayarlayarak
minibatch_size=N
belirtebiliriz; örneğin ayarıminibatch_size=2
,
sgd_learner_s2 = C.sgd(z.parameters, lr = 0.5, minibatch_size = 2)
Öğrencilerin FSAdaGrad, Adam, MomentumSGD ve Nesterov momentum_schedule ilgili olarak, benzer şekilde belirtilebilir. Örnek olarak kullanalım momentum_sgd
:
momentum_sgd(parameters, lr=float or list of floats, momentum=float or list of floats,
minibatch_size=C.learners.IGNORE, epoch_size=epoch_size)
momentum_sgd(parameters, lr=float or list of floats, momentum=float or list of floats,
minibatch_size=N, epoch_size=epoch_size)
benzer şekilde learning_rate_schedule
, bağımsız değişkenler de aynı şekilde yorumlanır:
ile
minibatch_size=C.learners.IGNORE
bozulmamomentum=beta
, boyutuna bakılmaksızın tüm minibatch'in ortalama gradyanlarına uygulanır. Örneğin, minibatch boyutunun N veya 2N (veya herhangi bir boyut) olmasına bakılmaksızın, böyle bir minibatch'in ortalama gradyanı aynı bozulma faktörü beta'ya sahip olur.ile
minibatch_size=N
, çürümemomentum=beta
her N örneğinin ortalama gradyanlarına uygulanır. Örneğin, N, 2N, 3N ve kN boyutlarındaki küçük harflerde sırasıyla beta, pow(beta, 2), pow(beta, 3) ve pow(beta, k) bozulmaları olur --- bozulma, gerçek minibatch boyutunun belirtilen minibatch boyutuyla orantılı olarak üsteldir.
Kişilerin ağ oluşturmasına ve eğitmeye olanak tanıyan bir C#/.NET API'si.
C#/.NET API'sine eğitim desteği eklenir.
.NET geliştiricileri, mevcut CNTK C# Değerlendirme API'sine ek olarak tümleşik derin öğrenme deneyiminin keyfini çıkarabilir. Derin bir sinir ağı C# dilinde derlenebilir, eğitilebilir ve doğrulanabilirken CNTK performans gücünden yararlanmaya devam edebilir. Kullanıcılar DNN'nin nasıl eğitilip değerlendirildiğini görmek için doğrudan CNTK kaynak kodunda hata ayıklar. Yeni özellikler şunları içerir:
Temel C# Eğitim API'si.
Hesaplama ağı oluşturmak için 100'den fazla temel işlev desteklenir. Bu işlevler arasında Sigmoid, Tanh, ReLU, Plus, Eksi, Convolution, Pooling, BatchNormalization yer alır.
Örneğin, lojistik regresyon kaybı işlevi oluşturmak için:
Function z = CNTKLib.Times(weightParam, input) + biasParam;
Function loss = CNTKLib.CrossEntropyWithSoftmax(z, labelVariable);
CNTK, DNN oluşturmak için temel öğe olarak işlev görür
DNN, temel işlem bileşimiyle oluşturulur. Örneğin, bir ResNet düğümü oluşturmak için:
Function conv = CNTKLib.Pooling(CNTKLib.Convolution(convParam, input),
PoolingType.Average, poolingWindowShape);
Function resNetNode = CNTKLib.ReLU(CNTKLib.Plus(conv, input));
Toplu İşlem Desteği
Verimli veri yükleme ve toplu işlemeye yardımcı olmak için MinibatchSource ve MinibacthData yardımcı programları sunuyoruz.
Eğitim Desteği
DNN literatüründe yaygın olarak görülen birçok Stokastik Gradyan Azalma iyileştiricisini destekliyoruz: MomentumSGDLearner, AdamLearner, AdaGradLearner vb. Örneğin, ADAM Stochastic Optimizer ile model eğitmek için:
var parameterLearners = new List<Learner>() { Learner.AdamLearner(classifierOutput.Parameters(),
learningRate, momentum) };
var trainer = Trainer.CreateTrainer(classifierOutput, trainingLoss,
prediction, parameterLearners);
Eğitim örnekleri çok çeşitli DNN kullanım örneklerini kapsar:
- C#/API kullanarak lojistik regresyon modelini eğitmek ve değerlendirmek için bir merhaba dünya örneği: https://github.com/Microsoft/CNTK/tree/release/latest/Examples/TrainingCSharp/Common/LogisticRegression.cs
- MNIST veri kümesinin görüntü sınıflandırması için kıvrımlı sinir ağı: https://github.com/Microsoft/CNTK/tree/release/latest/Examples/TrainingCSharp/Common/MNISTClassifier.cs
- C#/.NET API ile ResNet modeli oluşturun, eğitin ve değerlendirin:
https://github.com/Microsoft/CNTK/tree/release/latest/Examples/TrainingCSharp/Common/CifarResNetClassifier.cs - C#/.NET API ile öğrenme aktarımı:
https://github.com/Microsoft/CNTK/tree/release/latest/Examples/TrainingCSharp/Common/TransferLearning.cs - C#/.NET API ile LSTM sıralı sınıflandırıcı oluşturun ve eğitin: https://github.com/Microsoft/CNTK/tree/release/latest/Examples/TrainingCSharp/Common/LSTMSequenceClassifier.cs
CNTK için R bağlama
Hem eğitim hem de değerlendirme sağlayan CNTK için R bağlaması çok yakında ayrı bir depoda yayımlanacaktır.
Örnekler
Hızlı R-CNN ve Daha Hızlı R-CNN ile Nesne Algılama
- Hızlı R-CNN'de sınırlayıcı kutu regresyonu ve VGG modeli desteği.
- Hızlı R-CNN nesne algılama ve Hızlı R-CNN'de güncelleştirilmiş öğretici ile ilgili belgelerde yeni öğretici.
- Farklı algılayıcılar, temel modeller ve veri kümeleri seçmeye olanak tanıyan nesne algılama tanıtım betiği.
Yeni C++ Değerlendirme Örnekleri
Yeni C++ örnekleri CNTKLibraryCPPEvalCPUOnlyExamples
ve CNTKLibraryCPPEvalGPUExamples
ekledik. CPU ve GPU üzerinde model değerlendirmesi için C++ CNTK Kitaplığı'nın nasıl kullanılacağını gösterir. Bir diğer yeni örnek de model değerlendirmesi için CNTK UWP kitaplığını kullanan UWPImageRecognition örneğidir.
Yeni C# Değerlendirme örnekleri
Zaman uyumsuz değerlendirme için bir örnek ekledik: EvaluationSingleImageAsync()
. Değerlendirme CPU'ya bağlı bir işlem olduğundan CNTK C# API'sinin Evaluate() için zaman uyumsuz bir yöntemi olmadığıdır (ayrıntılı açıklama için lütfen bu makaleye bakın). Ancak, yanıt verme için boşaltma gibi bazı kullanım örneklerinde değerlendirmenin zaman uyumsuz olarak çalıştırılması istenmektedir. Örnekte EvaluationSingleImageAsync()
uzantı yöntemini EvaluateAsync()
kullanarak bunu nasıl gerçekleştirebileceğimizi gösteriyoruz. Ayrıntılar için lütfen C#/.NET Yönetilen API kullanarak sayfasında Değerlendirmeyi zaman uyumsuz olarak çalıştırma bölümüne bakın.
- Ara katmanları değerlendirme:
EvaluateIntermediateLayer()
- Birden çok düğümden gelen çıkışları değerlendirme:
EvaluateCombinedOutputs()
Operations
Gürültü karşıtlığı tahmin düğümü
Bu, sınıfların sayısı çok fazla olduğunda ağları eğitmek için kullanılan yerleşik verimli (ancak yaklaşık) bir kayıp işlevi sağlar. Örneğin, on veya yüz binlerce sözcükten oluşan bir sözlükten sonraki sözcüğü tahmin etmek istediğinizde bunu kullanabilirsiniz.
Bunu kullanmak için kaybınızı şu şekilde tanımlayın:
loss = nce_loss(weights, biases, inputs, labels, noise_distribution)
ve eğitimi tamamladıktan sonra aşağıdaki gibi tahminlerde bulunabilirsiniz
logits = C.times(weights, C.reshape(inputs, (1,), 1)) + biases
Gürültü karşıtlığı tahmin kaybının çıkarım maliyetlerini azaltmaya yardımcı olamayacağını unutmayın; maliyet tasarrufları yalnızca eğitim sırasında sağlanır.
Geliştirilmiş AttentionModel
AttentionModel katmanımızdaki bir hata düzeltildi ve artık kağıdı sadık bir şekilde uyguluyoruz
Hizalamak ve Çevirmek için Ortak Learning Nöral Makine Çevirisi (Bahdanau ve diğerleri)
Ayrıca, AttentionModel bağımsız değişkenleri attention_span
ve attention_axis
kullanım dışı bırakılmıştır. Varsayılan değerlerine bırakılmalıdır. Bu durumda dikkat tüm dizi üzerinde hesaplanır ve çıkış, ikinci bağımsız değişkenin ekseni üzerindeki ilk bağımsız değişkenle aynı boyuttaki vektörlerin dizisidir.
Bu da önemli hız kazanımlarına yol açar (CNTK 204 Öğreticimiz artık 2 kat daha hızlı çalışıyor).
Katıştırılmış katman için seyrek gradyan üzerinde toplama
Bu değişiklik, sözcük dağarcığı boyutu çok büyük olduğunda gradyan toplamadan önce seyrekten yoğuna maliyetli dönüştürme tasarrufu sağlar. Şu anda, gpu üzerinde sayısal olmayan veri paralel SGD ile eğitim yaparken GPU derlemesi için etkinleştirilmiştir. Diğer dağıtılmış öğrenciler ve CPU derlemesi için varsayılan olarak devre dışıdır. Python'da çağrılarak cntk.cntk_py.use_sparse_gradient_aggregation_in_data_parallel_sgd(False)
el ile kapatılabilir. GPU derlemesinde CPU cihazıyla dağıtılmış eğitim çalıştırmaya yönelik nadir durumlarda, engellenmemiş özel durumu önlemek için bunu el ile kapatmanız gerektiğini unutmayın
1B verilerde kıvrımı etkinleştirmek için C++ dilinde daha düşük konvolusyon sıralaması
Şimdi convolution
ve convolution_transpose
1 yerine 0 olarak ayarlayarak reductionRank
kanal veya derinlik boyutu olmayan verileri destekleyin. Bu değişikliğin motivasyonu, geometrik verileri yeniden şekillendirme yoluyla sahte bir kanal boyutu eklemeye gerek kalmadan yerel olarak destekleyebilme yeteneği eklemektir.
Genişlemiş konvolüsyon (yalnızca GPU)
BrainScript, C++ ve Python API'si tarafından kullanıma sunulan GPU'da dilasyon kıvrımı desteği ekledik. Dilasyon kıvrımı, aslında büyük bir çekirdek gerektirmeden çekirdek boyutunu etkili bir şekilde artırır. Dilasyon kıvrımı kullanmak için en az cuDNN 6.0 gerekir. Genişlemiş konvolüsyon, içindeki https://arxiv.org/pdf/1511.07122.pdfgörüntü segmentasyonunun sonucunu iyileştirerek gerekli belleği artırmadan alıcı alanı üstel olarak artırdı. Dikkate alınacak bir nokta, şu anda CPU'da genişlemiş konvolüsyon uygulaması olmamasıdır, bu nedenle CPU üzerinde genişlemiş konvolüsyon içeren bir modeli değerlendiremezsiniz.
Konvolüsyon için ücretsiz statik eksen desteği
- Konvolüsyon için ücretsiz statik eksenler
FreeDimension
için destek ekledik. Bu, giriş tensor boyutunu minibatch'ten minibatch'e değiştirmeye olanak tanır. Örneğin, CNN'ler söz konusu olduğunda bu, her minibatch'in farklı bir temel görüntü boyutuna sahip olmasını sağlar. Havuz düğümü için de benzer destek etkinleştirildi. - Nesne algılama için Daha Hızlı R-CNN örneğinin henüz konvolüsyon için ücretsiz statik eksen desteğinden yararlanmadığını unutmayın (yani giriş görüntülerini sabit bir boyuta ölçeklendirmeye ve doldurmaya devam eder). Bu örnek, rastgele giriş görüntüsü boyutları için serbest statik eksenler kullanacak şekilde güncelleştiriliyor ve sonraki sürüm için hedefleniyor.
Deterministic Pooling
Şimdi çağrısı cntk.debug.force_deterministic()
maksimum ve ortalama havuz belirlemesi yapacaktır, bu davranış cuDNN sürüm 6 veya sonraki bir sürüme bağlıdır.
Python API'sine Kırpma Düğümü Ekleme
Bazı görüntü segmentasyon ağını desteklemek için C++ ve Python API'sine Kırpma düğümü ekledik. Kırpma düğümü, ilk girişini uzamsal eksenler boyunca kırparak sonucun ikinci (başvuru) girişinin uzamsal boyutuyla eşleşmesini sağlar. Tüm uzamsal olmayan boyutlar değişmez. Kırpma uzaklıkları, ağdan geçirilerek ve iki girişteki etkinleştirmeler arasında alıcı alanların merkezlerini eşleştirerek doğrudan belirtilebilir veya otomatik olarak hesaplanabilir
Performans
AlexNet'te CPU'da çıkarım hızını yaklaşık 2 kat artırmaya yönelik Intel MKL güncelleştirmesi
Test altyapısı güncelleştirmelerine bağımlılık nedeniyle bu çalışma bir sonraki sürüme geçirilir.
Keras ve Tensorboard
CNTK üzerinde Keras için çoklu GPU desteği.
Keras ile CNTK üzerinde paralel eğitim gerçekleştirmeyi ayrıntılı bir şekilde ele alan bir makale ekledik. Ayrıntılar burada.
CNTK için tensorboard görüntüsü desteği.
TensorBoard için görüntü özelliği desteğini ekledik. Artık CNTK kullanıcılar resimleri görüntülemek için TensorBoard kullanabilir. Daha fazla ayrıntı ve örnek burada bulunabilir.
Teşekkürler
Aşağıdaki topluluk üyelerine katkılarından dolayı teşekkür ederiz:+
- @arturl
- @chentaMS
- @cijianzy
- @DaveyBiggers
- @duli2012
- @eldakms
- @FDecaYed
- @junjieqian
- @karolzak
- @KGWANGMIN
- @mnidza
- @ottolu
- @raaaar
- @StillKeepTry
- @taehoonlee
- @vmazalov
Bu sürüm notlarında gözden kaçırmış olabileceğimiz topluluk katkıları için özür dileriz.