求助波士顿房价模型预测问题
收藏
在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到新知识了
我按照案例的程序跑结果,但是得到的结果准确率却非常差,不知道什么原因