我一直在按照常规方法使用训练/测试数据来训练模型。我能够获得我的准确率、成本以及验证准确率和成本。因此,我认为模型是有效的,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使用的流图,以理解计算是如何发生的。目前听起来你似乎还没有完全理解占位符变量的用法。