Ami*_*pta 8 neural-network theano deep-learning lstm
我有一些文本数据,每个文档都有多个标签.我想使用Theano为此数据集训练LSTM网络.我遇到了http://deeplearning.net/tutorial/lstm.html但它只是促进了二进制分类任务.如果有人对继续采用哪种方法有任何建议,那就太棒了.我只需要一个初步的可行方向,我可以继续努力.
谢谢,阿米特
1)更改模型的最后一层.即
pred = tensor.nnet.softmax(tensor.dot(proj, tparams['U']) + tparams['b'])
Run Code Online (Sandbox Code Playgroud)
应该被其他一些层替换,例如sigmoid:
pred = tensor.nnet.sigmoid(tensor.dot(proj, tparams['U']) + tparams['b'])
Run Code Online (Sandbox Code Playgroud)
2)成本也应该改变.
即
cost = -tensor.log(pred[tensor.arange(n_samples), y] + off).mean()
Run Code Online (Sandbox Code Playgroud)
应该用其他一些费用代替,例如交叉熵:
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
Run Code Online (Sandbox Code Playgroud)
3)在函数中build_model(tparams, options),你应该替换:
y = tensor.vector('y', dtype='int64')
Run Code Online (Sandbox Code Playgroud)
通过
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.
Run Code Online (Sandbox Code Playgroud)
4)改变pred_error()以便它支持多标签(例如使用一些指标,如精确度或来自scikit-learn的F1分数).