如何从张量流分类模型中获得一系列预测

时间:2018-10-16 19:08:12

标签: numpy tensorflow prediction

我有以下分类模型。 我想得到一个类似于y_t的numpy数组,这是一个热编码的测试标签。但是我不断收到可变错误。

# Construct placeholders
with graph.as_default():
    inputs_ = tf.placeholder(tf.float32, [None, seq_len, n_channels], name = 'inputs')
    labels_ = tf.placeholder(tf.float32, [None, n_classes], name = 'labels')
    keep_prob_ = tf.placeholder(tf.float32, name = 'keep')
    learning_rate_ = tf.placeholder(tf.float32, name = 'learning_rate')

with graph.as_default():
    # (batch, 100, 3) --> (batch, 50, 6)
    conv1 = tf.layers.conv1d(inputs=inputs_, filters=6, kernel_size=2, strides=1, 
                             padding='same', activation = tf.nn.relu)
    max_pool_1 = tf.layers.max_pooling1d(inputs=conv1, pool_size=2, strides=2, padding='same')

with graph.as_default():
    # Flatten and add dropout
    flat = tf.reshape(max_pool_1, (-1, 6*6))
    flat = tf.nn.dropout(flat, keep_prob=keep_prob_)

    # Predictions
    logits = tf.layers.dense(flat, n_classes)

    # Cost function and optimizer
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels_))
    optimizer = tf.train.AdamOptimizer(learning_rate_).minimize(cost)

    # Accuracy
    correct_pred = tf.equal(tf.argmax(logits, 1), tf.argmax(labels_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32), name='accuracy')

然后我使用测试仪

with tf.Session(graph=graph) as sess:
    # Restore
    saver.restore(sess, tf.train.latest_checkpoint('bschkpnt-cnn'))

    for x_t, y_t in get_batches(X_test, y_test, batch_size):
        feed = {inputs_: x_t,
                labels_: y_t,
                keep_prob_: 1}

        batch_acc = sess.run(accuracy, feed_dict=feed)
        test_acc.append(batch_acc)
    print("Test accuracy: {:.6f}".format(np.mean(test_acc)))

y_t是nX3凹凸不平的数组。 我想以类似的格式获取y_pred

谢谢

1 个答案:

答案 0 :(得分:1)

  

soft = tf.nn.softmax(logits)

这将是您的概率分布,使得sum(soft) =1。此数组中的每个值都将指示模型与类有关的确定性。

  

pred = sess.run(soft,feed_dict = feed)

     

打印(pred)

因此,基本上我要做的就是放置一个额外的softmax,因为您将其内置在计算的损失中,因此必须再次放置以进行预测。然后,我要求输出预测,然后再次输入feed_dict

希望这对您有帮助!