Python API Otomatik Yükseltme ve Başlatıcı
Bu bölüm, MXNet'teki otomatik yükseltme ve başlatıcı API ile ilgilidir.
mxnet.autograd
Bu, MXNet'in NDArray için otomatik yükseltme API'sidir. Aşağıdaki sınıfa sahiptir -
Sınıf: İşlev ()
Autograd'da özelleştirilmiş farklılaştırma için kullanılır. Olarak yazılabilirmxnet.autograd.Function. Kullanıcı herhangi bir nedenle varsayılan zincir kuralı tarafından hesaplanan degradeleri kullanmak istemezse, hesaplama için farklılaşmayı özelleştirmek için mxnet.autograd İşlev sınıfını kullanabilir. Forward () ve Backward () olmak üzere iki yöntemi vardır.
Aşağıdaki noktaların yardımıyla bu sınıfın işleyişini anlayalım:
Öncelikle ileri yöntemde hesaplamamızı tanımlamamız gerekir.
Ardından, geriye dönük yöntemde özelleştirilmiş farklılaşmayı sağlamamız gerekir.
Artık gradyan hesaplaması sırasında, kullanıcı tanımlı geriye dönük işlev yerine, mxnet.autograd, kullanıcı tarafından tanımlanan geri işlevini kullanacaktır. Ayrıca ileri ve geri bazı işlemler için numpy dizisine ve geri dönüş yapabiliriz.
Example
Mxnet.autograd.function sınıfını kullanmadan önce, geriye dönük ve ileri yöntemlerle kararlı bir sigmoid işlevi tanımlayalım:
class sigmoid(mx.autograd.Function):
def forward(self, x):
y = 1 / (1 + mx.nd.exp(-x))
self.save_for_backward(y)
return y
def backward(self, dy):
y, = self.saved_tensors
return dy * y * (1-y)
Şimdi, fonksiyon sınıfı aşağıdaki gibi kullanılabilir -
func = sigmoid()
x = mx.nd.random.uniform(shape=(10,))
x.attach_grad()
with mx.autograd.record():
m = func(x)
m.backward()
dx_grad = x.grad.asnumpy()
dx_grad
Output
Kodu çalıştırdığınızda, aşağıdaki çıktıyı göreceksiniz -
array([0.21458015, 0.21291625, 0.23330082, 0.2361367 , 0.23086983,
0.24060014, 0.20326573, 0.21093895, 0.24968489, 0.24301809],
dtype=float32)
Yöntemler ve parametreleri
Mxnet.autogard.function sınıfının yöntemleri ve parametreleri aşağıdadır -
Yöntemler ve Parametreleri | Tanım |
---|---|
ileri (kafalar [, head_grads, keep_graph,…]) | Bu yöntem ileri hesaplama için kullanılır. |
geriye (kafalar [, head_grads, keep_graph,…]) | Bu yöntem, geriye dönük hesaplama için kullanılır. Önceden işaretlenen değişkenlere göre kafa gradyanlarını hesaplar. Bu yöntem, ileriye dönük çıktı kadar çok girdi alır. Ayrıca ileriye doğru girişler kadar çok sayıda NDArray döndürür. |
get_symbol (x) | Bu yöntem, kaydedilen hesaplama geçmişini geri almak için kullanılır. Symbol. |
grad (kafalar, değişkenler [, head_grads,…]) | Bu yöntem, değişkenlere göre kafa gradyanlarını hesaplar. Degradeler hesaplandıktan sonra, variable.grad'a depolanmak yerine, yeni NDArray'ler olarak döndürülür. |
is_recording () | Bu yöntemin yardımıyla kaydetme ve kaydetmeme durumlarını alabiliriz. |
is_training () | Bu yöntemin yardımıyla eğitim ve tahmin konusunda durum alabiliriz. |
mark_variables (değişkenler, gradyanlar [, grad_reqs]) | Bu yöntem, otomatik sınıflandırma için gradyan hesaplamak için NDArray'leri değişkenler olarak işaretler. Bu yöntem, bir değişkendeki .attach_grad () işleviyle aynıdır, ancak tek fark, bu çağrı ile gradyanı herhangi bir değere ayarlayabilmemizdir. |
duraklat ([tren_modu]) | Bu yöntem, hesaplanacak degradelere ihtiyaç duymayan kodlar için 'with' ifadesinde kullanılacak bir kapsam bağlamı döndürür. |
tahmin_modu () | Bu yöntem, ileri geçiş davranışının çıkarım moduna ayarlandığı ve kayıt durumlarını değiştirmeden 'with' ifadesinde kullanılacak bir kapsam bağlamı döndürür. |
kayıt ([tren_modu]) | Bir dönecek autograd 'with' ifadesinde kullanılacak kapsam bağlamını kaydeder ve degradelerin hesaplanması gereken kodu yakalar. |
set_recording (is_recording) | İs_recoring () 'e benzer şekilde, bu yöntemin yardımıyla kaydetme ve kaydetmeme durumlarını alabiliriz. |
set_training (is_training) | İs_traininig () 'ye benzer şekilde, bu yöntemin yardımıyla durumu eğitim veya tahmin olarak ayarlayabiliriz. |
train_mode () | Bu yöntem, ileri geçiş davranışının eğitim moduna ayarlandığı ve kayıt durumlarını değiştirmeden 'with' ifadesinde kullanılacak bir kapsam içeriği döndürecektir. |
Uygulama Örneği
Aşağıdaki örnekte, değişkenlere göre kafa gradyanını hesaplamak için mxnet.autograd.grad () yöntemini kullanacağız -
x = mx.nd.ones((2,))
x.attach_grad()
with mx.autograd.record():
z = mx.nd.elemwise_add(mx.nd.exp(x), x)
dx_grad = mx.autograd.grad(z, [x], create_graph=True)
dx_grad
Output
Çıktı aşağıda belirtilmiştir -
[
[3.7182817 3.7182817]
<NDArray 2 @cpu(0)>]
'With' ifadesinde kullanılacak bir kapsam döndürmek için mxnet.autograd.predict_mode () yöntemini kullanabiliriz -
with mx.autograd.record():
y = model(x)
with mx.autograd.predict_mode():
y = sampling(y)
backward([y])
mxnet.intializer
Bu, tartım başlatıcı için MXNet'in API'sidir. Aşağıdaki sınıflara sahiptir -
Sınıflar ve parametreleri
Aşağıdaki yöntemler ve parametreleri mxnet.autogard.function sınıf:
Sınıflar ve Parametreleri | Tanım |
---|---|
Çift Doğrusal () | Bu sınıfın yardımıyla, yukarı örnekleme katmanları için ağırlığı başlatabiliriz. |
Sabit değer) | Bu sınıf, ağırlıkları belirli bir değerde başlatır. Değer, skaler olabileceği gibi ayarlanacak parametrenin şekline uyan NDArray olabilir. |
FusedRNN (init, num_hidden, num_layers, mod) | Adından da anlaşılacağı gibi, bu sınıf, kaynaşmış Tekrarlayan Sinir Ağı (RNN) katmanları için parametreleri başlatır. |
InitDesc | Başlatma modeli için tanımlayıcı görevi görür. |
Başlatıcı (** kwargs) | Bu, bir başlatıcının temel sınıfıdır. |
LSTMBias ([Forgot_bias]) | Bu sınıf, bir LSTMCell'in tüm önyargılarını 0.0'a başlatır, ancak önyargısı özel bir değere ayarlanan unutma kapısı hariç. |
Yükle (param [, default_init, ayrıntılı]) | Bu sınıf, dosya veya sözlükten veri yükleyerek değişkenleri başlatır. |
MSRAPrelu ([faktör_türü, eğim]) | Adından da anlaşılacağı gibi, bu sınıf ağırlığı bir MSRA belgesine göre başlatın. |
Karışık (desenler, başlatıcılar) | Birden çok başlatıcı kullanarak parametreleri başlatır. |
Normal ([sigma]) | Normal () sınıfı, ortalama sıfır ve standart sapma (SD) ile normal bir dağılımdan örneklenen rastgele değerlerle ağırlıkları başlatır. sigma. |
Bir() | Parametrenin ağırlıklarını bire ilklendirir. |
Ortogonal ([ölçek, rand_türü]) | Adından da anlaşılacağı gibi, bu sınıf ağırlığı ortogonal matris olarak başlatır. |
Üniforma ([ölçek]) | Ağırlıkları, belirli bir aralıktan tekdüze olarak örneklenen rastgele değerlerle başlatır. |
Xavier ([rnd_type, faktör_type, büyüklük]) | Aslında ağırlıklar için "Xavier" başlatmayı gerçekleştiren bir başlatıcı döndürür. |
Sıfır() | Parametrenin ağırlıklarını sıfır olarak başlatır. |
Uygulama Örneği
Aşağıdaki örnekte, mxnet.init.Normal () sınıfını kullanacağız ve bir başlatıcı oluşturup parametrelerini alacağız -
init = mx.init.Normal(0.8)
init.dumps()
Output
Çıktı aşağıda verilmiştir -
'["normal", {"sigma": 0.8}]'
Example
init = mx.init.Xavier(factor_type="in", magnitude=2.45)
init.dumps()
Output
Çıktı aşağıda gösterilmiştir -
'["xavier", {"rnd_type": "uniform", "factor_type": "in", "magnitude": 2.45}]'
Aşağıdaki örnekte, birden çok başlatıcı kullanarak parametreleri başlatmak için mxnet.initializer.Mixed () sınıfını kullanacağız -
init = mx.initializer.Mixed(['bias', '.*'], [mx.init.Zero(),
mx.init.Uniform(0.1)])
module.init_params(init)
for dictionary in module.get_params():
for key in dictionary:
print(key)
print(dictionary[key].asnumpy())
Output
Çıktı aşağıda gösterilmiştir -
fullyconnected1_weight
[[ 0.0097627 0.01856892 0.04303787]]
fullyconnected1_bias
[ 0.]