[Kuru ürünler] PyTorch tarafından sağlanan derin öğrenme deney süreci ve çözümleri

Xinzhiyuan önerilir

Kaynak: Uzmanlık

Xin Zhiyuan Rehberi Derin öğrenmeyi araştırma sürecinde, zihninize aniden bir ilham geldiği zaman, fikrinizi hızlı bir şekilde gerçekleştirmek için kullanışlı bir araç olmadığını görüyor musunuz? Bu makaleyi okuduktan sonra bir seçeneğiniz daha olabilir. Bu makale, derin öğrenme problemlerini incelerken ortak iş akışını kısaca analiz eder ve deneylerinizi hızla oluşturmak için PyTorch'u nasıl kullanacağınızı açıklar.

Ortak araştırma iş akışı

Bir gün laboratuvarda bir sandalyede oturuyordunuz ve aniden:

  • Zihninde bir patlama var fikir

  • Bir şey okudun teori Bir makale, denemek istiyorum: Ya xx de eklenirse

  • Patronunuz aniden size bir kağıt verdi ve sonra dedi ki: Kim, gel de bu şeyi fark et

Yani sen tasarım Gmp Deney Süreç ve bu fikir için Toplamak Uygun Veri seti ve çalışma ortamı Ve sonra uykusuzca başarmak Gmp model , Uzun bir süre sonra Eğitim ve test , Bulursun:

  • Bu fikir işe yaramıyor - > Unut ya da ayarla

  • Bu fikir çok iş - > Yapabilmek yazmak kağıt yukarı

Yukarıdaki süreci aşağıdaki diyagramla temsil edebiliriz:

Aslında, ortak süreç aşağıdaki öğelerden oluşur:

  • Veri seti seçildikten sonra, veri setini yüklemek için bazı fonksiyonlar yazmanız, ardından veri setini önceden işlemeniz, veri setini normalleştirmeniz gerekir, bunun bir deneyin en önemli kısmı olduğu söylenebilir, çünkü:

  • Her veri kümesinin biçimi farklıdır

  • Ön işleme ve düzenleme yöntemleri farklıdır

  • Verileri beslemek için hızlı bir veri yükleyiciye ihtiyacınız varsa, ne kadar hızlı olursa o kadar iyidir

  • Daha sonra kendi modelinizi uygulamak zorundasınız CV yönündeyseniz ResNet uygulamak isteyebilirsiniz, NLP ile ilgiliyseniz Seq2Seq uygulamak isteyebilirsiniz.

  • Daha sonra, eğitim adımlarını uygulamanız, grupları bölmeniz ve dönemleri döngüye almanız gerekir

  • Birkaç tur eğitimden sonra, her zaman kontrol noktası en güvenli olanıdır

  • Fikirlerinizin geçerliliğini doğrulamak için bazı temeller de oluşturmanız gerekir.

  • Bir sinir ağı modeli uyguluyorsanız, elbette GPU desteği olmadan yapamazsınız

  • Birçok derin öğrenme çerçevesi ortak kayıp işlevleri sağlar, ancak çoğu zaman kayıp işlevlerinin belirli görevlerle birleştirilmesi ve ardından yeniden uygulanması gerekir.

  • Yerleşik modeli optimize etmek ve öğrenme oranını dinamik olarak ayarlamak için optimizasyon yöntemlerini kullanın

  • Pytorch'un çözümü

    Veri yüklemek için Pytorch çeşitli çözümler önerdi

    • Pytorch, bazı büyük C ++ kitaplıklarının Python arayüzü değil, bir Python paketidir.Bu nedenle, Python API sağlayan veri kümesinin kendisi için Pytorch, özel işlem yapılmadan doğrudan çağrılabilir.

    • Pytorch, yaygın olarak kullanılan veri kümelerinin veri yükleyicisini entegre eder

    • Yukarıdaki önlemler veri setlerinin çoğunu kapsayabilse de, Pytorch ayrıca iki proje gerçekleştirmiştir: vizyon ve metin, aşağıdaki şekilde gri arka plana bakın. Kitle kaynak mekanizmalarını kullanan bu iki proje, çok sayıda veri yükleyicisi toplar. - sırasıyla görüntü ve metin bilgilerine karşılık gelen işlem ve normalleştirme.

    • Veri kümesini özelleştirmek istiyorsanız, yalnızca torch.utils.data.dataset'i devralmanız gerekir

    Yapı modelleri için Pytorch ayrıca üç çözüm sunar

    • Kitle kaynaklı model: torch.utils.model_zoo , Herkes tarafından paylaşılan modeli yüklemek için bu aracı kullanabilirsiniz

    • Hızlı bir şekilde oluşturmak için torch.nn.Sequential modülünü kullanın

    net = torch.nn.Sequential ( torch.nn.Linear (1, 10), torch.nn.ReLU (), torch.nn.Linear (10; 1) ) baskı (net) '' ' Ardışık ( (0): Doğrusal (1- > 10) (1): ReLU () (2): Doğrusal (10- > 1) ) '' '
    • Torch.nn.Modülü derinlemesine özelleştirme entegre edin

    sınıf Net (torch.nn.Module): def __init __ (self, n_feature, n_hidden, n_output): super (Net, self) .__ init __ () self.hidden = torch.nn.Linear (n_feature, n_hidden) self.predict = torch.nn.Linear (n_hidden, n_output) def ileri (öz, x): x = F.relu (self.hidden (x)) x = self.predict (x) dönüş x net = Net (1, 10, 1) baskı (net) '' ' Ağ ( (gizli): Doğrusal (1- > 10) (tahmin): Doğrusal (10- > 1) ) '' '

    Eğitim sürecinin Pytorch uygulaması

    Elbette veri toplu iş, shuffer vb. Uygulayabilirsiniz, ancak Pytorch verileri yüklemek, verileri örneklemek ve toplu yineleyiciler oluşturmak için torch.utils.data.DataLoader sınıfını kullanmanızı önerir.

    # Veri yükleyici oluştur loader = Data.DataLoader ( veri kümesi = torch_dataset, # TensorDataset türü veri kümesi batch_size = BATCH_SIZE, # mini grup boyutu shuffle = True, # Rastgele karıştırmayı ayarla num_workers = 2, # Veri yükleyen işlemlerin sayısı ) (3) aralığındaki dönem için: # 3 tur için tren adım için, numaralandırmada (batch_x, batch_y): # her adım # Eğitim kodunu buraya yazın ... print ('Epoch:', epoch)

    Pytorch, modelleri kaydetmek ve yüklemek için iki seçenek sunar

    • Tüm ağı kaydedin ve yükleyin

    # Ağ yapısı, model parametreleri vb. Dahil tüm modeli kaydedin ve yükleyin. torch.save (resnet, 'model.pkl') model = torch.load ('model.pkl')
    • Ağdaki parametreleri kaydedin ve yükleyin

    torch.save (resnet.state_dict (), 'params.pkl') resnet.load_state_dict (torch.load ('params.pkl'))

    GPU desteği için

    Tensor'u doğrudan çağırabilirsiniz. Cuda (), Tensor verilerini doğrudan GPU belleğine taşır, tabii ki, verileri istediğiniz zaman belleğe geri taşımak için .cpu () da kullanabilirsiniz.

    torch.cuda.is_available () ise: linear = linear.cuda () # Ağdaki parametreleri ve önbelleği GPU belleğine taşı

    Kayıp işlevi ve özel Kayıp için

    Pytorch paket torch.nn'de, yalnızca yaygın olarak kullanılan ve klasik Loss işlevlerini değil, aynı zamanda aşağıdakileri içeren yeni Loss'un gerçek zamanlı takibini de içerir: CosineEmbeddingLoss, TripletMarginLoss, vb.

    Fikriniz çok yeniyse, Pytorch, Kaybı özelleştirmek için üç yol sunar

    • Torch.nn.module'ı devral

    meşale ithal torch.nn'yi nn olarak içe aktar meşale.nn. işlevsel olarak işlev olarak içe aktar sınıf MyLoss (nn.Module): # Hiperparametre ayarla def __init __ (öz, a, b, c): super (TripletLossFunc, self) .__ init __ () self.a = a self.b = b self.c = c dönüş def ileri (öz, a, b, c): # Uygulama kayıp = a + b + c geri dönüş kaybı

    sonra

    loss_instance = Kaybım (...) kayıp = kayıp_örnek (a, b, c)

    Bunu yaparken, Kaybınızı oluşturmak için torch.nn.fonksiyonel'de optimize edilmiş çeşitli işlevleri kullanabilirsiniz.

    • Torch.autograd.Function'ı devral

    meşale ithal Torch.autograd import Fonksiyonundan torch.autograd import Değişkeninden sınıf MyLoss (Fonksiyon): def ileri (input_tensor): # Uygulama sonuç = ...... dönüş meşale. sensör (sonuç) geriye doğru def (grad_output): # Bu işlemi sadece kayıp olarak uygulamanız gerekiyorsa, girişi doğrudan buraya döndürün # Bunu nn'de kullanmanız gerekiyorsa, belirli geri yayınlama işlemini belirtmeniz gerekir. grad_output döndür

    Bunu yaparken, Loss'unuzu oluşturmak için yaygın olarak kullanılan numpy ve scipy işlevlerini kullanabilirsiniz.

    • Pytorch'un bir C uzantısı yazın

    Burada ayrıntılara girmeyeceğim, gelecekte bu bölüme adanmış içerikler olacak.

    Algoritmaları optimize etmek ve öğrenme oranını ayarlamak için

    Pytorch, SGD, Adam, SparseAdam, AdagradRMSprop, Rprop vb. Dahil olmak üzere yaygın optimizasyon algoritmalarını entegre eder.

    torch.optim.lr_scheduler, çağ yinelemelerinin sayısına bağlı olarak öğrenme oranını ayarlamak için birden fazla yol sağlar torch.optim.lr_scheduler.ReduceLROnPlateau, gerçek zamanlı öğrenme sonuçlarına göre öğrenme oranını dinamik olarak da ayarlayabilir.

    Herkesin ilk "PyTorch Tarafından Sağlanan Derin Öğrenme Deney Süreci ve Çözümleri" nden hoşlanacağını umuyorum ve daha sonra bir dizi pratik öğretici başlayacak, bu yüzden bizi izlemeye devam edin.

    Lüks bir yolculukta seyahat etmek ne tür bir deneyimdir?
    önceki
    Sermaye ve devler tarafından speküle edilen insansız market, tavada bir parıltı olacak mı?
    Sonraki
    İyi lyche'lerin iyi bir pazarı vardır - lychee'nin çiçekleri ve meyveleri güçlendiren ve çatlamayı önleyen en son teknolojisi
    Kadınların treni, Budist kutsal yazılarını yüksek sesle dışarıya koyuyor, ancak tren kondüktörünü 3 fit tekmelemekten vazgeçti
    "Mengli Şeftali Bahçesi, Resimdeki Xingou Kasabası" Xingou Kasabası Sokağındaki Beşinci Şeftali Çiçeği Festivali Büyük Açılışı
    Sevgililer Günü senin, yok et acele et
    "Jiyibi" yazarı Hou Shida, Google çevirisinden çılgınca şikayet ediyor: Yapay zekanın insan çevirmenlerin yerini alması için henüz çok erken
    Alibaba ve Tencent'in iki devi, altı ay sonra perakende şirketlerini entegre etti, bunun etkisi nedir?
    Üç aşk hali vardır, bugün bütün dünya "Seni seviyorum" u bilir!
    Givenchy ve Hepburn, evlilikten daha uzun süren aşk!
    34 yaşındaki Du Zhenyu yaşlanıyor ve Zheng Zhi'ye bakmak için daha fazla şeytan! Yatai'nin yedek kulübesinden bir pas ve şut geri gitmesine yardımcı oluyor
    Hanchuan Gönüllü Federasyonu: Merhaba öğretmen Wang! | One Paradise'taki keskin gözler!
    Mağaza açmak ve lokasyon seçmek için bu on altın kuralı bilmeniz gerekiyor!
    Ispanak Yıldönümü Yetiştirme Teknikleri Tam Sürüm (önerilen koleksiyon)
    To Top