如何提取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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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