TensorFlow mit LSTMs zum Generieren von Text

Ich möchte Tensorflow zum Generieren von Text verwenden und habe das LSTM-Tutorial geändert https: //www.tensorflow.org/versions/master/tutorials/recurrent/index.html#recurrent-neural-network) Code, um dies zu tun, aber meine ursprüngliche Lösung scheint Unsinn zu erzeugen, auch nach dem Training für eine lange Zeit, es verbessert sich nicht. Ich verstehe nicht warum. Die Idee ist, mit einer Nullmatrix zu beginnen und dann jeweils ein Wort zu generieren.

Dies ist der Code, zu dem ich die beiden folgenden Funktionen hinzugefügt habehttps: //tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/rnn/ptb/ptb_word_lm.p

Der Generator sieht wie folgt aus

def generate_text(session,m,eval_op):

    state = m.initial_state.eval()

    x = np.zeros((m.batch_size,m.num_steps), dtype=np.int32)

    output = str()
    for i in xrange(m.batch_size):
        for step in xrange(m.num_steps):
            try:
                # Run the batch 
                # targets have to bee set but m is the validation model, thus it should not train the neural network
                cost, state, _, probabilities = session.run([m.cost, m.final_state, eval_op, m.probabilities],
                                                            {m.input_data: x, m.targets: x, m.initial_state: state})

                # Sample a word-id and add it to the matrix and output
                word_id = sample(probabilities[0,:])
                output = output + " " + reader.word_from_id(word_id)
                x[i][step] = word_id

            except ValueError as e:
                print("ValueError")

    print(output)

Ich habe die Variable "probabilities" zum ptb_model hinzugefügt und es ist einfach ein Softmax über den Logits.

self._probabilities = tf.nn.softmax(logits)

Und die Probenahme:

def sample(a, temperature=1.0):
    # helper function to sample an index from a probability array
    a = np.log(a) / temperature
    a = np.exp(a) / np.sum(np.exp(a))
    return np.argmax(np.random.multinomial(1, a, 1))

Antworten auf die Frage(4)

Ihre Antwort auf die Frage