Python 如何打印Tensorflow中的预测概率

Python 如何打印Tensorflow中的预测概率,python,tensorflow,Python,Tensorflow,我是新来的。我已经使用tensorflow训练了一个编码器-解码器。这个程序把一个单词作为输入,然后打印出它的音素 例如:Hello World->['h','E','l','U','w','w','3','r','5','d'] 我想获得所选每个音素的预测概率 在预测部分,我使用的代码如下: def predict(words, sess): if len(words) > hp.batch_size: after = predict(words[hp.batc

我是新来的。我已经使用tensorflow训练了一个编码器-解码器。这个程序把一个单词作为输入,然后打印出它的音素

例如:Hello World->['h','E','l','U','w','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]
def predict(单词、sess):
如果len(words)>hp.batch\u尺寸:
after=预测(单词[hp.batch\u size:],sess)
words=words[:hp.批量大小]
其他:
之后=[]
x=np.zero((len(words),hp.maxlen,np.int32)#0:
对于枚举中的i,w(字):
对于枚举中的j,g((w+“E”)[:hp.maxlen]):
x[i][j]=g2idx.get(g,2)
preds=np.zeros((len(x),hp.maxlen),np.int32)
对于范围内的j(hp.maxlen):
xpreds=sess.run(graph.preds,{graph.x:x,graph.y:preds})
preds[:,j]=xpreds[:,j]
提前谢谢你


我的主要问题是这些概率“隐藏”在哪里以及如何访问它们。例如,单词“Hello”中的字母“o”被映射为音素“@U”。我想知道“@U”被选为理想音素的概率有多大。

讨论结束后,我想我可以告诉您应该在哪里更改代码。 在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

你能正确格式化代码吗?不确定代码块中的所有内容是否都应该在
predict
函数中。你是怎么打印概率的?试图确定这是否是一个重复的问题,或者是否还有更多的问题需要你回答。事实上,我试过一些在网上找到的东西。我试过np.argmax、tf.argmax、tf.nn.top_k和其他命令。问题的一部分是,即使上述命令产生了一些东西,也存在访问和读取数据的问题。主要是因为它们是张量查看
tf。打印
eval
我使用的代码的可能重复是基于:我更改的内容主要是在预处理中,以便使用我自己的数据。但是心还是一样的。我使用train.py来训练我的模型,我使用g2p.py来进行预测。兴趣点位于g2p.py的第85行。我必须找到一种方法来利用“_preds=sess.run(graph.preds,{graph.x:x,graph.y:preds})”中的信息,不仅可以进行预测,还可以打印每个预测的概率谢谢你的回答。我按照你的建议修改了代码,现在我正在重新培训我的模型。当我使用g2p.py脚本时,如何访问概率,以便在我用作输入的每个数据上找到它们?提前感谢您在进行此更改之后,在运行xpreds=sess.run(graph.preds,{graph.x:x,graph.y:preds})之后,xpred将包含概率。打印到控制台并检查。顺便说一下,你不需要再培训。您可以使用您已经拥有的最新检查点。非常感谢。最后一个问题(我希望是最后一个)。我将“tf.to_int32”替换为“tf.nn.softmax”,正如您在train.py中建议的那样。之后,我运行了g2p.py,出现了ValueError:无法将输入数组从形状(97)广播到形状(1)。为了使脚本正确运行,我应该使用其他操作吗?提前感谢您错误在这里:preds[:,j]=xpreds[:,j]首先您可以在会话结束后立即执行:打印(xpreds.shape)。运行以查看您现在获得的形状。您还可以打印(xpreds[0])以查看您现在获得的概率。我将编辑答案