如何提取TensorFlow模型的输出?

我一直在按照常规方法使用训练/测试数据来训练模型。我能够获得我的准确率、成本以及验证准确率和成本。因此,我认为模型是有效的,85%的结果已经足够了。

现在,在我完成训练/测试数据后,我有一个csv文件,数据类型和结构与训练数据相同,但少了一列(默认表示客户是否会支付或延迟)。我试图用模型预测这个值。我在如何插入这些数据并返回缺失的那一列上遇到了问题。

问题部分:

这是我在新数据上恢复和预测的代码 -> (y_pred [5100×41])

with tf.Session() as sess:    saver = tf.train.import_meta_graph('my_test_model101.meta')    print("Model found.")    saver.restore(sess, tf.train.latest_checkpoint('./'))    print("Model restored compl.")    z = tf.placeholder(tf.float32, shape= (None,5100))    y_pred= y_pred.as_matrix()    output =sess.run(z,feed_dict={x: y_pred})    print(output)

有谁能帮我理解我在这里做错了什么?!!!

错误消息是:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_4' with dtype float and shape [?,5100]     [[Node: Placeholder_4 = Placeholder[dtype=DT_FLOAT, shape=[?,5100], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

期望:

我的输入是[5100 x 41],但最后一列最初是NaN值,我希望它带有预测值,应该是0或1。

查看训练模型架构:

模型架构:

# 输入节点数input_nodes = 41# 乘数保持各层节点之间的固定比例mulitplier = 3# 每层隐藏节点数hidden_nodes1 = 41hidden_nodes2 = round(hidden_nodes1 * mulitplier)hidden_nodes3 = round(hidden_nodes2 * mulitplier)# dropout期间保留的节点百分比pkeep = tf.placeholder(tf.float32)# 输入x = tf.placeholder(tf.float32, [None, input_nodes])# 层1W1 = tf.Variable(tf.truncated_normal([input_nodes, hidden_nodes1], stddev = 0.15))b1 = tf.Variable(tf.zeros([hidden_nodes1]))y1 = tf.nn.sigmoid(tf.matmul(x, W1) + b1)# 层2W2 = tf.Variable(tf.truncated_normal([hidden_nodes1, hidden_nodes2], stddev = 0.15))b2 = tf.Variable(tf.zeros([hidden_nodes2]))y2 = tf.nn.sigmoid(tf.matmul(y1, W2) + b2)# 层3W3 = tf.Variable(tf.truncated_normal([hidden_nodes2, hidden_nodes3], stddev = 0.15))b3 = tf.Variable(tf.zeros([hidden_nodes3]))y3 = tf.nn.sigmoid(tf.matmul(y2, W3) + b3)y3 = tf.nn.dropout(y3, pkeep)# 层4W4 = tf.Variable(tf.truncated_normal([hidden_nodes3, 2], stddev = 0.15))b4 = tf.Variable(tf.zeros([2]))y4 = tf.nn.softmax(tf.matmul(y3, W4) + b4)# 输出y = y4y_ = tf.placeholder(tf.float32, [None, 2])

在构建模型后,我理解你需要添加占位符来存储你所寻找的内容。所以:

# 参数training_epochs = 5 # 这些被证明足以让网络学习training_dropout = 0.9display_step = 1 # 10n_samples = y_train.shape[0]batch_size = 2048learning_rate = 0.001# 成本函数:交叉熵cost = -tf.reduce_sum(y_ * tf.log(y))# 我们将通过AdamOptimizer优化我们的模型optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)# 如果softmax中最可能的值(默认或非默认)等于目标值,则预测正确correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

到目前为止,一切运作良好,我保存了模型。我能够恢复这个模型(打印了变量,一切都在——所以恢复是好的)


回答:

占位符’z’里面什么都没有,也没有分配任何东西。所以当你运行会话时,不需要做任何事情,因为’z’不依赖于模型中的任何东西。我认为你想要的是,

output =sess.run(y,feed_dict={x: y_pred})

因为’y’是输出张量。

话虽如此,我认为你可能需要多了解一些TensorFlow使用的流图,以理解计算是如何发生的。目前听起来你似乎还没有完全理解占位符变量的用法。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注