报错信息
C++ Callstacks:
holder_ should not be null
Tensor not initialized yet when Tensor::type() is called. at [D:\1.4.1\paddle\paddle/fluid/framework/tensor.h:146]
问题原因
有已经定义好的变量还没有初始化参数就被调用了
例如上方的代码块,这些默认是保存在
fluid.default_main_program()
程序中。但不管有多少个子程序,都必须在fluid.default_statrup_program()
中初始化参数后,让他们知道是自己是干嘛的时候,他们才可以正确运行。初始化方法如下:在这些所有有关定义数据的代码块后,使用执行器exe.run(启动程序 此处为 startup )
初始化定义的变量就可以了。
解决方法
修改exe.run(startup)
到训练主循环位置上方最近处,避免有变量没有初始化参数就开始计算。
查看启动程序代码块位置是否在最接近训练主循环代码块位置上,而且两个代码块中间不能有其它有关训练的代码
这些不够直观,但不妨参考一下这篇文章,看一下代码结构就可以了https://www.jianshu.com/p/df98fcc832ed