.. _sec_linear_concise: Doğrusal Regresyonunun Kısa Uygulaması ====================================== Son birkaç yıldır derin öğrenmeye olan geniş ve yoğun ilgi, gradyan tabanlı öğrenme algoritmalarını uygulamanın tekrarlayan iş yükünü otomatikleştirmek için şirketler, akademisyenler ve amatör geliştiricilere çeşitli olgun açık kaynak çerçeveleri geliştirmeleri için ilham verdi. :numref:`sec_linear_scratch` içinde, biz sadece (i) veri depolama ve doğrusal cebir için tensörlere; ve (ii) gradyanları hesaplamak için otomatik türev almaya güvendik. Pratikte, veri yineleyiciler, kayıp işlevleri, optimize ediciler ve sinir ağı katmanları çok yaygın olduğu için, modern kütüphaneler bu bileşenleri bizim için de uygular. Bu bölümde, derin öğrenme çerçevelerinin üst düzey API'lerini kullanarak :numref:`sec_linear_scratch` içindeki doğrusal regresyon modelini kısaca nasıl uygulayacağınızı göstereceğiz. Veri Kümesini Oluşturma ----------------------- Başlamak için, şuradaki aynı veri kümesini oluşturacağız: :numref:`sec_linear_scratch`. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python from d2l import mxnet as d2l from mxnet import autograd, gluon, np, npx npx.set_np() true_w = np.array([2, -3.4]) true_b = 4.2 features, labels = d2l.synthetic_data(true_w, true_b, 1000) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python import numpy as np import torch from torch.utils import data from d2l import torch as d2l true_w = torch.tensor([2, -3.4]) true_b = 4.2 features, labels = d2l.synthetic_data(true_w, true_b, 1000) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python import numpy as np import tensorflow as tf from d2l import tensorflow as d2l true_w = tf.constant([2, -3.4]) true_b = 4.2 features, labels = d2l.synthetic_data(true_w, true_b, 1000) .. raw:: html
.. raw:: html
Veri Kümesini Okuma ------------------- Kendi yineleyicimizi döndürmek yerine, verileri okumak için bir çerçevedeki mevcut API'yi çağırabiliriz. ``features`` (öznitelikleri tutan değişken) ve ``labels``'i (etiketleri tutan değişken) bağımsız değişken olarak iletiriz ve bir veri yineleyici nesnesi başlatırken ``batch_size`` (grup boyutu) belirtiriz. Ayrıca, mantıksal veri tipi (boolean) değeri ``is_train``, veri yineleyici nesnesinin her bir dönemdeki (epoch) verileri karıştırmasını isteyip istemediğimizi gösterir (veri kümesinden geçer). .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def load_array(data_arrays, batch_size, is_train=True): #@save """Bir Gluon veri yineleyici oluşturun.""" dataset = gluon.data.ArrayDataset(*data_arrays) return gluon.data.DataLoader(dataset, batch_size, shuffle=is_train) batch_size = 10 data_iter = load_array((features, labels), batch_size) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def load_array(data_arrays, batch_size, is_train=True): #@save """Bir PyTorch veri yineleyici oluşturun.""" dataset = data.TensorDataset(*data_arrays) return data.DataLoader(dataset, batch_size, shuffle=is_train) batch_size = 10 data_iter = load_array((features, labels), batch_size) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def load_array(data_arrays, batch_size, is_train=True): #@save """Bir TensorFlow veri yineleyici oluşturun.""" dataset = tf.data.Dataset.from_tensor_slices(data_arrays) if is_train: dataset = dataset.shuffle(buffer_size=1000) dataset = dataset.batch(batch_size) return dataset batch_size = 10 data_iter = load_array((features, labels), batch_size) .. raw:: html
.. raw:: html
Şimdi, ``data_iter``\ i, ``data_iter`` işlevini :numref:`sec_linear_scratch` içinde çağırdığımız şekilde kullanabiliriz. Çalıştığını doğrulamak için, örneklerin ilk minigrubunu okuyabilir ve yazdırabiliriz. :numref:`sec_linear_scratch` içindeki ile karşılaştırıldığında, burada bir Python yineleyici oluşturmak için ``iter`` kullanıyoruz ve yineleyiciden ilk öğeyi elde etmek için ``next``'i kullanıyoruz. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python next(iter(data_iter)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output [array([[ 0.62162733, 0.3694969 ], [-1.4381213 , -0.98106235], [-0.21166277, -0.224368 ], [-0.5176199 , 0.07872018], [-0.6308071 , 0.53733146], [-2.1471155 , -0.6573725 ], [-1.4797637 , -2.1362736 ], [-0.43897745, 1.0051775 ], [ 0.8858836 , 0.20588513], [ 0.4123393 , -0.2761083 ]]), array([[ 4.1955047 ], [ 4.6493993 ], [ 4.5605335 ], [ 2.8932831 ], [ 1.0948168 ], [ 2.157684 ], [ 8.517494 ], [-0.08255066], [ 5.2522955 ], [ 5.971049 ]])] .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python next(iter(data_iter)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output [tensor([[-0.7894, -0.4236], [-0.1704, -1.6098], [-1.3614, 1.1222], [-0.3556, 0.7254], [-1.0136, -0.1632], [ 1.0528, 1.5194], [ 2.1396, -2.2619], [-0.2321, -0.7793], [ 1.4198, -1.2292], [ 1.3337, -1.1340]]), tensor([[ 4.0635], [ 9.3159], [-2.3210], [ 1.0009], [ 2.7228], [ 1.1503], [16.1817], [ 6.3618], [11.2123], [10.7317]])] .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python next(iter(data_iter)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output (, ) .. raw:: html
.. raw:: html
Modeli Tanımlama ---------------- Doğrusal regresyonu :numref:`sec_linear_scratch` içinde sıfırdan uyguladığımızda, model parametrelerimizi açık bir şekilde tanımladık ve temel doğrusal cebir işlemlerini kullanarak çıktı üretmek için hesaplamalarımızı kodladık. Bunu nasıl yapacağınızı *bilmelisiniz*. Ancak modelleriniz daha karmaşık hale geldiğinde ve bunu neredeyse her gün yapmanız gerektiğinde, bu yardım için memnun olacaksınız. Durum, kendi blogunuzu sıfırdan kodlamaya benzer. Bunu bir veya iki kez yapmak ödüllendirici ve öğreticidir, ancak bir bloga her ihtiyaç duyduğunuzda tekerleği yeniden icat etmek için bir ay harcarsanız kötü bir web geliştiricisi olursunuz. Standart işlemler için, uygulamaya (kodlamaya) odaklanmak yerine özellikle modeli oluşturmak için kullanılan katmanlara odaklanmamızı sağlayan bir çerçevenin önceden tanımlanmış katmanlarını kullanabiliriz. Önce, ``Sequential`` (ardışık, sıralı) sınıfının bir örneğini ifade edecek ``net`` (ağ) model değişkenini tanımlayacağız. ``Sequential`` sınıfı, birbirine zincirlenecek birkaç katman için bir kapsayıcı (container) tanımlar. Girdi verileri verildiğinde, ``Sequential`` bir örnek, bunu birinci katmandan geçirir, ardından onun çıktısını ikinci katmanın girdisi olarak geçirir ve böyle devam eder. Aşağıdaki örnekte, modelimiz yalnızca bir katmandan oluşuyor, bu nedenle gerçekten ``Sequential`` örneğe ihtiyacımız yok. Ancak, gelecekteki modellerimizin neredeyse tamamı birden fazla katman içereceği için, sizi en standart iş akışına alıştırmak için yine de kullanacağız. Tek katmanlı bir ağın mimarisini şurada gösterildiği gibi hatırlayın: :numref:`fig_single_neuron`. Katmanın *tamamen bağlı* olduğu söylenir, çünkü girdilerinin her biri, bir matris-vektör çarpımı yoluyla çıktılarının her birine bağlanır. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
Gluon'da tamamen bağlı katman ``Dense`` (Yoğun) sınıfında tanımlanır. Sadece tek bir skaler çıktı üretmek istediğimiz için, bu sayıyı 1 olarak ayarladık. Kolaylık sağlamak için Gluon'un her katman için girdi şeklini belirlememizi gerektirmediğini belirtmek gerekir. Yani burada, Gluon'a bu doğrusal katmana kaç girdi girdiğini söylememize gerek yok. Modelimizden ilk veri geçirmeye çalıştığımızda, örneğin, daha sonra ``net(X)``'i çalıştırdığımızda, Gluon otomatik olarak her katmana girdi sayısını çıkaracaktır. Bunun nasıl çalıştığını daha sonra daha ayrıntılı olarak anlatacağız. .. raw:: latex \diilbookstyleinputcell .. code:: python # `nn` sinir ağları için kısaltmadır from mxnet.gluon import nn net = nn.Sequential() net.add(nn.Dense(1)) .. raw:: html
.. raw:: html
PyTorch'ta, tam bağlantılı katman ``Linear`` sınıfında tanımlanır. ``nn.Linear``'e iki bağımsız değişken aktardığımıza dikkat edin. Birincisi, 2 olan girdi öznitelik boyutunu belirtir ve ikincisi, tek bir skaler olan ve dolayısıyla 1 olan çıktı öznitelik boyutudur. .. raw:: latex \diilbookstyleinputcell .. code:: python # `nn` sinir ağları için kısaltmadır from torch import nn net = nn.Sequential(nn.Linear(2, 1)) .. raw:: html
.. raw:: html
Keras'ta tamamen bağlı katman ``Dense`` (Yoğun) sınıfında tanımlanır. Sadece tek bir skaler çıktı üretmek istediğimiz için, bu sayıyı 1 olarak ayarladık. Kolaylık sağlamak için Gluon'un her katman için girdi şeklini belirlememizi gerektirmediğini belirtmek gerekir. Yani burada, Keras'a bu doğrusal katmana kaç girdi girdiğini söylememize gerek yok. Modelimizden ilk veri geçirmeye çalıştığımızda, örneğin, daha sonra ``net(X)``'i çalıştırdığımızda, Keras otomatik olarak her katmana girdi sayısını çıkaracaktır. Bunun nasıl çalıştığını daha sonra daha ayrıntılı olarak anlatacağız. .. raw:: latex \diilbookstyleinputcell .. code:: python # `keras` TensorFlow'un üst-seviye API'sidir net = tf.keras.Sequential() net.add(tf.keras.layers.Dense(1)) .. raw:: html
.. raw:: html
Model Parametrelerini İlkleme ----------------------------- ``net``'i kullanmadan önce, doğrusal regresyon modelindeki ağırlıklar ve ek girdi gibi model parametrelerini ilkletmemiz gerekir. Derin öğrenme çerçeveleri genellikle parametreleri ilklemek için önceden tanımlanmış bir yola sahiptir. Burada, her ağırlık parametresinin, ortalama 0 ve standart sapma 0.01 ile normal bir dağılımdan rastgele örneklenmesi gerektiğini belirtiyoruz. Ek girdi parametresi sıfır olarak ilklenecektir. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
MXNet'ten ``initializer`` modülünü içe aktaracağız. Bu modül, model parametresi ilkletme için çeşitli yöntemler sağlar. Gluon, ``init``'i ``initializer`` paketine erişmek için bir kısayol (kısaltma) olarak kullanılabilir hale getirir. Ağırlığın nasıl ilkleneceğini sadece ``init.Normal(sigma=0.01)``'i çağırarak belirtiyoruz. Ek girdi parametreleri sıfır olarak ilklenecektir. .. raw:: latex \diilbookstyleinputcell .. code:: python from mxnet import init net.initialize(init.Normal(sigma=0.01)) Yukarıdaki kod basit görünebilir, ancak burada tuhaf bir şeylerin olduğunu fark etmelisiniz. Gluon, girdinin kaç boyuta sahip olacağını henüz bilmese de, bir ağ için parametreleri ilkletebiliyoruz! Örneğimizdeki gibi 2 de olabilir veya 2000 de olabilir. Gluon bunun yanına kalmamıza izin veriyor çünkü sahnenin arkasında, ilk değerleri atama aslında *ertelendi*. Gerçek ilkleme, yalnızca verileri ağ üzerinden ilk kez geçirmeye çalıştığımızda gerçekleşecektir. Unutmayın ki, parametreler henüz ilkletilmediği için bunlara erişemeyiz veya onları değiştiremeyiz. .. raw:: html
.. raw:: html
``nn.Linear`` oluştururken girdi ve çıktı boyutlarını belirttik, şimdi, onların ilk değerlerini belirtmek için parametrelere doğrudan erişebiliriz. İlk olarak ağdaki ilk katmanı ``net[0]`` ile buluruz ve ardından parametrelere erişmek için ``weight.data`` ve ``bias.data`` yöntemlerini kullanırız. Daha sonra, parametre değerlerinin üzerine yazmak için ``normal_`` ve ``fill_`` değiştirme yöntemlerini kullanırız. .. raw:: latex \diilbookstyleinputcell .. code:: python net[0].weight.data.normal_(0, 0.01) net[0].bias.data.fill_(0) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([0.]) .. raw:: html
.. raw:: html
TensorFlow'daki ``initializers`` modülü, model parametresi ilkletme için çeşitli yöntemler sağlar. Keras'ta ilkletme yöntemini belirlemenin en kolay yolu, katmanı ``kernel_initializer`` belirterek oluşturmaktır. Burada ``net``'i yeniden oluşturuyoruz. .. raw:: latex \diilbookstyleinputcell .. code:: python initializer = tf.initializers.RandomNormal(stddev=0.01) net = tf.keras.Sequential() net.add(tf.keras.layers.Dense(1, kernel_initializer=initializer)) Yukarıdaki kod basit görünebilir, ancak burada tuhaf bir şeylerin olduğunu fark etmelisiniz. Keras, girdinin kaç boyuta sahip olacağını henüz bilmese de, bir ağ için parametreleri ilkletebiliyoruz! Örneğimizdeki gibi 2 de olabilir veya 2000 de olabilir. Keras bunun yanına kalmamıza izin veriyor çünkü sahnenin arkasında, ilk değerleri atama aslında *ertelendi*. Gerçek ilkleme, yalnızca verileri ağ üzerinden ilk kez geçirmeye çalıştığımızda gerçekleşecektir. Unutmayın ki, parametreler henüz ilkletilmediği için bunlara erişemeyiz veya onları değiştiremeyiz. .. raw:: html
.. raw:: html
Kayıp Fonksiyonunu Tanımlama ---------------------------- .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
Gluon'da ``loss`` modülü çeşitli kayıp fonksiyonlarını tanımlar. Bu örnekte, Gluon uygulamasının kare kaybını (``L2Loss``) kullanacağız. .. raw:: latex \diilbookstyleinputcell .. code:: python loss = gluon.loss.L2Loss() .. raw:: html
.. raw:: html
``MSELoss`` sınıfı, ortalama hata karesini hesaplar (:eq:`eq_mse` içindeki :math:`1/2` çarpanı olmadan). Varsayılan olarak, örneklerdeki ortalama kaybı döndürür. .. raw:: latex \diilbookstyleinputcell .. code:: python loss = nn.MSELoss() .. raw:: html
.. raw:: html
``MeanSquaredError`` sınıfı, ortalama hata karesini hesaplar (:eq:`eq_mse` içindeki :math:`1/2` çarpanı olmadan). Varsayılan olarak, örneklerdeki ortalama kaybı döndürür. .. raw:: latex \diilbookstyleinputcell .. code:: python loss = tf.keras.losses.MeanSquaredError() .. raw:: html
.. raw:: html
Optimizasyon Algoritmasını Tanımlama ------------------------------------ .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
Minigrup rasgele gradyan inişi, sinir ağlarını optimize etmek için standart bir araçtır ve bu nedenle Gluon, bunu ``Trainer`` sınıfı aracılığıyla bu algoritmadaki bir dizi varyasyonla birlikte destekler. ``Trainer``'den örnek yarattığımızda, optimize edilecek parametreleri (``net.collect_params()`` aracılığıyla ``net`` modelimizden elde edilebilir), kullanmak istediğimiz optimizasyon algoritması (``sgd``) ve optimizasyon algoritmamızın gerektirdiği hiper parametreleri bir sözlük ile (dictionary veri yapısı) belirleyeceğiz. Minigrup rasgele gradyan inişi, burada 0.03 olarak ayarlanan ``learning_rate`` (öğrenme oranı) değerini ayarlamamızı gerektirir. .. raw:: latex \diilbookstyleinputcell .. code:: python from mxnet import gluon trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03}) .. raw:: html
.. raw:: html
Minigrup rasgele gradyan inişi, sinir ağlarını optimize etmek için standart bir araçtır ve bu nedenle PyTorch, bunu ``Trainer`` sınıfı aracılığıyla bu algoritmadaki bir dizi varyasyonla birlikte destekler. ``SGD``'den örnek yarattığımızda, optimize edilecek parametreleri (``net.collect_params()`` aracılığıyla ``net`` modelimizden elde edilebilir) ve optimizasyon algoritmamızın gerektirdiği hiper parametreleri bir sözlük ile (dictionary veri yapısı) belirteceğiz. Minigrup rasgele gradyan inişi, burada 0.03 olarak ayarlanan ``lr`` (öğrenme oranı) değerini ayarlamamızı gerektirir. .. raw:: latex \diilbookstyleinputcell .. code:: python trainer = torch.optim.SGD(net.parameters(), lr=0.03) .. raw:: html
.. raw:: html
Minigrup rasgele gradyan inişi, sinir ağlarını optimize etmek için standart bir araçtır ve bu nedenle Keras, bunu, ``optimizers`` modülündeki bu algoritmanın bir dizi varyasyonunun yanında destekler. Minigrup rasgele gradyan inişi, burada 0.03 olarak ayarlanan ``learning_rate`` (öğrenme oranı) değerini ayarlamamızı gerektirir. .. raw:: latex \diilbookstyleinputcell .. code:: python trainer = tf.keras.optimizers.SGD(learning_rate=0.03) .. raw:: html
.. raw:: html
Eğitim ------ Modelimizi derin öğrenme çerçevesinin yüksek seviyeli API'leri aracılığıyla ifade etmenin nispeten birkaç satır kod gerektirdiğini fark etmiş olabilirsiniz. Parametreleri ayrı ayrı tahsis etmemiz, kayıp fonksiyonumuzu tanımlamamız veya minigrup rasgele gradyan inişini uygulamamız gerekmedi. Çok daha karmaşık modellerle çalışmaya başladığımızda, üst düzey API'lerin avantajları önemli ölçüde artacaktır. Bununla birlikte, tüm temel parçaları bir kez yerine getirdiğimizde, eğitim döngüsünün kendisi, her şeyi sıfırdan uygularken yaptığımıza çarpıcı bir şekilde benzer. Hafızanızı yenilemek için: Bazı dönemler (epoch) için, veri kümesinin (``train_data``) üzerinden eksiksiz bir geçiş yapacağız ve yinelemeli olarak bir minigrup girdiyi ve ilgili referans gerçek değer etiketleri alacağız. Her minigrup için aşağıdaki ritüeli uyguluyoruz: - ``net(X)``'i çağırarak tahminler oluşturun ve ``l`` kaybını (ileriye doğru yayma) hesaplayın. - Geri yaymayı çalıştırarak gradyanları hesaplayın. - Optimize edicimizi çağırarak model parametrelerini güncelleyin. İyi bir önlem olarak, her dönemden sonra kaybı hesaplıyor ve ilerlemeyi izlemek için yazdırıyoruz. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python num_epochs = 3 for epoch in range(num_epochs): for X, y in data_iter: with autograd.record(): l = loss(net(X), y) l.backward() trainer.step(batch_size) l = loss(net(features), labels) print(f'donem {epoch + 1}, kayip {l.mean().asnumpy():f}') .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output [21:43:34] src/base.cc:49: GPU context requested, but no GPUs found. donem 1, kayip 0.024914 donem 2, kayip 0.000088 donem 3, kayip 0.000051 .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python num_epochs = 3 for epoch in range(num_epochs): for X, y in data_iter: l = loss(net(X) ,y) trainer.zero_grad() l.backward() trainer.step() l = loss(net(features), labels) print(f'donem {epoch + 1}, kayip {l:f}') .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output donem 1, kayip 0.000174 donem 2, kayip 0.000093 donem 3, kayip 0.000093 .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python num_epochs = 3 for epoch in range(num_epochs): for X, y in data_iter: with tf.GradientTape() as tape: l = loss(net(X, training=True), y) grads = tape.gradient(l, net.trainable_variables) trainer.apply_gradients(zip(grads, net.trainable_variables)) l = loss(net(features), labels) print(f'donem {epoch + 1}, kayip {l:f}') .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output donem 1, kayip 0.000525 donem 2, kayip 0.000113 donem 3, kayip 0.000112 .. raw:: html
.. raw:: html
Aşağıda, sonlu veri üzerinde eğitimle öğrenilen model parametrelerini ve veri kümemizi oluşturan gerçek parametreleri karşılaştırıyoruz. Parametrelere erişmek için önce ihtiyacımız olan katmana ``net``'ten erişiyoruz ve sonra bu katmanın ağırlıklarına ve ek girdilerine erişiyoruz. Sıfırdan uygulamamızda olduğu gibi, tahmin edilen parametrelerimizin gerçek referans değerlere yakın olduğuna dikkat edin. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python w = net[0].weight.data() print(f'w tahmin hatasi: {true_w - w.reshape(true_w.shape)}') b = net[0].bias.data() print(f'b tahmin hatasi: {true_b - b}') .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output w tahmin hatasi: [0.00022209 0.00029874] b tahmin hatasi: [0.00032616] .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python w = net[0].weight.data print('w tahmin hatasi:', true_w - w.reshape(true_w.shape)) b = net[0].bias.data print('b tahmin hatasi:', true_b - b) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output w tahmin hatasi: tensor([ 2.4557e-05, -2.3890e-04]) b tahmin hatasi: tensor([2.3842e-06]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python w = net.get_weights()[0] print('w tahmin hatasi', true_w - tf.reshape(w, true_w.shape)) b = net.get_weights()[1] print('b tahmin hatasi', true_b - b) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output w tahmin hatasi tf.Tensor([ 0.00071025 -0.00022793], shape=(2,), dtype=float32) b tahmin hatasi [-0.00070047] .. raw:: html
.. raw:: html
Özet ---- .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
- Gluon kullanarak modelleri çok daha kısaca uygulayabiliyoruz. - Gluon'da, ``data`` modülü veri işleme için araçlar sağlar, ``nn`` modülü çok sayıda sinir ağı katmanını tanımlar ve ``loss`` modülü birçok yaygın kayıp işlevini tanımlar. - MXNet'in ``initializer`` modülü, model parametresi ilkleme için çeşitli yöntemler sağlar. - Boyutluluk ve depolama otomatik olarak çıkarılır, ancak parametrelere ilklemeden önce erişmeye çalışmamaya dikkat edin. .. raw:: html
.. raw:: html
- PyTorch'un üst düzey API'lerini kullanarak modelleri çok daha kısa bir şekilde uygulayabiliriz. - PyTorch'ta, ``data`` modülü veri işleme için araçlar sağlar, ``nn`` modülü çok sayıda sinir ağı katmanını ve genel kayıp işlevlerini tanımlar. - Değerlerini ``_`` ile biten yöntemlerle değiştirerek parametreleri ilkleyebiliriz. .. raw:: html
.. raw:: html
- TensorFlow'un üst düzey API'lerini kullanarak modelleri çok daha kısa bir şekilde uygulayabiliriz. - TensorFlow'da, ``data`` modülü veri işleme için araçlar sağlar, ``keras`` modülü çok sayıda sinir ağı katmanını ve genel kayıp işlevlerini tanımlar. - TensorFlow'un ``initializers`` modülü, model parametresi ilkleme için çeşitli yöntemler sağlar. - Boyut ve depolama otomatik olarak çıkarılır (ancak parametrelere ilklemeden önce erişmeye çalışmamaya dikkat edin). .. raw:: html
.. raw:: html
Alıştırmalar ------------ .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
1. ``l = loss(output, y)`` yerine ``l = loss(output, y).mean()`` koyarsak, kodun aynı şekilde davranması için ``trainer.step(batch_size)``'i ``trainer.step(1)`` olarak değiştirmemiz gerekir. Neden? 2. ``gluon.loss`` ve ``init`` modüllerinde hangi kayıp işlevlerinin ve ilkleme yöntemlerinin sağlandığını görmek için MXNet belgelerini inceleyin. Kaybı Huber kaybıyla yer değiştirin. 3. ``dense.weight``'in gradyanına nasıl erişirsiniz? `Tartışmalar `__ .. raw:: html
.. raw:: html
1. Eğer ``nn.MSELoss()``\ ı ``nn.MSELoss(reduction='sum')`` ile değiştirirsek, kodun aynı şekilde davranması için öğrenme oranını nasıl değiştirebiliriz? Neden? 2. Hangi kayıp işlevlerinin ve ilkleme yöntemlerinin sağlandığını görmek için PyTorch belgelerini inceleyin. Kaybı Huber kaybıyla yer değiştirin. 3. ``net[0].weight``'in gradyanına nasıl erişirsiniz? `Tartışmalar `__ .. raw:: html
.. raw:: html
1. Hangi kayıp işlevlerinin ve ilkleme yöntemlerinin sağlandığını görmek için TensorFlow belgelerini inceleyin. Kaybı Huber kaybıyla yer değiştirin. `Tartışmalar `__ .. raw:: html
.. raw:: html