Skip to main content
 首页 » 编程设计

python之在 Tensorflow 中恢复和预测

2024年08月16日28lyj

我正在关注 this link 的癌症预测。现在,在我的训练和测试阶段完成后,我想提供新数据作为输入并进行预测。为此,我正在保存模型并恢复它以获得预测,但我收到错误

ValueError: Cannot feed value of shape (31,) for Tensor 'Placeholder_1:0', which has shape '(?, 31)' 

下面是我的代码:

saver = tf.train.Saver() 
sampletest = [-0.24222039 -0.75688274 -0.26264569 -0.75637054 -0.7154845  -0.55675554 -0.51883267 -0.69442359 -0.87362527 -1.46135011 -0.05206671 -0.2790065 -0.28614862 -0.1934161  -0.38264881 -0.1295509   0.05817795 -0.32080093-0.64650773 -0.19383338 -0.14508449 -0.74260509 -0.66173979 -0.73123076-0.68635871 -0.78697688 -0.4790055  -0.71702336 -0.90543288 -1.1197415-0.41889736] 
with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
 
    for epoch in range(training_epochs): 
        for batch in range(int(n_samples / batch_size)): 
            batch_x = input_X[batch * batch_size: (1 + batch) * batch_size] 
            batch_y = input_Y[batch * batch_size: (1 + batch) * batch_size] 
            print(batch_x[0]) 
 
            sess.run([optimizer], feed_dict={x: batch_x, 
                                             y_: batch_y, 
                                             pkeep: training_dropout}) 
            saver.save(sess,'.\cancer_model') 
 
        # Display logs after every 10 epochs 
        if (epoch) % display_step == 0: 
            train_accuracy, newCost = sess.run([accuracy, cost], 
                                               feed_dict={x: input_X, y_: input_Y, pkeep: training_dropout}) 
 
            valid_accuracy, valid_newCost = sess.run([accuracy, cost], 
                                                     feed_dict={x: input_X_valid, y_: input_Y_valid, pkeep: 1}) 
 
            print("Epoch:", epoch, "Acc =", "{:.5f}".format(train_accuracy), "Cost =", "{:.5f}".format(newCost), 
                  "Valid_Acc =", "{:.5f}".format(valid_accuracy), "Valid_Cost = ", "{:.5f}".format(valid_newCost)) 
 
            # Record the results of the model 
            accuracy_history.append(train_accuracy) 
            cost_history.append(newCost) 
            valid_accuracy_history.append(valid_accuracy) 
            valid_cost_history.append(valid_newCost) 
 
            # If the model does not improve after 15 logs, stop the training. 
            if valid_accuracy < max(valid_accuracy_history) and epoch > 100: 
                stop_early += 1 
                if stop_early == 15: 
                    break 
            else: 
                stop_early = 0 
 
    print("Optimization Finished!") 
 
with tf.Session() as sess: 
    saver = tf.train.import_meta_graph('.\Cancer_Model\cancer_model.meta') 
    saver.restore(sess, tf.train.latest_checkpoint('.\Cancer_Model')) 
    prediction = sess.run(y4,feed_dict={x:sampletest}) 
    print(prediction) 

请帮我解决这个问题。

请您参考如下方法:

问题是你的模型需要一批例子,而你只是给出了一个。尝试替换:

prediction = sess.run(y4, feed_dict={x: sampletest}) 

与:

prediction = sess.run(y4, feed_dict={x: [sampletest]}) 

然后您将在 prediction 中使用单个元素获得“一批”结果。