Garfield
YZF Admin
GRU katmanında sıralı veri, zaman adımı boyunca işlenecek değerlerin aynı örneğe ait olacak şekilde düzenlenmesiyle kullanılır. Mini gruplu PyTorch kullanımında en kritik ayrım,
Bir sıralı veri kümesinde üç boyut bulunur:
Aşağıdaki örnek, her zaman adımı için bir çıktı üretir. Varsayımsal girdide 4 örnek, 6 zaman adımı ve 3 özellik vardır; hedef, her örnek için 2 sınıftan birini tahmin etmektir.
Bu dolgusuz, sabit uzunluklu ve tek yönlü örnekte
Mini gruplu, tek katmanlı ve tek yönlü GRU’da
Aynı batch içindeki dizilerin uzunlukları farklıysa kısa diziler genellikle dolgu değerleriyle eşitlenir. Dolgu zaman adımlarının gerçek veri gibi işlenmesini önlemek için dolgulu girdiyi gerçek uzunluklarla
batch_first seçimine göre giriş tensörünün şeklidir: batch_first=True kullanırsanız giriş [batch, sequence, feature], varsayılan değeri kullanırsanız [sequence, batch, feature] olmalıdır. Doğru şekli kurup GRU çıktısını ve son gizli durumu ayırdığınızda, her zaman adımı için tahmin veya yalnızca dizinin son durumunu kullanabilirsiniz.GRU girişinin şekli nasıl olmalı?
Bir sıralı veri kümesinde üç boyut bulunur:
- Batch: Aynı anda işlenen örnek sayısıdır.
- Sequence: Her örnekteki zaman adımı veya sıralı öğe sayısıdır.
- Feature: Her zaman adımındaki özellik sayısıdır.
batch_first=True ile giriş şekli [32, 10, 8] olur. GRU tanımlanırken input_size=8 verilmelidir; input_size, toplam zaman adımı sayısını değil, tek bir zaman adımındaki özellik sayısını ifade eder.Sıralı veriyi GRU ile işleme
Aşağıdaki örnek, her zaman adımı için bir çıktı üretir. Varsayımsal girdide 4 örnek, 6 zaman adımı ve 3 özellik vardır; hedef, her örnek için 2 sınıftan birini tahmin etmektir.
- Girdiyi üç boyutlu tensöre dönüştürün.
batch_first=Truekullanıyorsanız tensörün şekli[batch, sequence, feature]olmalıdır. - GRU katmanını tanımlayın.
input_sizeözellik sayısına,hidden_sizeGRU’nun sakladığı gizli durum boyutuna karşılık gelir. - GRU çıktısını alın.
output, bütün zaman adımlarındaki gizli durumları;hidden, son zaman adımından sonra oluşan gizli durumu içerir. - Görev için uygun çıktıyı seçin. Her zaman adımında tahmin gerekiyorsa
outputtensörünü, dizinin tamamını temsil eden tek tahmin gerekiyorsa son zaman adımını kullanın.
Python:
import torch
from torch import nn
class GRUClassifier(nn.Module):
def __init__(self, input_size=3, hidden_size=16, num_classes=2):
super().__init__()
self.gru = nn.GRU(
input_size=input_size,
hidden_size=hidden_size,
batch_first=True
)
self.classifier = nn.Linear(hidden_size, num_classes)
def forward(self, x):
# x: [batch, sequence, feature]
output, hidden = self.gru(x)
# Son zaman adımının çıktısı: [batch, hidden_size]
last_output = output[:, -1, :]
logits = self.classifier(last_output)
return logits, output, hidden
x = torch.randn(4, 6, 3)
model = GRUClassifier()
logits, output, hidden = model(x)
print(logits.shape) # torch.Size([4, 2])
print(output.shape) # torch.Size([4, 6, 16])
print(hidden.shape) # torch.Size([1, 4, 16])
Bu dolgusuz, sabit uzunluklu ve tek yönlü örnekte
output[:, -1, :], her örneğin son geçerli zaman adımındaki GRU çıktısını seçer. Dolgulu değişken uzunluklu veride bu indis kısa dizilerin son gerçek adımı olmayabilir. logits şeklinin [4, 2] olması, dört örneğin her biri için iki sınıfa ait ham skor üretildiğini gösterir. Bu değerler henüz olasılık değildir; eğitimde genellikle CrossEntropyLoss kullanılıyorsa modele ham logits verilir.output ile hidden arasındaki fark
output, dizinin her zaman adımı için gizli durumu saklar. Sıralı etiketleme, zaman serisinin her adımında tahmin veya sonraki katmanlara bütün zaman akışını aktarma gibi görevlerde kullanılır. hidden ise dizinin sonunda oluşan gizli durumu taşır ve özellikle dizinin tamamından tek çıktı üretilecek sınıflandırma görevlerinde başlangıç noktası olabilir.Mini gruplu, tek katmanlı ve tek yönlü GRU’da
hidden şekli [1, batch, hidden_size] olur. batch_first yalnız giriş ve output düzenini etkiler; hidden içindeki batch eksenini değiştirmez. Katman sayısı veya yön sayısı arttığında ilk boyut num_layers * num_directions olur. Bu nedenle çok katmanlı ya da çift yönlü bir modelde hidden[-1] ifadesi, seçilen yapıya göre son katmanın son yönündeki durumu verir; çift yönlü çıktıları birleştirmek için yön boyutunu ayrıca ele almak gerekir.Değişken uzunluktaki diziler
Aynı batch içindeki dizilerin uzunlukları farklıysa kısa diziler genellikle dolgu değerleriyle eşitlenir. Dolgu zaman adımlarının gerçek veri gibi işlenmesini önlemek için dolgulu girdiyi gerçek uzunluklarla
pack_padded_sequence kullanarak paketleyip GRU’ya verin; çıktıyı gerekirse pad_packed_sequence ile açın. Uzunluklar girdi örnekleriyle aynı sırada olmalıdır; tensör olarak veriliyorsa CPU’da tutulur. enforce_sorted=True azalan uzunluk sırası ister; False hem sıralı hem sırasız girdide kullanılabilir. Tek yönlü sınıflandırmada paketlenmiş girdinin son gizli durumu, son gerçek zaman adımını temsil eder.Şekil hatalarını nasıl ayırt edersiniz?
input.size(-1) değeri GRU’nun input_size değerinden farklıysa özellik boyutu yanlış kurulmuştur. İki boyutlu [sequence, feature] girdi, GRU’nun desteklediği grup içermeyen tek dizi biçimidir; bu durumda batch_first dikkate alınmaz ve hidden şekli [num_layers * num_directions, hidden_size] olur. Bu rehberdeki mini gruplu sınıflandırıcıyı kullanmak için tek diziye x.unsqueeze(0) ile batch boyutu ekleyebilirsiniz. Sonuç beklenenden farklıysa önce x.shape, output.shape ve hidden.shape değerlerini yazdırın. En sık hata, [batch, feature, sequence] biçimindeki veriyi GRU’nun beklediği [batch, sequence, feature] biçimine çevirmeden vermektir; gerekiyorsa boyutları transpose veya permute ile yeniden düzenleyin.
Son düzenleme: