【学院教程】深度学习的模型固化

用户成长系列
标签: #<Tag:0x00007fc828b77a80>

(达达) #1

由于深度学习中牵扯到Dropout和随机种子等多处随机项,因此如果无法固化模型,当缓存丢失后会模拟交易/回测会触发重新训练,导致模型变化,本帖介绍固化已有的模型的步骤。

第一步,调试策略

   好的策略应该经过多次训练查看模型的回测效果稳定性,如果发现同样参数下多次训练模型得到的回测结果变动范围较大,多半是模型不稳定。模型稳定后可以考虑固化模型并开启模拟交易。

第二步,记录模型文件到userlib文件夹


以上图DNN模型为例,首先查看最后一次满意的模型结果缓存id,如上图m5模块是训练出来的模型结果。

ds = m5.data

运行查看记录DataSourceid到变量ds_id中。
执行下面的代码,将模型文件保存在userlib文件夹下model.csv文件中。

pd.DataFrame([DataSource(ds.id).read()]).to_pickle('/home/bigquant/work/userlib/model.csv')

可以到编写策略界面下的userlib文件夹查看是否增加了model.csv文件。

第三步,修改原始模版(修改前请备份)

参考上图,将原模型的深度学习训练模块相关模块删除,并新建一个自定义模块连接m11预测模块

自定义模块中添加如下代码:

# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
def bigquant_run(input_1, input_2, input_3):
    # 示例代码如下。在这里编写您的代码
    data = pd.read_pickle('/home/bigquant/work/userlib/model.csv')
    model_ds = DataSource.write_pickle(data.iloc[0].to_dict())
    return Outputs(data_1=model_ds)

即从文件中读取保存的model.csv文件到缓存中,并将模型传给预测模块

第四步,回测验证并模拟交易

运行修改后的模版,如果能跑出结果说明模型固化完成,固化后点击模拟交易即可。


深度学习因子选股模型-基于卷积神经网络
深度学习模型训练好后如何保存满意的模型,如何在模拟实盘运行的时候调用已经训练好的满意的模型?运行实盘日志显示深度学习重新训练,不是回测时训练好的模型,如何避免?
(tkyz) #2


这个错误是怎么回事?


(达达) #3

修改了一下 之前有点错误

ds = m5.data
pd.DataFrame([DataSource(ds.id).read()]).to_pickle('/home/bigquant/work/userlib/model.csv')

(tkyz) #4

好的,谢谢


(Darkman) #5

stockranker训练的模型采用上述方法保存读取后,输入stockranker预测模块报错:
TypeError Traceback (most recent call last)
in ()
232 model=m8.data_1,
233 data=m12.data,
–> 234 m_lazy_run=False
235 )

TypeError: argument to reversed() must be a sequence


(达达) #6

stockranker训练的模型不能用上述方法保存,而是通过model_id直接读取,您可以查一下社区


(Darkman) #7

社区的帖子都看过了,试过model 和 model_id 返回的都是指针,也就是说现在stockranker模型还不能保存为文件,如果重启内核,模型还是会丢失的吧。


(小Q) #8

model不会丢失,你自己记录好id