我是tf的新手。我已经训练了一个编码器-使用张量流的解码器。该程序将一个单词作为输入并打印出其音素。
例如:Hello World-> ['h','E','l','“,'@ U','','w','”,'3','r ','5','d']
我想了解所选每个音素的预测概率。
在预测部分,我使用的代码如下:
def predict(words, sess):
if len(words) > hp.batch_size:
after = predict(words[hp.batch_size:], sess)
words = words[:hp.batch_size]
else:
after = []
x = np.zeros((len(words), hp.maxlen), np.int32) # 0: <PAD>
for i, w in enumerate(words):
for j, g in enumerate((w + "E")[:hp.maxlen]):
x[i][j] = g2idx.get(g, 2)
preds = np.zeros((len(x), hp.maxlen), np.int32)
for j in range(hp.maxlen):
xpreds = sess.run(graph.preds, {graph.x: x, graph.y: preds})
preds[:, j] = xpreds[:, j]
提前谢谢!
我的主要问题是“隐藏”这些概率的位置以及如何访问它们。例如,单词“ Hello”中的字母“ o”被映射为音素“ @U”。我想找出“ @U”被选为理想音素的可能性。
答案 0 :(得分:0)
在讨论之后,我想我可以指出您应该在哪里更改代码。 在train.py中,第104行:
self.preds = tf.to_int32(tf.argmax(logits, -1))
他们以最高概率将preds变量分配给索引。 为了获得softmax预测,可以如下更改代码:
self.preds = tf.nn.softmax(logits)
我认为应该这样做。
如何查看概率:
preds = np.zeros((len(x), hp.maxlen), np.float32)
for j in range(hp.maxlen):
xpreds = sess.run(graph.preds, {graph.x: x, graph.y: preds})
# print shape of output -> batch_size, max_length,number_of_output_options
print(xpreds.shape)
# print all predictions of the first output
print(xpreds[0, 0])
# print the probabilty of the network prediction
print(xpreds[0, 0, np.argmax(xpreds[0][0])])
# preds[:, j] = _preds[:, j] Need to accumulate the results according to the correct output shape