012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框...

10
! # " -. $%&'()*+(, / -%).' 012+, 流行的深度学习框架很多! RBAC-=L(-Y # 2+DDBR*B+A-"但这些框 架都是面向深度学习开发的专业人士的! 用这些框架做深度学习需要非常了解 底层逻辑! 且需要编写大量的代码才能实现" 这对非计算机编程相关专业科班 出身的金融从业人员来说! 是个很大的挑战! 且短时间内很难弥补"本书介绍的 深度学习库 6B=+C是一个基于 RBAC-=L(-Y 'KP ! 它能够使我们快速实现金融 模型的思维! 且易于编程实现" $"! +,-./ ,- 6B=+C是由谷歌软件工程师 L=+A;-@C2*-((B?开发的# 基于 RBAC-=L(-Y 深度学习库! 具有较为直观的 'KP " 目前! 6B=+C库已经成为 RBAC-=L(-Y 的默 'KP " 6B=+C库强调极简主义'''只需要几行代码就能构建一个神经网络! 其设计原则如下" BCDE 6B=+C是神经网络的高层 'KP ! 它充分考虑用户的使用体验! 在极大减少用 户工作量的前提下! 使用户非常方便地构建不同层次深度的定制化神经网络 模型" FGH 使用 6B=+C构建深度学习模型时! 可将该模型理解为一个多层的序列或数 据的运算图! 这些完全可配置的模块可以用最少的代价自由组合在一起" 具体 而言! 网络层# 损失函数# 优化器# 初始化策略# 激活函数# 正则化方法等都是独立 的模块! 可以使用它们来构建自己的模型" IJKL 添加新模块+ 或网络层# 神经元等, 非常容易! 只需要仿照现有的模块编写新 的类或函数即可"创建新模块的便利性使得 6B=+C更适合于先进的研究工作" 为了说明使用 6B=+C进行深度学习模型开发的便利性! 此处以一个简单的

Upload: others

Post on 05-Feb-2020

32 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

! #"

-. $%&'()*+(, / -%).' 012+,

!!

流行的深度学习框架很多!如RBAC-=L(-Y

#

2+DDB

和R*B+A-

等"但这些框

架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

底层逻辑!且需要编写大量的代码才能实现"这对非计算机编程相关专业科班

出身的金融从业人员来说!是个很大的挑战!且短时间内很难弥补"本书介绍的

深度学习库6B=+C

是一个基于RBAC-=L(-Y

的'KP

!它能够使我们快速实现金融

模型的思维!且易于编程实现"

$"!! +,-./ DE

6B=+C

是由谷歌软件工程师L=+A;-@C2*-((B?

开发的#基于RBAC-=L(-Y

深度学习库!具有较为直观的'KP

"目前!

6B=+C

库已经成为RBAC-=L(-Y

的默

认'KP

"

6B=+C

库强调极简主义'''只需要几行代码就能构建一个神经网络!

其设计原则如下"

!"

BCDE

6B=+C

是神经网络的高层'KP

!它充分考虑用户的使用体验!在极大减少用

户工作量的前提下!使用户非常方便地构建不同层次深度的定制化神经网络

模型"

#"

FGH

使用6B=+C

构建深度学习模型时!可将该模型理解为一个多层的序列或数

据的运算图!这些完全可配置的模块可以用最少的代价自由组合在一起"具体

而言!网络层#损失函数#优化器#初始化策略#激活函数#正则化方法等都是独立

的模块!可以使用它们来构建自己的模型"

$"

IJKL

添加新模块+或网络层#神经元等,非常容易!只需要仿照现有的模块编写新

的类或函数即可"创建新模块的便利性使得6B=+C

更适合于先进的研究工作"

为了说明使用6B=+C

进行深度学习模型开发的便利性!此处以一个简单的

Page 2: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

!&

!!!

示例说明如何使用6B=+C

库做深度学习模型开发"该示例以上证0$

成分股的

收盘价来训练模型!并使用训练得到的深度学习模型计算上证0$

指数的预测收

盘价!最后绘图表示上证0$

实际收盘价和预测收盘价的曲线!示例代码如下

所示"

!!

,%-$#. -*+/*& *& -/

,%-$#. +A%-9 *& +-

"#$% ')#*&3%$/)(& ,%-$#. ;)bA)+.,*(

"#$% ')#*&3(*9)#&31$#) ,%-$#. C)+&)0 S1.,K*.,$+0C#$-$A.

"#$% &'()*#+3-#)-#$1)&&,+2 ,%-$#. N$#%*(,?)#0 ;.*+/*#/;1*()#

,%-$#. %*.-($.(,G3-9-($. *& -(.

"#$% o,+/R9 ,%-$#. `

!!!!!获取数据并生成数据集!!!!!!

!获取上证 JI 成分股0并获取这些股票从 BI<I 年 < 月 < 日到

!BI<k 年 <B 月 :< 日所有交易日的收盘价和在此期间上证 JI

!的收盘价

!目标U 用上证 JI 成分股的收盘价预测上证 JI 指数的收盘价

`3&.*#.67!本段代码需要安装 o,+/ 资讯金融终端和 o,+/R9 插件才能运行

`&)./*.*5`3`&).6e&)1.$#1$+&.,.A)+.e0e/*.)5 BI<QX IBX Iap&)1.$#,/5

<IIIIIIIQkIIIIIIe7

!!!

!获取上证 JI 成分股的证券代码

1$/)4(,&.5`&)./*.*3C*.*T<V

1$/)4(,&.3*--)+/6YIIII<a3;]Y7

1$/)&51$/)4(,&.TIV

"$# 1$/) ,+ 1$/)4(,&.T<UVU

!!

1$/)&51$/)& l Y0Y l 1$/)

`4/*.*5`3`&/61$/)&0 e1($&)e0 eBI<IX I<X I<e0 eBI<kX <BX :<e0 eH,((5

R#)K,$A&e7 !获取所有成分股和上证 JI 指数的收盘价

1($&)4/*.*5-/3C*.*H#*%)6`4/*.*3C*.*0,+/)D5`4/*.*3M$/)&01$(A%+&5`4

/*.*3@,%)&7

1($&)4/*.*51($&)4/*.*3@

*((4/*.*51($&)4/*.*3/#$-+*6*D,&5<0E$`5Y*+9Y7

!!

!剔除存在 +*+ 的列

*((4/*.*3,+/)D3+*%)5eC*.)e

*((4/*.*3.$41&K6e&?JI4*((4/*.*31&Ke7

!!

!将获取的数据集写入 1&K 文件

!!!!!获取数据并生成数据集!!!!!!

/"5-/3#)*/41&K6Y&?JI4*((4/*.*31&KY0 ,+/)D41$(5YC*.)Y7

/"3,+/)D5-/3.$4/*.).,%)6/"3,+/)D7

/"5/"3#)&*%-()6YoXPcNY73(*&.67

/"5/"3/#$-+*6*D,&5I0E$`5Y*+9Y7

!!

!剔除存在 +*+ 的行

&.$D5(,&.6/"31$(A%+&7

&.$D3#)%$K)6YIIII<a3;]Y7

Page 3: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

!'

!!!

,+/5YIIII<a3;]Y

/"TY#).YV5/"TYIIII<a3;]YV3-1.41E*+2)673",((+*6I3<7!计算上证 JI 指数

当日收盘价相对前一收盘价的涨跌百分比0第一个值为 I3<

/"3($1TU0 Y+)`4#).YV5/"3*--(96(*%G/* #U I3< ," #TY#).YV W XI3IQ )(&)

#TY#).YV0 *D,&5<7

/"TY+)`4,+/)DYV5/"3($1T/"3,+/)DTIV0 YIIII<a3;]YV

"$# , ,+ #*+2)6()+6/"3,+/)D77U

!!

," , q IU

!!!!

/"3($1T/"3,+/)DT,V0 Y+)`4,+/)DYV5 /"3($1T/"3,+/)DT,X <V0

Y+)`4,+/)DYVr 6<3Il/"3($1T/"3,+/)DT,V0 Y+)`4#).YV7

!将所有数据0按照列标准化

)+5;.*+/*#/;1*()#67

/"TYIIII<a3;]YV5)+3",.4.#*+&"$#%6+-3*##*96/"TYIIII<a3;]YV73#)&E*-)

6X<0<77

"$# & ,+ &.$DU

!!

)+<5;.*+/*#/;1*()#67

!!

/"T&V5)+<3",.4.#*+&"$#%6+-3*##*96/"T&V73#)&E*-)6X<0<77

/"TY+)`4,+/)DYV5 )+3.#*+&"$#%6+-3*##*96/"TY+)`4,+/)DYV73#)&E*-)

6X<0<77

.#*,+5/"T/"3,+/)D W -/3.$4/*.).,%)6YB_X<BXBI<kY7V

/)" 1#)*.)4/*.*&).4,+/)D6/"7U

!!

/*.*85TV

/*.*[5TV

"$# , ,+ /"3,+/)DU

!!

D5/"3($1T,0 &.$DV3*&4%*.#,D67

/*.*83*--)+/6D7

95/"3($1T,0 YIIII<a3;]YV

/*.*[3*--)+/697

#).A#+ +-3*##*96/*.*870 +-3*##*96/*.*[7

!训练样本中0.#*,+4D 为所有成分股0.#*,+49 为上证 JI 指数

.#*,+4D0 .#*,+4951#)*.)4/*.*&).4,+/)D6.#*,+7

!构建四层顺序神经网络模型

%$/)(5;)bA)+.,*(67

%$/)(3*//6C)+&)6$A.-A.4/,%5BI0 ,+-A.4/,%5:a77

!

!第一层0:a 个输入#

BI 个输出节点

%$/)(3*//6S1.,K*.,$+6Y.*+EY77

%$/)(3*//6C#$-$A.6I3<77

%$/)(3*//6C)+&)6$A.-A.4/,%5<I0 ,+-A.4/,%5BI77 !第二层0BI 个输入#

<I 个输出节点

%$/)(3*//6S1.,K*.,$+6Y.*+EY77

%$/)(3*//6C#$-$A.6I3<77

%$/)(3*//6C)+&)6$A.-A.4/,%5J0 ,+-A.4/,%5<I77 !第三层0<I 个输入#

Page 4: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

")

!!!

J 个输出节点

%$/)(3*//6S1.,K*.,$+6Y.*+EY77

%$/)(3*//6C#$-$A.6I3<77

%$/)(3*//6C)+&)6$A.-A.4/,%5<0 ,+-A.4/,%5J77 !第四层0J 个输入#

< 个输出节点

%$/)(31$%-,()6($&&5Y%)*+4&bA*#)/4)##$#Y0 $-.,%,?)#5Y#%&-#$-Y7!编译

模型

%$/)(3",.6.#*,+4D0 .#*,+490 +G4)-$1E5BIII0 G*.1E4&,?)5JI0 K)#G$&)5

<7!拟合模型

!使用模型计算上证 JI 指数收盘价

/"TY-#)/YV5I3I

/"5/"T/"3,+/)D W -/3.$4/*.).,%)6YB_X<BXBI<kY7V

"$# , ,+ /"3,+/)DU

!!

D5/"3($1T,0 &.$DV3*&4%*.#,D67

/"3($1T,0 Y-#)/YV5%$/)(3-#)/,1.6D3#)&E*-)6<0:a77TI0IV !使用训练

出的模型0计算上证 JI 指数收盘价

!将实际上证 JI 指数和按预测模型计算的指数0做逆运算#变为实际收盘价

/"TY-#)/YV5)+3,+K)#&)4.#*+&"$#%6/"TY-#)/YV7

/"TYIIII<a3;]YV5)+3,+K)#&)4.#*+&"$#%6/"TYIIII<a3;]YV7

/"3.$4E/"6YC))-=)*#+,+2X&?JI3EJY0 YC))-4R$#."$(,$Y7

-(.3-($.6/"TY-#)/YV0 Y#Y0 (*G)(5Y-#)/Y7

-(.3-($.6/"TYIIII<a3;]YV0 YGY0 (*G)(5Y,+/)DY7

-(.3()2)+/67

-(.3&E$`67

!!

!输出实际指数与预测指数比较图

上证0$

实际指数用蓝色表示!预测指数用红色表示!如图.1!

所示"可见!

用深度学习模型得到的预测结果跟实际结果非常接近!即模型的拟合度较好"

图.1!

!

实际指数与预测指数比较

Page 5: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

"(

!!!

$"#! +,-./ FGHIJ

由于深度学习的框架基本都是基于J@AGZ

平台开发的!因此在X@AI-YC

台下安装深度学习库一般比较困难"此处!我们介绍一种在X@AI-YC

平台下安

装虚拟机进行深度学习开发的方法"

首先!安装虚拟机软件[@=?G+(3-Z

"访问[@=?G+(3-Z

首页+

*??

)

C

-22

YYY1

H@=?G+(:-Z1-=

>

2,!并下载#安装[@=?G+(3-Z

!如图.1&

所示"

图.1&

!

[@=?G+(3-Z

虚拟机首页

安装[@=?G+(3-Z

时!按照默认选项直接安装完成即可"

接下来!需要下载\:GA?GJ@AGZ

操作系统的镜像文件+

@C-

,"访问\:GA?G

桌面 版 操 作 的 首 页 +

*??

)

C

-22

YYY1G:GA?G1;-F

2

I-YA(-+I

2

IBC<?-

)

,!下 载

\:GA?G!51$41.JRQ

!如图.1.

所示"下载得到的\:GA?GJ@AGZ

系统的文件

名为G:GA?GM!51$41.MIBC<?-

)

M+FI541@C-

"

图.1.

!

\:GA?G!51$41.SBC<?-

)

Page 6: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

"!

!!!

启动已经安装好的[@=?G+(3-Z

"右击[@=?G+(3-Z

图标!并选择$以管理员

身份运行%"单击$新建%按钮!会显示图.14

所示的启动画面"此时!我们需要

填写虚 拟 机 的 名 称#类 型#版 本 等 信 息"此 处!我 们 将 虚 拟 机 命 名 为

SBB

)

JB+=A@A

>

!类型为J@AGZ

!版本为\:GA?G

+

54M:@?

,"

为新建的虚拟机分配内存"如果读者处理的数据量较大!建议至少分配

4,3

+

4$"5N3

,内存!本书以分配&,3

+

&$48N3

,内存为例!如图.10

所示"

图.14

!

启动[@=?G+(3-Z

并安装虚拟机 图.10

!

设置虚拟机内存大小

为虚拟机创建虚拟硬盘"选择$现在创建虚拟硬盘%!如图.15

所示"

图.15

!

创建虚拟硬盘

为虚拟硬盘选择文件类型"建议选择默认文件类型[SP

!如图.1%

所示"

Page 7: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

""

!!!

图.1%

!

选择虚拟硬盘文件类型

选择虚拟硬盘在物理硬盘上的存储方式"此处!选择固定大小!以便提升虚

拟机的运行速度!如图.18

所示"

图.18

!

虚拟磁盘分配方式

选择虚拟硬盘在X@AI-YC

上的存储位置"此时!需要首先在X@AI-YC

统上找到剩余存储空间较大的硬盘+本书是L

盘,!并新建一个文件夹+本书命

名为[@=?G+(3-Z

,"虚拟硬盘的大小建议至少选择!$,3

!以&$,3

为佳!如

图.1"

所示"

虚拟机创建完成!接下来安装\:GA?GJ@AGZ

操作系统"选择$

SBB

)

JB+=A@A

>

%

并单击$启动%按钮!如图.1!$

所示"

选择J@AGZ

系统盘"找到已经下载的J@AGZ

系统盘的PQV

镜像文件!并选

择$

G:GA?GM!51$41.MIBC<?-

)

M+FI541@C-

%!如图.1!!

所示"

操作系统语言选择$

WA

>

(@C*

%!然后单击$

PAC?+((\:GA?G

%按钮!如图.1!&

所示"

Page 8: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

"#

!!!

图.1"

!

虚拟硬盘位置和大小

图.1!$

!

启动新创建的虚拟机

图.1!!

!

选择下载的\:GA?GJ@AGZ

系统盘

Page 9: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

"$

!!!图.1!&

!

安装\:GA?G

!!

为提升安装速度!此处建议不选择安装操作系统的附加项!如图.1!.

所示"

图.1!.

!

不选择安装操作系统的附加项

选择安装选项"建议选择格式化虚拟硬盘并安装操作系统+

W=+CBI@C<+AI

@AC?+((\:GA?G

,!如图.1!4

所示"

Page 10: 012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框 架都是面向深度学习开发的专业人士的!用这些框架做深度学习需要非常了解

"*

!!!

图.1!4

!

选择安装类型

单击$

2-A?@AGB

%!安装\:GA?G

操作系统!如图.1!0

所示"

图.1!0

!

确认安装类型