2015-03-17 36 views
7

Her belge için birden fazla etiket içeren bazı metin verilerim var. Bu veri seti için Theano'yu kullanarak bir LSTM ağı kurmak istiyorum. Ben http://deeplearning.net/tutorial/lstm.html ile karşılaştım ama sadece bir ikili sınıflandırma görevi kolaylaştırır. Hangi yöntemin devam edeceği konusunda herhangi bir önerisi varsa, bu harika olacaktır. Sadece bir başlangıç ​​yönüne ihtiyacım var, üzerinde çalışabilirim.Theano kullanarak LSTM ile çoklu etiketli öğrenme nasıl yapılır?

sayesinde Amit

cevap

1

Modelin son katmanını değiştirebilir. Hedefe sahip olup olmamanıza bağlı olarak, her elemanın 0 veya 1 olduğu bir hedef vektörü olacaktır.

6

1) Modelin son katmanını değiştirin. Yani

pred = tensor.nnet.softmax(tensor.dot(proj, tparams['U']) + tparams['b']) 

başka bir kat, örneğin değiştirilmesi gerektiğini sigmoid:

pred = tensor.nnet.sigmoid(tensor.dot(proj, tparams['U']) + tparams['b']) 

2) maliyeti de değiştirilmelidir.

I.I.I.e.

, başka bir maliyetle, örn. Çapraz entropi: mesela bazılarını kullanarak()

y = tensor.vector('y', dtype='int64') 

y = tensor.matrix('y', dtype='int64') # Each row of y is one sample's label e.g. [1 0 0 1 0]. sklearn.preprocessing.MultiLabelBinarizer() may be handy. 
tarafından o multilabel destekler, böylece pred_error() değiştirin:

one = np.float32(1.0) 
pred = T.clip(pred, 0.0001, 0.9999) # don't piss off the log 
cost = -T.sum(y * T.log(pred) + (one - y) * T.log(one - pred), axis=1) # Sum over all labels 
cost = T.mean(cost, axis=0) # Compute mean over samples 

3) fonksiyonu build_model(tparams, options), değiştirmek gerekir doğruluk ya da scikit-öğrenmesinden F1 skoru gibi metrikler.