012+, · !!流行的深度学习框架很多!如rbac -=l(y#2+db和r*b+a-等"但这些框...
TRANSCRIPT
! #"
-. $%&'()*+(, / -%).' 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
进行深度学习模型开发的便利性!此处以一个简单的
!&
!!!
示例说明如何使用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
!'
!!!
,+/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 个输入#
")
!!!
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!
!
实际指数与预测指数比较
"(
!!!
$"#! +,-./ 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<?-
)
"!
!!!
启动已经安装好的[@=?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%
所示"
""
!!!
图.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!&
所示"
"#
!!!
图.1"
!
虚拟硬盘位置和大小
图.1!$
!
启动新创建的虚拟机
图.1!!
!
选择下载的\:GA?GJ@AGZ
系统盘
"$
!!!图.1!&
!
安装\:GA?G
!!
为提升安装速度!此处建议不选择安装操作系统的附加项!如图.1!.
所示"
图.1!.
!
不选择安装操作系统的附加项
选择安装选项"建议选择格式化虚拟硬盘并安装操作系统+
W=+CBI@C<+AI
@AC?+((\:GA?G
,!如图.1!4
所示"
"*
!!!
图.1!4
!
选择安装类型
单击$
2-A?@AGB
%!安装\:GA?G
操作系统!如图.1!0
所示"
图.1!0
!
确认安装类型