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