求助波士顿房价模型预测问题
收藏
在Paddle Paddle快速入门的波士顿房价预测例子中,在设计网络阶段,我用fluid.Linear代替了例子中的fluid.layers.fc,在训练和模型保存的时候,一切顺利,但在模型预测的时候,却报错,报错是在模型预测阶段的infer_exe.run(inference_program,feed={feed_target_names[0]:np.array(test_x)},fetch_list=fetch_targets)语句,报错源是在PaddlePaddle的executor.py的self._default_executor.run(program.desc, scope, 0, True, True,fetch_var_name)语句。下面附上我的完整代码和错误信息,请各位大佬指点下,看我在保存模型和导入模型时有什么问题?不胜感激!万谢!
首先附上我的代码,然后附上错误截图:
import paddle.fluid as fluid import paddle import os import numpy as np if __name__=="__main__": #region House price linear predict /Data Reader Test BUF_SIZE=500 BATCH_SIZE=50 train_reader=paddle.batch(paddle.reader.shuffle(paddle.dataset.uci_housing.train(),buf_size=BUF_SIZE),batch_size=BATCH_SIZE) test_reader=paddle.batch(paddle.reader.shuffle(paddle.dataset.uci_housing.test(),buf_size=BUF_SIZE),batch_size=BATCH_SIZE) #region House price Linear net x=fluid.layers.data(name="x",shape=[1,13],dtype="float32") y=fluid.layers.data(name="y",shape=[1,1],dtype="float32") y_predict=fluid.Linear(input_dim=13,output_dim=1,act="relu") cost=fluid.layers.square_error_cost(input=y_predict(x),label=y) avg_cost=fluid.layers.mean(cost) #endregion #region Optimizer optimizer=fluid.optimizer.SGDOptimizer(learning_rate=0.01) opts=optimizer.minimize(avg_cost) test_program=fluid.default_main_program().clone(for_test=True) #endregion #region Executor place=fluid.CPUPlace() exe=fluid.Executor(place) exe.run(fluid.default_startup_program()) #endregion #region Train feeder=fluid.DataFeeder(place=place,feed_list=[x,y]) item=0 items=[] train_costs=[] EPOCH_NUM=50 model_save_dir="fit_a_line.inference.model" for pass_id in range(EPOCH_NUM): train_cost=0 for batch_id,data in enumerate(train_reader()): default_program=fluid.default_main_program() train_cost=exe.run(program=default_program,feed=feeder.feed( data),fetch_list=[avg_cost]) if(batch_id % 40 ==0): print("Pass:%d, Cost:%0.5f" % (pass_id, train_cost[0][0])) item=item+BATCH_SIZE items.append(item) train_costs.append(train_cost[0][0]) test_cost=0 for batch_id,data in enumerate(test_reader()): test_cost=exe.run(program=test_program,feed=feeder.feed(data),fetch_list=[avg_cost]) print('Test:%d, Cost:%0.5f' % (pass_id, test_cost[0][0])) #endregion #region save model if not os.path.exists(model_save_dir): os.mkdir(model_save_dir) print("save model to %s"%(model_save_dir)) fluid.io.save_inference_model(model_save_dir,['x'],[y_predict(x)],exe) #endregion #region Predict infer_exe=fluid.Executor(place) inference_scope=fluid.core.Scope() infer_result=[] gound_truths=[] with fluid.scope_guard(inference_scope): [inference_program,feed_target_names,fetch_targets]=fluid.io.load_inference_model(model_save_dir,infer_exe) infer_reader=paddle.batch(paddle.dataset.uci_housing.test(),batch_size=200) test_data=next(infer_reader()) test_x=np.array([data[0] for data in test_data]).astype("float32") test_y=np.array([data[1] for data in test_data]).astype("float32") results=infer_exe.run(inference_program,feed={feed_target_names[0]:np.array(test_x)},fetch_list=fetch_targets) #for idx, val in enumerate(results[0]): #print("%d: %.2f" % (idx, val)) #infer_results.append(val) #print("ground truth:") #for idx, val in enumerate(test_y): #print("%d: %.2f" % (idx, val)) #groud_truths.append(val) #endregion
错误截图:
0
收藏
请登录后评论
已经自我解决,是因为: fluid.io.save_inference_model用于保存静态图的预测模型,而我在搭建网络模型时用到了动态图的Linear,故有问题。
感谢各位!
get到新知识了
我按照案例的程序跑结果,但是得到的结果准确率却非常差,不知道什么原因