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.
ŞUNLAR IÇIN GEÇERLIDIR:
Machine Learning Studio (klasik)
Azure Machine Learning
Önemli
Machine Learning Stüdyosu (klasik) desteği 31 Ağustos 2024'te sona erecektir. Bu tarihe kadar Azure Machine Learning'e geçmenizi öneririz.
1 Aralık 2021'den başlayarak artık yeni Machine Learning Stüdyosu (klasik) kaynakları oluşturamayacaksınız. 31 Ağustos 2024'e kadar mevcut Machine Learning Stüdyosu (klasik) kaynaklarını kullanmaya devam edebilirsiniz.
- Makine öğrenmesi projelerini ML Studio'dan (klasik) Azure Machine Learning'e taşıma hakkındaki bilgilere bakın.
- Azure Machine Learning hakkında daha fazla bilgi edinin
ML Stüdyosu (klasik) belgeleri kullanımdan kaldırılacak ve gelecekte güncelleştirilmeyecektir.
Net# Microsoft tarafından geliştirilen ve derin sinir ağları veya rastgele boyutların kıvrımları gibi karmaşık sinir ağı mimarilerini tanımlamak için kullanılan bir dildir. Resim, video veya ses gibi veriler üzerinde öğrenmeyi geliştirmek için karmaşık yapıları kullanabilirsiniz.
Machine Learning Studio'daki tüm sinir ağı modüllerinde (klasik) Net# mimarisi belirtimi kullanabilirsiniz:
Bu makalede, Net# kullanarak özel bir sinir ağı geliştirmek için gereken temel kavramlar ve söz dizimi açıklanmaktadır:
- Sinir ağı gereksinimleri ve birincil bileşenleri tanımlama
- Net# belirtim dilinin söz dizimi ve anahtar sözcükleri
- Net kullanılarak oluşturulan özel sinir ağlarının örnekleri#
Sinir ağı temelleri
Sinir ağı yapısı katmanlar halinde düzenlenmiş düğümlerden ve düğümler arasındaki ağırlıklı bağlantılardan (veya kenarlardan) oluşur. Bağlantılar yönlü ve her bağlantının bir kaynak düğümü ve bir hedef düğümü vardır.
Eğitilebilir her katmanın (gizli veya çıkış katmanı) bir veya daha fazla bağlantı paketi vardır. Bağlantı paketi, bir kaynak katmanından ve bu kaynak katmandan gelen bağlantıların belirtiminden oluşur. Belirli bir paketteki tüm bağlantılar kaynak ve hedef katmanları paylaşır. Net# dilinde bir bağlantı paketi, paketin hedef katmanına ait olarak kabul edilir.
Net#, girişlerin gizli katmanlara ve çıkışlara eşlenme şeklini özelleştirmenize olanak tanıyan çeşitli bağlantı paketlerini destekler.
Varsayılan veya standart paket, kaynak katmandaki her düğümün hedef katmandaki her düğüme bağlandığı tam bir pakettir.
Ayrıca, Net# aşağıdaki dört tür gelişmiş bağlantı paketini destekler:
Filtrelenmiş paketler. Kaynak katman düğümünün ve hedef katman düğümünün konumlarını kullanarak bir koşul tanımlayabilirsiniz. Koşul True olduğunda düğümler bağlanır.
Kıvrımlı paketler. Kaynak katmanda düğümlerin küçük mahallelerini tanımlayabilirsiniz. Hedef katmandaki her düğüm, kaynak katmandaki düğümlerin bir mahallesine bağlanır.
Havuz paketleri ve Yanıt normalleştirme paketleri. Bunlar, kullanıcının kaynak katmandaki küçük düğüm mahallelerini tanımladığı kıvrımlı paketlere benzer. Fark, bu paketlerdeki kenarların ağırlıklarının eğitilemez olmasıdır. Bunun yerine, hedef düğüm değerini belirlemek için kaynak düğüm değerlerine önceden tanımlanmış bir işlev uygulanır.
Desteklenen özelleştirmeler
Machine Learning Studio'da (klasik) oluşturduğunuz sinir ağı modellerinin mimarisi, Net# kullanılarak kapsamlı bir şekilde özelleştirilebilir. Şunları yapabilirsiniz:
- Gizli katmanlar oluşturun ve her katmandaki düğüm sayısını kontrol edin.
- Katmanların birbirine nasıl bağlanacağını belirtin.
- Convolutions ve ağırlık paylaşım paketleri gibi özel bağlantı yapılarını tanımlayın.
- Farklı etkinleştirme işlevleri belirtin.
Belirtim dili söz diziminin ayrıntıları için bkz . Yapı Belirtimi.
Simplex'ten karmaşıka kadar bazı yaygın makine öğrenmesi görevleri için sinir ağları tanımlama örnekleri için bkz . Örnekler.
Genel gereksinimler
- Tam olarak bir çıkış katmanı, en az bir giriş katmanı ve sıfır veya daha fazla gizli katman olmalıdır.
- Her katmanın kavramsal olarak rastgele boyutlardan oluşan dikdörtgen bir dizi halinde düzenlenmiş sabit sayıda düğümü vardır.
- Giriş katmanlarının ilişkili eğitilmiş parametresi yoktur ve örnek verilerinin ağa girdiği noktayı temsil eder.
- Eğitilebilir katmanlar (gizli ve çıkış katmanları), ağırlıklar ve sapmalar olarak bilinen ilişkili eğitilmiş parametrelere sahiptir.
- Kaynak ve hedef düğümler ayrı katmanlarda olmalıdır.
- Bağlantılar ansiklik olmalıdır; başka bir deyişle, ilk kaynak düğüme geri dönen bir bağlantı zinciri olamaz.
- Çıkış katmanı, bağlantı paketinin kaynak katmanı olamaz.
Yapı belirtimleri
Nöral ağ yapısı belirtimi üç bölümden oluşur: sabit bildirim, katman bildirimi, bağlantı bildirimi. ayrıca isteğe bağlı bir paylaşım bildirimi bölümü de vardır. Bölümler herhangi bir sırada belirtilebilir.
Sabit bildirim
Sabit bildirim isteğe bağlıdır. Sinir ağı tanımının başka bir yerinde kullanılan değerleri tanımlamak için bir araç sağlar. Bildirim deyimi, bir tanımlayıcıdan ve ardından eşittir işaretinden ve değer ifadelerinden oluşur.
Örneğin, aşağıdaki deyim bir sabit xtanımlar:
Const X = 28;
İki veya daha fazla sabiti aynı anda tanımlamak için tanımlayıcı adlarını ve değerlerini ayraç içine alın ve noktalı virgül kullanarak ayırın. Örneğin:
Const { X = 28; Y = 4; }
Her atama ifadesinin sağ tarafı tamsayı, gerçek sayı, Boole değeri (True veya False) veya matematiksel ifade olabilir. Örneğin:
Const { X = 17 * 2; Y = true; }
Katman bildirimi
Katman bildirimi gereklidir. Bağlantı paketleri ve öznitelikleri dahil olmak üzere katmanın boyutunu ve kaynağını tanımlar. Bildirim deyimi, katmanın adıyla (giriş, gizli veya çıkış) başlar ve ardından katmanın boyutları (pozitif tamsayıların bir demeti) izler. Örneğin:
input Data auto;
hidden Hidden[5,20] from Data all;
output Result[2] from Hidden all;
- Boyutların ürünü, katmandaki düğüm sayısıdır. Bu örnekte, katmanda 100 düğüm olduğu anlamına gelen iki boyut [5,20].
- Katmanlar tek bir özel durum dışında herhangi bir sırayla bildirilebilir: Birden fazla giriş katmanı tanımlanırsa, bildirilme sırası giriş verilerindeki özelliklerin sırasıyla eşleşmelidir.
Bir katmandaki düğüm sayısının otomatik olarak belirleneceğini belirtmek için anahtar sözcüğünü auto kullanın. Anahtar sözcüğün auto , katmana bağlı olarak farklı etkileri vardır:
- Giriş katmanı bildiriminde düğüm sayısı, giriş verilerindeki özelliklerin sayısıdır.
- Gizli katman bildiriminde düğüm sayısı, Gizli düğüm sayısı parametresi değeri tarafından belirtilen sayıdır.
- Çıkış katmanı bildiriminde düğüm sayısı iki sınıflı sınıflandırma için 2, regresyon için 1 ve çok sınıflı sınıflandırma için çıkış düğümlerinin sayısına eşittir.
Örneğin, aşağıdaki ağ tanımı tüm katmanların boyutunun otomatik olarak belirlenmesini sağlar:
input Data auto;
hidden Hidden auto from Data all;
output Result auto from Hidden all;
Eğitilebilir bir katman için katman bildirimi (gizli veya çıkış katmanları), isteğe bağlı olarak sınıflandırma modelleri için sigmoid ve regresyon modelleri için doğrusal olan çıkış işlevini (etkinleştirme işlevi olarak da adlandırılır) içerebilir. Varsayılanı kullansanız bile, netlik için isterseniz etkinleştirme işlevini açıkça belirtebilirsiniz.
Aşağıdaki çıkış işlevleri desteklenir:
- Sigmoid
- doğrusal
- softmax
- rlinear
- kare
- Karekök
- srlinear
- Abs
- Tanh
- brlinear
Örneğin, aşağıdaki bildirim softmax işlevini kullanır:
output Result [100] softmax from Hidden all;
Bağlantı bildirimi
Eğitilebilir katmanı tanımladıktan hemen sonra, tanımladığınız katmanlar arasında bağlantı bildirmeniz gerekir. Bağlantı paketi bildirimi anahtar sözcüğüyle frombaşlar ve ardından paketin kaynak katmanının adı ve oluşturulacak bağlantı paketinin türü gelir.
Şu anda beş tür bağlantı paketi desteklenmektedir:
-
Anahtar sözcükle gösterilen tam paketler
all - paketler ve ardından bir koşul ifadesi
-
anahtar sözcüğüyle
convolvegösterilen ve ardından convolution öznitelikleri ile gösterilen kıvrımlı paketler - Havuz paketleri , anahtar sözcüklerle belirtilen maksimum havuz veya ortalama havuz
- Anahtar sözcük yanıt normuyla gösterilen yanıt normalleştirme paketleri
Tam paketler
Tam bağlantı paketi, kaynak katmandaki her düğümden hedef katmandaki her düğüme bir bağlantı içerir. Bu, varsayılan ağ bağlantısı türüdür.
Filtrelenmiş paketler
Filtrelenmiş bağlantı paketi belirtimi, C# lambda ifadesi gibi söz dizimsel olarak ifade edilen bir koşul içerir. Aşağıdaki örnek iki filtrelenmiş paketi tanımlar:
input Pixels [10, 20];
hidden ByRow[10, 12] from Pixels where (s,d) => s[0] == d[0];
hidden ByCol[5, 20] from Pixels where (s,d) => abs(s[1] - d[1]) <= 1;
koşulunda
ByRow,sgiriş katmanının dikdörtgen düğüm dizisinin dizinini temsil eden bir parametredir vePixelsgizli katmanındByRowdüğüm dizisinin dizinini temsil eden bir parametredir. hem vesdtürü, iki uzunluğundaki tamsayıların bir demetidir. Kavramsal olarak,sve ile0 <= s[0] < 10tüm tamsayı çiftleri üzerinde aralıklar,0 <= s[1] < 20ved0 <= d[0] < 10ile0 <= d[1] < 12tüm tamsayı çiftleri üzerinde aralıklar.Koşul ifadesinin sağ tarafında bir koşul vardır. Bu örnekte koşulun
sdTrue olduğu her değeri için kaynak katman düğümünden hedef katman düğümüne bir kenar vardır. Bu nedenle, bu filtre ifadesi paketin tarafından tanımlanansdüğümden s[0] değerinin d[0] değerine eşit olduğu tüm durumlarda tarafındandtanımlanan düğüme bir bağlantı içerdiğini gösterir.
İsteğe bağlı olarak, filtrelenmiş bir paket için bir ağırlık kümesi belirtebilirsiniz. Weights özniteliğinin değeri, paket tarafından tanımlanan bağlantı sayısıyla eşleşen uzunlukta kayan nokta değerlerinin bir demeti olmalıdır. Varsayılan olarak, ağırlıklar rastgele oluşturulur.
Ağırlık değerleri hedef düğüm dizinine göre gruplandırılır. Yani, ilk hedef düğüm K kaynak düğümlerine bağlıysa, Ağırlıklar tanımlama grubunun ilk K öğeleri kaynak dizin sırasına göre ilk hedef düğümün ağırlıklarıdır. Aynı durum, kalan hedef düğümler için de geçerlidir.
Ağırlıkları doğrudan sabit değerler olarak belirtmek mümkündür. Örneğin, ağırlıkları daha önce öğrendiniz, bu söz dizimini kullanarak bunları sabit olarak belirtebilirsiniz:
const Weights_1 = [0.0188045055, 0.130500451, ...]
Kıvrımlı paketler
Eğitim verileri homojen bir yapıya sahip olduğunda, verilerin üst düzey özelliklerini öğrenmek için genellikle kıvrımlı bağlantılar kullanılır. Örneğin, görüntü, ses veya video verilerinde uzamsal veya zamana bağlı boyutsallık oldukça tekdüzen olabilir.
Kıvrımlı paketler, boyutlar arasında kaydırılmış dikdörtgen çekirdekler kullanıyor. Temelde her çekirdek, yerel mahallelerde uygulanan ve çekirdek uygulamaları olarak adlandırılan bir ağırlık kümesi tanımlar. Her çekirdek uygulaması, merkezi düğüm olarak adlandırılan kaynak katmandaki bir düğüme karşılık gelir. Çekirdeğin ağırlıkları birçok bağlantı arasında paylaşılır. Kıvrımlı bir pakette her çekirdek dikdörtgendir ve tüm çekirdek uygulamaları aynı boyuttadır.
Kıvrımlı paketler aşağıdaki öznitelikleri destekler:
InputShape , bu kıvrımlı paketin amaçları doğrultusunda kaynak katmanın boyutsallığını tanımlar. Değer, pozitif tamsayılardan oluşan bir demet olmalıdır. Tamsayıların çarpımının kaynak katmandaki düğüm sayısına eşit olması gerekir, ancak aksi takdirde, kaynak katman için bildirilen boyutsallık ile eşleşmesi gerekmez. Bu tanımlama grubunun uzunluğu, kıvrımlı paketin arity değeri olur. Genellikle arity, bir işlevin alabildiği bağımsız değişkenlerin veya işlenenlerin sayısını ifade eder.
Çekirdeklerin şeklini ve konumlarını tanımlamak için KernelShape, Stride, Padding, LowerPad ve UpperPad özniteliklerini kullanın:
KernelShape: (gerekli) Kıvrımlı paket için her çekirdeğin boyutsallığını tanımlar. Değer, paketin arity değerine eşit uzunlukta pozitif tamsayılardan oluşan bir demet olmalıdır. Bu tanımlama grubunun her bileşeni, InputShape'in ilgili bileşeninden büyük olmamalıdır.
Adım: (isteğe bağlı) Konvolüsyonun kayan adım boyutlarını (her boyut için bir adım boyutu), yani merkezi düğümler arasındaki uzaklığı tanımlar. Değer, paketin arity değeri olan uzunluğa sahip pozitif tamsayılardan oluşan bir demet olmalıdır. Bu tanımlama grubunun her bileşeni, KernelShape'in ilgili bileşeninden büyük olmamalıdır. Varsayılan değer, tüm bileşenlerin bire eşit olduğu bir tanımlama grubudur.
Paylaşım: (isteğe bağlı) Konvolüsyonun her boyutu için ağırlık paylaşımını tanımlar. Değer, tek bir Boole değeri veya paketin arity değeri olan bir uzunluğa sahip Boole değerleri demeti olabilir. Tek bir Boole değeri, belirtilen değere eşit tüm bileşenlerle doğru uzunlukta bir demet olacak şekilde genişletilir. Varsayılan değer, tüm True değerlerinden oluşan bir tanımlama grubudur.
MapCount: (isteğe bağlı) Kıvrımlı paket için özellik eşlemelerinin sayısını tanımlar. Değer, tek bir pozitif tamsayı veya paketin arity değerine sahip bir uzunluğa sahip pozitif tamsayılar demeti olabilir. Tek bir tamsayı değeri, ilk bileşenler belirtilen değere eşit ve kalan tüm bileşenler bire eşit olacak şekilde doğru uzunlukta bir demet olacak şekilde genişletilir. Varsayılan değer birdir. Özellik eşlemelerinin toplam sayısı, tanımlama grubunun bileşenlerinin ürünüdür. Bileşenler arasında bu toplam sayının faktöre edilmesi, özellik eşleme değerlerinin hedef düğümlerde nasıl gruplandırileceğini belirler.
Ağırlıklar: (isteğe bağlı) Paket için ilk ağırlıkları tanımlar. Değerin, bu makalenin devamında açıklandığı gibi, çekirdek başına ağırlık sayısının çekirdek başına ağırlık sayısı kadar uzunluğa sahip kayan nokta değerlerinin bir demeti olması gerekir. Varsayılan ağırlıklar rastgele oluşturulur.
Doldurmayı denetleen iki özellik kümesi vardır ve özellikler birbirini dışlar:
Doldurma: (isteğe bağlı) Girişin varsayılan doldurma düzeni kullanılarak doldurulup doldurulmayacağını belirler. Değer tek bir Boole değeri olabileceği gibi, paketin arity değeri olan uzunluğu olan Boole değerleri tanımlama grubu da olabilir.
Tek bir Boole değeri, belirtilen değere eşit tüm bileşenlerle doğru uzunlukta bir demet olacak şekilde genişletilir.
Bir boyutun değeri True ise, bu boyuttaki ilk ve son çekirdeklerin merkezi düğümleri kaynak katmandaki ilk ve son düğümler olacak şekilde ek çekirdek uygulamalarını desteklemek için bu boyutta sıfır değerli hücrelerle mantıksal olarak doldurulur. Bu nedenle, her boyuttaki "kukla" düğümlerin sayısı, tam olarak çekirdekleri doldurulmuş kaynak katmanına sığacak şekilde
(InputShape[d] - 1) / Stride[d] + 1otomatik olarak belirlenir.Bir boyutun değeri False ise, çekirdekler her bir taraftaki düğüm sayısının aynı (en fazla 1 fark) olması için tanımlanır. Bu özniteliğin varsayılan değeri, tüm bileşenleri False'a eşit olan bir tanımlama grubudur.
UpperPad ve LowerPad: (isteğe bağlı) Kullanılacak doldurma miktarı üzerinde daha fazla denetim sağlayın. Önemli: Bu öznitelikler yalnızca yukarıdaki Padding özelliği tanımlanmamışsa tanımlanabilir. Değerler, paketin arity değeri olan uzunluklara sahip tamsayı değerli demetler olmalıdır. Bu öznitelikler belirtildiğinde, giriş katmanının her boyutunun alt ve üst uçlarına "kukla" düğümler eklenir. Her boyutta alt ve üst uçlara eklenen düğüm sayısı sırasıyla LowerPad[i] ve UpperPad[i] tarafından belirlenir.
Çekirdeklerin yalnızca "gerçek" düğümlere karşılık gelip "kukla" düğümlere karşılık gelmediğinden emin olmak için aşağıdaki koşulların karşılanması gerekir:
LowerPad'in her bileşeni kesinlikle değerinden
KernelShape[d]/2küçük olmalıdır.UpperPad'in her bileşeni değerinden
KernelShape[d]/2büyük olmamalıdır.Bu özniteliklerin varsayılan değeri, 0'a eşit tüm bileşenlere sahip bir tanımlama grubudur.
Padding = true ayarı, çekirdeğin "merkezini" "gerçek" girişin içinde tutmak için gerektiği kadar doldurmaya izin verir. Bu işlem, çıktı boyutunu hesaplamaya yönelik matematiği biraz değiştirir. Genel olarak, çıkış boyutu D olarak
D = (I - K) / S + 1hesaplanır; buradaIgiriş boyutudur,Kçekirdek boyutudur,Sadımdır ve/tamsayı bölmedir (sıfıra doğru yuvarlanır). UpperPad = [1, 1] ayarlarsanız, giriş boyutuIetkili bir şekilde 29 olur ve bu nedenleD = (29 - 5) / 2 + 1 = 13. Ancak, Padding = true olduğunda temeldeItarafındanK - 1çarpılır; bu nedenleD = ((28 + 4) - 5) / 2 + 1 = 27 / 2 + 1 = 13 + 1 = 14. UpperPad ve LowerPad değerlerini belirterek doldurma üzerinde, Doldurma = true ayarını yaptığınıza göre çok daha fazla denetim elde edersiniz.
Kıvrımlı ağlar ve uygulamaları hakkında daha fazla bilgi için şu makalelere bakın:
- http://d2l.ai/chapter_convolutional-neural-networks/lenet.html
- https://research.microsoft.com/pubs/68920/icdar03.pdf
Havuz paketleri
Havuz paketi , kıvrımlı bağlantıya benzer geometri uygular, ancak hedef düğüm değerini türetmek için kaynak düğüm değerlerine önceden tanımlanmış işlevler kullanır. Bu nedenle, havuz paketleri eğitilebilir duruma (ağırlıklar veya sapmalar) sahip değildir. Havuz paketleri Sharing, MapCount ve Weights dışındaki tüm kıvrımlı öznitelikleri destekler.
Genellikle, bitişik havuz birimleri tarafından özetlenen çekirdekler çakışmaz. Stride[d] her boyutta KernelShape[d] değerine eşitse, elde edilen katman genellikle kıvrımlı sinir ağlarında kullanılan geleneksel yerel havuz katmanıdır. Her hedef düğüm, kaynak katmandaki çekirdeğinin etkinliklerinin maksimumunu veya ortalamasını hesaplar.
Aşağıdaki örnekte bir havuz paketi gösterilmektedir:
hidden P1 [5, 12, 12]
from C1 max pool {
InputShape = [ 5, 24, 24];
KernelShape = [ 1, 2, 2];
Stride = [ 1, 2, 2];
}
- Paketin arity değeri 3'tür: yani tanımlama demetlerinin
InputShapeuzunluğu ,KernelShapeveStride. - Kaynak katmandaki düğüm sayısıdır
5 * 24 * 24 = 2880. - KernelShape ve Stride eşit olduğundan bu geleneksel bir yerel havuz katmanıdır.
- Hedef katmandaki düğüm sayısıdır
5 * 12 * 12 = 1440.
Havuz katmanları hakkında daha fazla bilgi için şu makalelere bakın:
- https://www.cs.toronto.edu/~hinton/absps/imagenet.pdf (Bölüm 3.4)
- https://cs.nyu.edu/~koray/publis/lecun-iscas-10.pdf
- https://cs.nyu.edu/~koray/publis/jarrett-iccv-09.pdf
Yanıt normalleştirme paketleri
Yanıt normalleştirmesi, ilk olarak Geoffrey Hinton ve diğer yazarlar tarafından Deep Convolutional Nöral Networks ile ImageNet Sınıflandırması makalesinde yer alan yerel bir normalleştirme şemasıdır.
Yanıt normalleştirme, sinir ağlarında genelleştirmeye yardımcı olmak için kullanılır. Bir nöron çok yüksek bir aktivasyon düzeyinde ateşlendiğinde, yerel bir yanıt normalleştirme katmanı çevresindeki nöronların etkinleştirme düzeyini bastırır. Bu, üç parametre (α, βve ) ve kbir kıvrımlı yapı (veya mahalle şekli) kullanılarak yapılır. Hedef katman y'deki her nöron, kaynak katmandaki bir nöron x'e karşılık gelir. y'nin etkinleştirme düzeyi, aşağıdaki formül tarafından verilir; burada f bir nöronun etkinleştirme düzeyidir ve Nx aşağıdaki kıvrımlı yapıda tanımlandığı gibi çekirdektir (veya x mahallesindeki nöronları içeren kümedir):
Yanıt normalleştirme paketleri Sharing, MapCount ve Weights dışında tüm kıvrımlı öznitelikleri destekler.
Çekirdek x ile aynı haritada nöronlar içeriyorsa, normalleştirme düzeni aynı harita normalleştirmesi olarak adlandırılır. Aynı eşleme normalleştirmesini tanımlamak için InputShape'deki ilk koordinat 1 değerine sahip olmalıdır.
Çekirdek x ile aynı uzamsal konumda nöronlar içeriyorsa ancak nöronlar başka haritalardaysa, normalleştirme şeması haritalar arasında normalleştirme olarak adlandırılır. Bu tür bir yanıt normalleştirmesi, gerçek nöronlarda bulunan türden esinlenen bir yanal engelleme biçimi uygular ve farklı haritalarda hesaplanan nöron çıkışları arasında büyük aktivasyon düzeyleri için rekabet oluşturur. Eşlemeler arasında normalleştirmeyi tanımlamak için, ilk koordinat birden büyük ve eşleme sayısından büyük olmayan bir tamsayı olmalı ve koordinatların geri kalanında 1 değeri bulunmalıdır.
Yanıt normalleştirme paketleri hedef düğüm değerini belirlemek için kaynak düğüm değerlerine önceden tanımlanmış bir işlev uyguladığından, eğitilebilir durumları (ağırlıklar veya sapmalar) yoktur.
Not
Hedef katmandaki düğümler, çekirdeklerin merkezi düğümleri olan nöronlara karşılık gelir. Örneğin, tekse KernelShape[d] , KernelShape[d]/2 merkezi çekirdek düğümüne karşılık gelir. Eşitse KernelShape[d] , merkezi düğüm konumundadır KernelShape[d]/2 - 1. Bu nedenle, False ise Padding[d] , ilk ve son KernelShape[d]/2 düğümlerin hedef katmanda karşılık gelen düğümleri yoktur. Bu durumdan kaçınmak için Doldurma'yı [true, true, ..., true] olarak tanımlayın.
Daha önce açıklanan dört özniteliğe ek olarak, yanıt normalleştirme paketleri de aşağıdaki öznitelikleri destekler:
-
Alfa: (gerekli) Önceki formülde karşılık gelen
αkayan nokta değerini belirtir. -
Beta: (gerekli) Önceki formülde karşılık gelen
βkayan nokta değerini belirtir. -
Uzaklık: (isteğe bağlı) Önceki formülde karşılık gelen
kkayan nokta değerini belirtir. Varsayılan olarak 1 olur.
Aşağıdaki örnek, şu öznitelikleri kullanarak bir yanıt normalleştirme paketini tanımlar:
hidden RN1 [5, 10, 10]
from P1 response norm {
InputShape = [ 5, 12, 12];
KernelShape = [ 1, 3, 3];
Alpha = 0.001;
Beta = 0.75;
}
- Kaynak katman, her biri 12x12 boyutunda ve toplam 1440 düğümde olmak üzere beş harita içerir.
- KernelShape değeri, mahallenin 3x3 dikdörtgen olduğu aynı harita normalleştirme katmanı olduğunu gösterir.
- Doldurma'nın varsayılan değeri False'tur, bu nedenle hedef katmanın her boyutta yalnızca 10 düğümü vardır. Hedef katmana kaynak katmandaki her düğüme karşılık gelen bir düğüm eklemek için Doldurma = [true, true, true] ekleyin; ve RN1 boyutunu [5, 12, 12] olarak değiştirin.
Paylaşım bildirimi
Net# isteğe bağlı olarak paylaşılan ağırlıklarla birden çok paket tanımlamayı destekler. Yapıları aynıysa iki paketin ağırlıkları paylaşılabilir. Aşağıdaki söz dizimi, paylaşılan ağırlıklara sahip paketleri tanımlar:
share-declaration:
share { layer-list }
share { bundle-list }
share { bias-list }
layer-list:
layer-name , layer-name
layer-list , layer-name
bundle-list:
bundle-spec , bundle-spec
bundle-list , bundle-spec
bundle-spec:
layer-name => layer-name
bias-list:
bias-spec , bias-spec
bias-list , bias-spec
bias-spec:
1 => layer-name
layer-name:
identifier
Örneğin, aşağıdaki paylaşım bildirimi katman adlarını belirtir ve hem ağırlıkların hem de sapmaların paylaşılması gerektiğini belirtir:
Const {
InputSize = 37;
HiddenSize = 50;
}
input {
Data1 [InputSize];
Data2 [InputSize];
}
hidden {
H1 [HiddenSize] from Data1 all;
H2 [HiddenSize] from Data2 all;
}
output Result [2] {
from H1 all;
from H2 all;
}
share { H1, H2 } // share both weights and biases
- Giriş özellikleri iki eşit boyutlu giriş katmanında bölümlenir.
- Gizli katmanlar daha sonra iki giriş katmanındaki daha üst düzey özellikleri hesaplar.
- share-bildirimi, H1 ve H2'nin ilgili girişlerinden aynı şekilde hesaplanması gerektiğini belirtir.
Alternatif olarak, bu iki ayrı paylaşım bildirimiyle aşağıdaki gibi belirtilebilir:
share { Data1 => H1, Data2 => H2 } // share weights
<!-- -->
share { 1 => H1, 1 => H2 } // share biases
Kısa formu yalnızca katmanlar tek bir paket içerdiğinde kullanabilirsiniz. Genel olarak, paylaşım yalnızca ilgili yapı aynı olduğunda mümkündür, yani aynı boyuta, aynı kıvrımlı geometriye vb. sahip oldukları anlamına gelir.
Net# kullanımı örnekleri
Bu bölümde gizli katmanlar eklemek, gizli katmanların diğer katmanlarla etkileşim kurma şeklini tanımlamak ve kıvrımlı ağlar oluşturmak için Net# özelliğini nasıl kullanabileceğinize ilişkin bazı örnekler sağlanmaktadır.
Basit bir özel sinir ağı tanımlama: "Merhaba Dünya" örneği
Bu basit örnek, tek bir gizli katmana sahip bir sinir ağı modelinin nasıl oluşturulacağını gösterir.
input Data auto;
hidden H [200] from Data all;
output Out [10] sigmoid from H all;
Örnekte aşağıdaki gibi bazı temel komutlar gösterilmektedir:
- İlk satır giriş katmanını (adlı)
Datatanımlar. Anahtar sözcüğünüautokullandığınızda, sinir ağı giriş örneklerindeki tüm özellik sütunlarını otomatik olarak içerir. - İkinci satır gizli katmanı oluşturur. Ad
H, 200 düğümü olan gizli katmana atanır. Bu katman giriş katmanına tamamen bağlıdır. - Üçüncü satır, 10 çıkış düğümü içeren çıkış katmanını (adlı
Out) tanımlar. Sinir ağı sınıflandırma için kullanılıyorsa, sınıf başına bir çıkış düğümü vardır. Sigmoid anahtar sözcüğü, çıkış işlevinin çıkış katmanına uygulandığını gösterir.
Birden çok gizli katmanı tanımlama: görüntü işleme örneği
Aşağıdaki örnekte, birden çok özel gizli katmanla biraz daha karmaşık bir sinir ağının nasıl tanımlanacağı gösterilmektedir.
// Define the input layers
input Pixels [10, 20];
input MetaData [7];
// Define the first two hidden layers, using data only from the Pixels input
hidden ByRow [10, 12] from Pixels where (s,d) => s[0] == d[0];
hidden ByCol [5, 20] from Pixels where (s,d) => abs(s[1] - d[1]) <= 1;
// Define the third hidden layer, which uses as source the hidden layers ByRow and ByCol
hidden Gather [100]
{
from ByRow all;
from ByCol all;
}
// Define the output layer and its sources
output Result [10]
{
from Gather all;
from MetaData all;
}
Bu örnekte sinir ağları belirtim dilinin çeşitli özellikleri gösterilmektedir:
- Yapı iki giriş katmanına
Pixelssahiptir veMetaData. - Katman
Pixels, hedef katmanları veByRowolan iki bağlantı paketi için bir kaynak katmandırByCol. - ve
GatherkatmanlarıResult, birden çok bağlantı paketindeki hedef katmanlardır. - Çıkış katmanı,
Resultbiri hedef katman olarak ikinci düzey gizli katman, diğeri de girişGatherkatmanını hedef katmanMetaDataolarak içeren iki bağlantı paketindeki hedef katmandır. - Gizli katmanlar
ByRowveByCol, koşul ifadelerini kullanarak filtrelenmiş bağlantıyı belirtir. Daha kesin olarak, [x, y] konumundakiByRowdüğüm, ilk dizin koordinatı düğümünPixelsilk koordinatı olan x'e eşit olan düğümlere bağlanır. Benzer şekilde, [x, y] konumundakiByColdüğüm, düğümünPixelsikinci koordinatı olan y içinde ikinci dizin koordinatını içeren düğümlere bağlanır.
Çok sınıflı sınıflandırma için bir kıvrımlı ağ tanımlama: basamak tanıma örneği
Aşağıdaki ağın tanımı sayıları tanıyacak şekilde tasarlanmıştır ve sinir ağını özelleştirmeye yönelik bazı gelişmiş teknikleri gösterir.
input Image [29, 29];
hidden Conv1 [5, 13, 13] from Image convolve
{
InputShape = [29, 29];
KernelShape = [ 5, 5];
Stride = [ 2, 2];
MapCount = 5;
}
hidden Conv2 [50, 5, 5]
from Conv1 convolve
{
InputShape = [ 5, 13, 13];
KernelShape = [ 1, 5, 5];
Stride = [ 1, 2, 2];
Sharing = [false, true, true];
MapCount = 10;
}
hidden Hid3 [100] from Conv2 all;
output Digit [10] from Hid3 all;
Yapı, tek bir giriş katmanına sahiptir:
Image.anahtar sözcüğü
convolve, veConv1adlıConv2katmanların kıvrımlı katmanlar olduğunu gösterir. Bu katman bildirimlerinden her biri, convolution özniteliklerinin listesiyle takip edilir.Ağ,
Hid3ikinci gizli katman olan öğesine tamamen bağlı olan üçüncü bir gizli katmanaConv2sahiptir.çıkış katmanı,
Digityalnızca üçüncü gizli katmanHid3olan öğesine bağlanır. anahtar sözcüğüall, çıkış katmanının öğesine tamamen bağlıHid3olduğunu gösterir.Konvolüsyonun arity değeri üç türdür: tanımlama demetlerinin
InputShapeuzunluğu ,KernelShape,StrideveSharing.Çekirdek başına ağırlık sayısıdır
1 + KernelShape\[0] * KernelShape\[1] * KernelShape\[2] = 1 + 1 * 5 * 5 = 26. Veya .26 * 50 = 1300Her gizli katmandaki düğümleri aşağıdaki gibi hesaplayabilirsiniz:
NodeCount\[0] = (5 - 1) / 1 + 1 = 5NodeCount\[1] = (13 - 5) / 2 + 1 = 5NodeCount\[2] = (13 - 5) / 2 + 1 = 5Toplam düğüm sayısı, katmanın bildirilen boyutsallığı ([50, 5, 5]) aşağıdaki gibi kullanılarak hesaplanabilir:
MapCount * NodeCount\[0] * NodeCount\[1] * NodeCount\[2] = 10 * 5 * 5 * 5Yalnızca
Sharing[d]içind == 0False olduğundan çekirdek sayısı şeklindedirMapCount * NodeCount\[0] = 10 * 5 = 50.
İlgili kaynaklar
Sinir ağlarının mimarisini özelleştirmek için Net# dili, Microsoft'ta Shon Katzenberger (Mimar, Makine Öğrenmesi) ve Alexey Kamenev (Yazılım Mühendisi, Microsoft Research) tarafından geliştirilmiştir. Görüntü algılamadan metin analizine kadar çeşitli makine öğrenmesi projeleri ve uygulamaları için dahili olarak kullanılır. Daha fazla bilgi için bkz . Machine Learning studio'da Sinir Ağları - Net'e Giriş#