2017种子杯初赛

CNN模型图



使用语言及运行环境

Python 2.7.13 on Linux
需要模块:numpy,pandas,tensorflow

代码相应接口及变量含义

1、Data_get.py生成所需数据
2、CNN.py对数据进行训练
3、UseModel.py生成预测文件Data_get.py
文件作用:整理相关数据,获取训练数据集文件以及测试数据集文件
生成文件说明
'Team_elo.csv'队伍Elo天梯积分数据
'TeamSRS.csv'队伍平均胜率,得分,SRS等数据
'TeamTotal.csv'队伍三分命中,出手,两分命中,出手等数据
'TeamData_win.csv'训练集中队伍比赛胜负情况数据
'TeamDataTrain.csv'最终训练使用数据
'TeamDataTest.csv'需要预测比赛的相关数据
文件使用说明:直接python2 运行文件

CNN.py

文件说明:训练模型搭建,使用一层卷积层,一层池化,一层全连接隐藏神经元,一层全连接输出

  • 卷积层:使用3×3卷积窗口,一个输入通道,64个卷积核
  • 池化层:2×2池化窗口,步长为1,不改变深度
  • 隐藏层:128个隐藏神经元
  • 输出层:2个输出,分别代表客场,主场胜负
    文件使用:直接python2 运行文件

    UseModel.py

    文件说明:训练好的模型使用,分为图搭建,训练好的模型导入,预测,预测结果生成文件几块 文件使用:直接python2运行文件

    对于模型参数的选择以及优化思路

    参数选择:

  • 输入参数的选取:对每一场比赛,我们有两支队伍,对每只队伍,我们提取了30个特征信息作为参数,最终每场比赛有60个特征参数。
  • 卷积层参数选取:卷积层的参数选取主要在卷积核的个数选取上,由于参数量不大,所以选取3×3的卷积核,在个数上,卷积核个数选取小于60的话,由于我们选取队伍参数之间的关联性不大,所以,60个左右的参数较为合适。
  • 池化层参数:池化过程中,我们将卷积得到的图在橫纵坐标上压缩两倍,让深度不变,降低接下来全连接的计算量。
  • 隐藏层:通过池化到达隐藏层的参数个数为3×5×64,由于输出元个数为2,相较于输入参数个数较小,所以我们选择使用128个隐藏神经元个数,大概为输出参数两倍。
  • 输出层:输出层使用两个神经元,分别代表客场与主场队伍的胜负情况。

    优化思路:

  • 数据归一处理:由于最初输出为主场胜的置信度,是一个0-1之间的数,且在输入参数中存在负数情况,所以选取将数据线性归一到-1-1之间。
  • 边缘性处理:为了防止极个别数据,在归一后运算后导致值波动太大导致最后数据溢出的情况的发生,我们通过对这些太小数据映射处理解决。
  • 防止过拟合化:使用dropout提高数据泛化程度
  • 优化器:因为我们需要输出结果的稳定性,泛化性,希望最终结果相对收敛,所以我们没有选择常见的几种梯度下降算法,选择了自适应性的Adam来进行优化。

    开发者

  • slaxes
  • sunhaohai