Rastgele sayıda giriş ve çıkışa sahip bir Yapay Nöron Ağı (YSA)


10

Sorunum için YSA kullanmak istiyorum, ancak sorun benim girişlerim ve çıkışlar düğüm numaraları sabit değil.

Sorumu sormadan önce bazı google arama yaptım ve RNN'in sorunumda bana yardımcı olabileceğini buldum. Ancak, bulduğum tüm örnekler bir şekilde giriş ve çıkış düğümlerinin tanımlanmış sayısıdır.

Bu yüzden, Keras veya PyTorch'da tercih edilen bir stratejiyi, nasıl gerçekleştirileceğini veya en azından bazı örnekleri arıyorum.

Sorunum hakkında daha fazla bilgi:

Birincisinin uzunluğu sabit ve iki eşittir iki giriş listesi var, fe:

in_1 = [2,2] 

ancak ikinci listenin uzunluğu esnektir, uzunluk üçten inf'ye olabilir, fe:

in_2 = [1,1,2,2]

veya

in_2 = [1,1,1,2,2,2,3,3,3]

Ayrıca, giriş listeleri birbirine bağlıdır. İlk liste çıktı listesinin boyutunu gösterir. Dolayısıyla, in_1 = [2,2] ise, çıktının [2,2] formuna yeniden şekil verme olasılığı olması gerektiği anlamına gelir.

Şu anda, iki girdi listesini bir araya getirmeyi düşünüyorum:

in = in_1 + in_2 = [2, 2, 1, 1, 2, 2]

Ayrıca, çıktı in_2 listesiyle aynı uzunluktadır , fi:

giriş listeleri şuysa:

in_1 = [2, 2]
in_2 = [1, 1, 2, 2]

Çıktı şöyle olmalıdır:

out = [1, 2, 1, 2]

Herhangi bir fikir bekliyoruz!

Yanıtlar:


6

Cevap, giriş vektörünün uzunluğunun önemine veya nasıl kaynaklandığına bağlı olabilir.

Bununla birlikte, en basit çözüm genellikle en büyük boyutlu girişi bilmek ve bunu vektör sayısı olarak kullanmaktır. Verilen girişin uzunluğu daha azsa, dolguları sıfırlarla veya uygun sembollerle yapabilirsiniz. Böylece bir [1, 2, 3] ve [1, 2, 2, 3] vektörüne sahip olmak yerine [1, 2, 3, 0] ve [1, 2, 2, 3] vektörlerine sahip olabilirsiniz.

Aynı şey çıktı için de geçerli olabilir. Beklenen çıktı [1, 2, 1] ve [1, 3, 4, 1] ise, ilk çıktıyı [1, 2, 1, 0] olarak değerlendirebilirsiniz.

Bu sadece bir hack değil mi?

Sinir ağları tipik olarak fonksiyon yakınlaştırması yapar. İdeal olarak, girdi olarak vektörleri (matrisler) ve çıktı olarak vektörleri (matrisler) temsil eder. Bu nedenle, giriş vektörünüzün boyutunun sabitlenmesi her zaman istenir.


Tamam, bu açık, giriş için dolgu yapabilirim. Ancak, çıkış düğümlerinin boyutu nasıl tanımlanır?
Paddy

3

Bence RNN için sabit girdi sayısını yanlış anlamış olabilirsiniz. Bu, zaman aşımı başına girdi sayısıdır . Tüm örneklerinizin zaman aralığı başına sabit sayıda girişi vardır: 1! Onları sinir ağınıza tek tek beslersiniz, özel bir "son" belirteci ile bitirirsiniz (bunun için her zaman ikinci bir girişiniz olabilir). Bitiş belirtecini görene kadar hiçbir çıktı vermemeyi ve ardından sonucun bileşenlerini birer birer çıkarmayı ve özel bir bitiş çıkış belirteciyle bitmesini öğretin.


vay, teşekkürler! Daha iyi anlamak için iyi bir öğretici / örnek biliyor musunuz?
Paddy

1
@Paddy Bazı bağlantılar için müthiş rnn'e bakın, örneğin char-rnn oldukça eğlencelidir.
Arthur Tacca

2

İlk listenin hemen hemen değişmez olduğunu (sadece belirli bir geometriyi tanımlayarak) bilmek, her farklı in_1 yapılandırması için birçok farklı, özel NN oluşturmayı deneyebilir ve ağı beslemek için sadece in_2 kullanabilirsiniz .

Böylece in_1 farklı ağları yönlendirebilir.

in_1=[1,1]? --> NN #1 (n1) --> (o1)
in_1=[2,1]? --> NN #2 (n1,n2) --> (o1,o2)
in_1=[2,2]? --> NN #3 (n1,n2,n3,n4) -> (o1,o2,o3,o4)

İlk adımda yapılandırmayı (yani bir diksiyon oluşturmak) belirler ve ardından özel ağları buna göre eğitir / beslersiniz.


aslında, bu iyi bir fikir, ama şekil sayısı oldukça büyük ... her neyse, giriş için teşekkür ederim!
Paddy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.