如何在Tensorflow中打印出预测概率

时间:2018-11-21 16:11:14

标签: python tensorflow

我是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”被选为理想音素的可能性。

1 个答案:

答案 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