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.]