14 votos

Cómo entrenar la capa LSTM de la red profunda

Estoy utilizando una red lstm y feed-forward para clasificar el texto.

Convierto el texto en vectores de un solo punto y meto cada uno en el lstm para poder resumirlo en una sola representación. Luego lo introduzco en la otra red.

Pero, ¿cómo entreno el lstm? Sólo quiero clasificar secuencialmente el texto, ¿debo alimentarlo sin entrenamiento? Sólo quiero representar el pasaje como un único elemento que pueda alimentar a la capa de entrada del clasificador.

¡Apreciaría mucho cualquier consejo con esto!

Actualización:

Así que tengo un lstm y un clasificador. Tomo todas las salidas del lstm y las pongo en común, y luego introduzco esa media en el clasificador.

Mi problema es que no sé cómo entrenar el lstm o el clasificador. Sé cuál debe ser la entrada para el lstm y cuál debe ser la salida del clasificador para esa entrada. Como son dos redes separadas que se activan secuencialmente, necesito saber y no sé cuál debería ser la salida ideal para el lstm, que también sería la entrada para el clasificador. ¿Hay alguna forma de hacerlo?

11voto

Paul Woolcock Puntos 4028

El mejor lugar para empezar con los LSTM es la entrada del blog de A. Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Si usted está usando Torch7 (que yo sugeriría fuertemente) el código fuente está disponible en github https://github.com/karpathy/char-rnn .

También intentaría modificar un poco su modelo. Utilizaría un enfoque de muchos a uno, de modo que introduzcas las palabras a través de una tabla de búsqueda y añadas una palabra especial al final de cada secuencia, de modo que sólo cuando introduzcas el signo de "fin de la secuencia" leas la salida de la clasificación y calcules el error basándote en tu criterio de entrenamiento. De este modo, entrenarías directamente en un contexto supervisado.

Por otro lado, un enfoque más sencillo sería utilizar paragraph2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) para extraer las características de su texto de entrada y luego ejecutar un clasificador sobre sus características. La extracción de características de vectores de párrafos es muy simple y en python sería:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename

    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])

sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5, dm=1, workers=8, sample=1e-5)
model.build_vocab(sentences)

for epoch in range(epochs):
    try:
        model.train(sentences)
    except (KeyboardInterrupt, SystemExit):
        break

0 votos

Gracias por responder. Las tendré en cuenta. Tiene algún consejo sobre el tema concreto de mi pregunta, que he actualizado.

0 votos

No creo que el procedimiento descrito dé ningún resultado. ¿En qué va a entrenar contra el LSTM? No estoy seguro de entender por qué utilizar un LSTM en este caso para el aprendizaje no supervisado de características para una frase entera. ¿Tienes alguna bibliografía relevante sobre tu enfoque con la que pueda ayudarte? Esto también podría interesarte arxiv.org/abs/1306.3584 .

0 votos

Entrenaré el lstm a partir de un conjunto de datos de pasajes de texto anteriores y sus clases. No pretendo utilizar el aprendizaje no supervisado. Quiero entrenarlo manualmente, pero no sé cómo. Aquí está mi implementación del lstm y el clasificador sin la biblioteca de aprendizaje automático, que sé que funciona: pastebin.com/63Cqrnef el lstm tiene una función de deepActivate que activa el lstm y luego el clasificador como mencioné en mi quesiton. Esto es algo como lo que estoy tratando de implementar: deeplearning.net/tutorial/lstm.html

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X