首页 Paddle框架 帖子详情
求助波士顿房价模型预测问题
收藏
快速回复
Paddle框架 问答深度学习模型训练炼丹技巧 1306 3
求助波士顿房价模型预测问题
收藏
快速回复
Paddle框架 问答深度学习模型训练炼丹技巧 1306 3

在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
收藏
回复
全部评论(3)
时间顺序
w
wangsanfeng82
#2 回复于2020-05

已经自我解决,是因为: fluid.io.save_inference_model用于保存静态图的预测模型,而我在搭建网络模型时用到了动态图的Linear,故有问题。

感谢各位!

0
回复
thinc
#3 回复于2020-05

get到新知识了

0
回复
水痕
#4 回复于2022-08

我按照案例的程序跑结果,但是得到的结果准确率却非常差,不知道什么原因

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户