TensorFlow с использованием LSTM для генерации текста

Я хотел бы использовать tenorflow для генерации текста и модифицировал учебник по LSTM (https://www.tensorflow.org/versions/master/tutorials/recurrent/index.html#recurrent-neural-networks) код, чтобы сделать это, однако мое первоначальное решение, кажется, генерирует бессмыслицу, даже после длительного обучения оно не улучшается. Я не понимаю почему. Идея состоит в том, чтобы начать с нулевой матрицы и затем генерировать одно слово за раз.

Это код, к которому я добавил две функции нижеhttps://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/rnn/ptb/ptb_word_lm.py

Генератор выглядит следующим образом

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)

Я добавил переменную "вероятности" в ptb_model, и это просто softmax над логитами.

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

И выборка:

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))

Ответы на вопрос(2)

Ваш ответ на вопрос