金沙国际唯一官网网址 10

未分类

各自授予一定的权重来对多年来的股票价格举行预测,也是本国各市点制定水利发展设计的根本目的之黄金时代

6 11月 , 2019  

  硕士结束学业此前曾经对依靠LSTM循环神经互联网的股票价格预测方法开展过小小的研究,趁着前段时间专门的职业不忙,把在那之中的风流罗曼蒂克局地剧情写下来做以记录。

引自:

农田有效灌注面积指有固定水源、灌水工程设施配套、土地平整、在相符年景下能够进行平常灌水的田地面积,包含机灌面积、电力排水灌水面积、自流灌水面积和喷灌面积[1]。它是反映农水建设和水利化的基本点目标,也是本国各州段制订水利发展设计的要紧目的之豆蔻梢头。对土地有效灌水面积举办展望可认为领会现在农水幼功设备的建设景观提供有价值的参阅音讯,同期也可为相关机构成立制订行当发展规划提供理论支撑。

 

 

1 预测方案的鲜明与估摸方法的选项

  此番股价预测模型仅依照股票的历史数据来确立,不思忖音信直面个人股的震慑。曾有东瀛专家使用深度学习的艺术来对当天的资源消息内容开展剖析,以判别其对股票价格正面性/消极面性影响,并将其与股票(stock卡塔 尔(阿拉伯语:قطر‎的野史数据相结合,各自付与一定的权重来对多年来的股票价格实行前瞻[1]。该预测方法得到了确定的法力。

普通话文书档案: 
法定文书档案: 
文书档案主假使以keras2.0。

1.1 预测方案的规定

  而这里自身未曾引进音信面包车型大巴影响,主要由于以下几点考虑:


农田有效灌水面积的更改受多地点因素的影响,比方政策、中心财政资金投入、地方财政资金投入、村民收入境况等。那几个成分而不是孤立地对水田有效灌水面积发生影响,而是耦合在一块以非线性的章程影响土地有效灌溉面积的成形。

  1.信息的及时性难以管教:超级多时候,在一头股票的利好/利空新闻出来以前,其股票价格意气风发度有了较大幅度面包车型地铁滋长/下落。音讯的不对称性引致普通民众贫乏直接消息源。

.

土地有效灌注面积的忖度有两大类方案:生龙活虎种为结构式的瞻望方法,便是通过一定的主意确立起各关键影响因素与土地有效灌水面积之间的涉及,然后依照现在各影响因素的变迁去预测相呼应的农地有效灌水面积;另豆蔻梢头种为多少体系预测法,就是将各年度的庄稼地有效灌水面积数值作为连接的岁月类别对待,能够感到土地有效灌注面积的变化规律已经蕴含在数码连串之中,再接纳合适的法子对该类别在现在的取值实行预测。

  2.音讯的准确性难以保障:互连网络音讯传播速度非常的慢,媒体中间平日会现出相互抄袭消息的场合,而这种抄来的资源信息(非原创音讯)往往未有通过严刻的检查核对,存在着内容虚假,夸大宣传的大概性。生龙活虎旦深入分析模型错用了某条浮言或诚实不高的消息,很有望得出错误的预测结果。

Keras系列:

1、keras体系︱Sequential与Model模型、keras基本构造功用(大器晚成卡塔 尔(英语:State of Qatar) 
2、keras系列︱Application中三款已演习模型、VGG16框架(Sequential式、Model式卡塔尔解读(二卡塔 尔(英语:State of Qatar) 
3、keras类别︱图像多分类练习与行使bottleneck
features举办微调(三卡塔 尔(阿拉伯语:قطر‎ 
4、keras体系︱人脸表情分类与识别:opencv人脸检查测验+Keras心思分类(四卡塔尔 
5、keras种类︱迁移学习:利用英斯ptionV3进行fine-tuning及预测、完整案例(五卡塔 尔(英语:State of Qatar)


在首先种方案中,首先须求规定具体影响土地有效灌水面积变化的成分连串及其影响规律,其它还必要对各要素的将来生成举办展望。正确地规定影响土地有效浇水面积变化的各类因素自个儿就很有难度,各要素对有效灌注面积影响规律的辨别也相通是三个相比复杂的难点,而猜想各要素现在的转移更是三个大约和预测农田有效灌注面积难度极其的题目。在其次种方案中,首先须求创建起能够足够反映农田有效灌注面积变化规律的前瞻模型,然后通过求取该预测模型在今后的输出值就能够兑现预测。两种方案相比较,显明第三种方案更易于完成。由此,在偏下研究中采纳数据连串预测方案。

  3.语言的歧义性:一条消息,其正面性/消极面性往往存在着冒尖解读。举个例子“习近平公布中华夏儿女民共和国将裁减军备30万”——新华天天电子通信二〇一四.09.04。那条音讯日常意义上得以解读为:中心政坛长远推动改换,简政放权,大力发展国防军事工业职业。那是生机勃勃种正面性的解读。而在采纳机器学习模型时,如古板的奇怪值分解算法(SVD),很有相当大希望会咬定其与“二〇一八年中国共产党第五次全国代表大会行裁员近3万”这种音讯具备较高的雷同度,因而将其分割为消极的一面新闻。

零、keras介绍与主导的模型保存

写成了沉凝导图,便于观望与驾驭。

1.2 预测方法的选料

  4.手艺实现比较混乱:那其实是贰个拾叁分关键的案由啦~,获取科学的信息并张开NLP操作,往往要求经过以下流程:人工浏览网页鲜明稳固可信的音讯源→设计爬虫完结成效消息的获取→设计音讯裁剪(填充)方案以应对不相同尺寸的信息→人工标明音讯的正/负性(也足以用当日股票价格起起落落来标明)→设计互联网模型→练习及表明模型。当中的每一步都非常麻烦耗费时间,並且对于个人股来讲,实际不是每一天都会有新闻现身。

1.keras网络布局

金沙国际唯一官网网址 1

在数额种类的张望中,近些日子遍布选取的秘籍有移动平均法、指数平滑法、线性回归法、灰白预测法、神经网络法和支撑向量机方法等。这几个点子中神经网络法和支撑向量机方法从实质上的话特别相符接受于非线性预测难题。而土地有效浇灌面积所组成的多寡系列是三个天下第一的非线性体系。显明在该商量中央银行使神经网络法和支持向量机方法相比适宜。为了充足钻探那二种方式的适用性,以下对那三种方法举行相比较深入分析。

 

2.keras网络布局

金沙国际唯一官网网址 2
其间回调函数callbacks应该是keras的精华~

2 三种预测方法的理论根底及特色分析

  上边说了这么多,还不曾初步对小编那个预测模型进行介绍,上边初始进入正题。在调控免去音讯面的勘测之后,作者起来酌量股票价格上涨或下落的真相,笔者认为股票价格正是花费博艺结果的反映。这一次创设的前瞻模型,朴素的主见是通过深度学习模型来侦查破案庄家的操作原理,对拉升、砸盘的景况张开前瞻。为了到达以下目标,笔者说了算取舍以下多性意况来营造互连网模型,即:

3.keras预管理作用

金沙国际唯一官网网址 3

2.1 BP神经互联网预测的争鸣底子及特色深入分析

涨降低的幅度  最高上升的幅度  最低降低的幅度  大单净流入 
中单净流入  小单净流入  换另一边手率

4、模型的节点音信提取

# 节点信息提取
config = model.get_config()  # 把model中的信息,solver.prototxt和train.prototxt信息提取出来
model = Model.from_config(config)  # 还回去
# or, for Sequential:
model = Sequential.from_config(config) # 重构一个新的Model模型,用去其他训练,fine-tuning比较好用

在种种神经网络中,BP神经互联网堪当最杰出、使用最为普遍的生机勃勃种神经互联网[2,3]。

使用那多个特点来对期货的上涨或下落情形以及财力的流淌状态创建合适的模型。此外,其余的目的相仿MACD、均线等也是经过有些底蕴数据的运算得出,在创设立模型型时并从未将其归入考虑衡量范围。

5、 模型轮廓查询(满含权重查询卡塔尔国

# 1、模型概括打印
model.summary()

# 2、返回代表模型的JSON字符串,仅包含网络结构,不包含权值。可以从JSON字符串中重构原模型:
from models import model_from_json

json_string = model.to_json()
model = model_from_json(json_string)

# 3、model.to_yaml:与model.to_json类似,同样可以从产生的YAML字符串中重构模型
from models import model_from_yaml

yaml_string = model.to_yaml()
model = model_from_yaml(yaml_string)

# 4、权重获取
model.get_layer()      #依据层名或下标获得层对象
model.get_weights()    #返回模型权重张量的列表,类型为numpy array
model.set_weights()    #从numpy array里将权重载入给模型,要求数组具有与model.get_weights()相同的形状。

# 查看model中Layer的信息
model.layers 查看layer信息

BP神经网络是抽样误差反向传来(Back error
propagation,简单称谓BP卡塔尔国神经网络的简单称谓。BP神经网络常常由1个输入层、若干隐含层和1个输出层组成,在每层中能够包含若干个神经元。各相邻层神经元之间多为全连接格局,而同层神经元之间则无连接[4]。各神经元间的连天传递相应的权值,隐含层及输出层各神经元都有自身的阈值。BP神经网络当作黄金时代种前馈互连网,具备前馈互联网的共性。研商阐明,三层前馈网络就可见以随机精度逼近放肆一而再函数及其各阶导数[5]。对队列进行建立模型,从实质上来讲便是赢得系列的成形泛函,BP神经互连网的函数围拢功效恰恰可以兑现此进度。

 

6、模型保存与加载

model.save_weights(filepath)
# 将模型权重保存到指定路径,文件类型是HDF5(后缀是.h5)

model.load_weights(filepath, by_name=False)
# 从HDF5文件中加载权重到当前模型中, 默认情况下模型的结构将保持不变。
# 如果想将权重载入不同的模型(有些层相同)中,则设置by_name=True,只有名字匹配的层才会载入权重.

但BP神经互连网也设有多少欠缺,个中相比优良的是网络布局的科学明确、易限于局部收敛和消失速度慢。此中互联网布局的不利分明是指在规定网络布局参数的经过中尚无确切的基于能够遵守。而局地收敛则对BP神经互连网的函数靠拢功用影响非常的大。

大器晚成.源多少及其预管理

7、如何在keras中设定GPU使用的大小

本节发源:纵深学习theano/tensorflow多显卡多个人选择难点集(参见:Limit
the resource usage for tensorflow backend · Issue #1538 ·
fchollet/keras ·
GitHub) 
在行使keras时候会现身一连占满GPU显存的情景,能够透过重设backend的GPU占用情状来进展调节和测验。

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config))

 

亟需留意的是,尽管代码或安排范围设置了对显存占用百分比阈值,但在其实运作中只要达到了这几个阈值,程序有需求的话还是会突破那一个阈值。换来讲之固然跑在四个大数目集上依旧会用到越来越多的显存。以上的显存约束只是为了在跑小数目集时防止对显存的萧条而已。(前年三月二十二日补充卡塔 尔(阿拉伯语:قطر‎

2.2 扶植向量机预测的反驳底蕴及特色深入分析

  通过某股票(stock卡塔 尔(英语:State of Qatar)交易软件,我得到的源数据约有20来个特点,包罗:升幅、现价、上涨或下落、买入、卖价、成交量等等。为了拿到地方所述的多种个性,筛选出上涨或下降幅、大单净流入、中单净流入、小单净流入、换一只手率这5个特征,并计算最高增长幅度、最高降幅七个特点。通过下列公式总计得到。

8.更科学地模型操练与模型保存

filepath = 'model-ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5'
checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')
# fit model
model.fit(x, y, epochs=20, verbose=2, callbacks=[checkpoint], validation_data=(x, y))

 

save_best_only张开未来,会如下:

 ETA: 3s - loss: 0.5820Epoch 00017: val_loss did not improve

 

如果val_loss 升高了就能保留,未有升高就不会保留。

3 预测模型的确立

金沙国际唯一官网网址 4

9.如何在keras中使用tensorboard

    RUN = RUN + 1 if 'RUN' in locals() else 1   # locals() 函数会以字典类型返回当前位置的全部局部变量。

    LOG_DIR = model_save_path + '/training_logs/run{}'.format(RUN)
    LOG_FILE_PATH = LOG_DIR + '/checkpoint-{epoch:02d}-{val_loss:.4f}.hdf5'   # 模型Log文件以及.h5模型文件存放地址

    tensorboard = TensorBoard(log_dir=LOG_DIR, write_images=True)
    checkpoint = ModelCheckpoint(filepath=LOG_FILE_PATH, monitor='val_loss', verbose=1, save_best_only=True)
    early_stopping = EarlyStopping(monitor='val_loss', patience=5, verbose=1)

    history = model.fit_generator(generator=gen.generate(True), steps_per_epoch=int(gen.train_batches / 4),
                                  validation_data=gen.generate(False), validation_steps=int(gen.val_batches / 4),
                                  epochs=EPOCHS, verbose=1, callbacks=[tensorboard, checkpoint, early_stopping])

 

都是在回调函数中起效果:

  • EarlyStopping patience:当early 
    (1卡塔 尔(英语:State of Qatar)stop被激活(如觉察loss相比较上叁个epoch演练没有下降卡塔 尔(英语:State of Qatar),则经过patience个epoch后停下练习。 
    (2卡塔尔国mode:‘auto’,‘min’,‘max’之风流倜傥,在min情势下,借使检查评定值截止下滑则中止训练。在max形式下,当检验值不再回升则结束练习。

  • 模型检查点ModelCheckpoint  
    (1)save_best_only:当设置为True时,将只保留在验证集上品质最佳的模型 
    (2)
    mode:‘auto’,‘min’,‘max’之一,在save_best_only=True时决定品质最棒模型的评议法规,举个例子,当监测值为val_acc时,方式应该为max,当检查实验值为val_loss时,情势应为min。在auto形式下,评价准则由被监测值的名字自动测算。 
    (3)save_weights_only:若设置为True,则只保留模型权重,不然将保留整个模型(包涵模型结构,配置消息等卡塔 尔(阿拉伯语:قطر‎ 
    (4卡塔尔国period:CheckPoint之间的区间的epoch数

  • 可视化tensorboard write_images: 是还是不是将模型权重以图表的款式可视化

别的内容可参照keras汉语文书档案

.


3.1 样板数量的备选

透过管理的期货特征数据存款和储蓄在 股票(stock卡塔 尔(阿拉伯语:قطر‎名.csv文件中,相仿下图:

豆蔻年华、Sequential 序贯模型

序贯模型是函数式模型的简略版,为最简便易行的线性、原原本本的协会顺序,不分开。

从云南总结年鉴中募集了1988-二〇〇五年海南省农田有效灌注面积的总计数据[10]。为了减少预测模型的复杂程度,接收峰值法对这一个多少举行了归风姿罗曼蒂克化管理。将归后生可畏化后的一九八七-二零一零年数码作为练习样品,二零一零年数目作为核查样品。

 金沙国际唯一官网网址 5

Sequential模型的基本组件

诚如必要:

  • 1、model.add,添加层;
  • 2、model.compile,模型练习的BP情势设置;
  • 3、model.fit,模型练习参数设置 + 练习;
  • 4、模型评估
  • 5、模型预测

规定预测模型每趟的输入样板中隐含6个数据,即用屡次三番6年的多少预测第四年的多寡。据此可构建练习时的输入样品矩阵(6×18卡塔尔和输出样板向量(1×18卡塔 尔(英语:State of Qatar)。

图中的特征顺序为:日期,大单净流入,中单净流入,小单净流入,上涨或下落幅,最高升幅,最高降低的幅度,换另一只手率,股价。股价在这里边的用途是东挪西撮练习样品输出时,计算多日的总上涨或下跌幅。

1. add:添加层——train_val.prototxt

add(self, layer)

# 譬如:
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dropout(0.25))

 

add里面独有层layer的源委,当然在序贯式里面,也能够model.add(other_model卡塔 尔(阿拉伯语:قطر‎加载此外模型,在函数式里面就不太相通,详见函数式。

3.2 预测模型基本参数的鲜明与教练

注:在对源数据开展管理的时候,平日会碰到空值难题:即,某些特征值为0的时候,系统提交的源数据为”-”或”“。需求开展超过常规规管理。(平常遇见新上市股票(stock卡塔尔第一天的涨降低的幅度为空,或某交易日大单净流入为空。)

2、compile 操练形式——solver.prototxt文件

compile(self, optimizer, loss, metrics=None, sample_weight_mode=None)

 

其中: 
optimizer: 字符串(预订义优化器名卡塔尔国或优化器对象,参谋优化器 
loss: 字符串(预订义损失函数名卡塔尔国或目的函数,参谋损失函数 
metrics:
列表,满含评估模型在教练和测量检验时的互联网质量的目标,规范用法是metrics=[‘accuracy’] 
sample_weight_mode:若是你要求定时间步为样板赋权(2D权矩阵卡塔尔国,将该值设为“temporal”。 
默感到“None”,代表按样板赋权(1D权卡塔尔国。在底下fit函数的讲明中有相关的参阅剧情。 
kwargs:
使用TensorFlow作为后端请忽视该参数,若使用Theano作为后端,kwargs的值将会传送给
K.function

注意: 
模型在使用前必得编写翻译,不然在调用fit或evaluate时会抛出非凡。

1卡塔 尔(英语:State of Qatar)BP神经网络基本参数的规定与练习。分明BP神经互联网的包蕴层数为1,输入层神经元数为6,输出层神经元数为1,隐含层神经元数为11。隐含层和输出层的鼓劲函数分别选拔正切型Sigmoid函数和对数型Sigmoid函数。为了加强收敛速度,练习时采取了Levenberg-Marquardt数值优化算法。

1     if fin_temp.ix[day,12]=='-' or  fin_temp.ix[day,12]=='':  # 新股的涨跌幅一栏会出现'','-',需要特殊处理
2         raise_value = 0.0
3     else:
4         raise_value = float(fin_temp.ix[day,12])

3、fit 模型练习参数+训练——train.sh+soler.prototxt(部分卡塔尔

fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

 

本函数将模型操练nb_epoch轮,其参数有:

  • x:输入数据。要是模型只有一个输入,那么x的类型是numpy 
    array,假使模型有多个输入,那么x的花色应当为list,list的成分是对应于种种输入的numpy
    array
  • y:标签,numpy array
  • batch_size:整数,钦赐实行梯度下跌时每一种batch包涵的样板数。演练时贰个batch的样品会被计算叁遍梯度下跌,使目的函数优化一步。
  • epochs:整数,练习的轮数,每一个epoch会把练习集轮叁回。
  • verbose:日志展现,0为不在规范输出流输出日志音信,1为出口进度条记录,2为各样epoch输出生龙活虎行记录
  • callbacks:list,个中的因素是keras.callbacks.Callback的对象。那个list中的回调函数将会在教练进度中的适当时机被调用,参谋回调函数
  • validation_split:0~1之间的浮点数,用来内定演练集的早晚比例数据作为验证集。验证集将不参与演练,并在各样epoch结束后测量检验的模子的目的,如损失函数、准确度等。注意,validation_split的分割在shuffle在此以前,因而假如您的多寡小编是稳步的,须要先手工打乱再钦点validation_split,不然大概会冒出验证集样板不均匀。
  • validation_data:方式为(X,y卡塔尔的tuple,是点名的验证集。此参数将蒙蔽validation_spilt。
  • shuffle:布尔值或字符串,日常为布尔值,表示是还是不是在教练进程中随心所欲打乱输入样品的逐风流浪漫。若为字符串“batch”,则是用来管理HDF5数据的特别规情况,它将要batch内部将数据打乱。
  • class_weight:字典,将差别的种类映射为分化的权值,该参数用来在练习进度中调解损失函数(只可以用来演练卡塔 尔(英语:State of Qatar)
  • sample_weight:权值的numpy 
    array,用于在锻练时调度损失函数(仅用于练习卡塔 尔(阿拉伯语:قطر‎。可以传递叁个1D的与范本等长的向量用于对样品实行1对1的加权,只怕在面对时序数据时,传递一个的格局为(samples,sequence_length卡塔 尔(英语:State of Qatar)的矩阵来为各样时刻步上的样本赋不一样的权。这种状态下请显明在编写翻译模型时增加了sample_weight_mode=’temporal’。
  • initial_epoch:
    从该参数钦定的epoch最早练习,在后续早前的演习时有用。

fit函数重返一个History的靶子,其History.history属性记录了损失函数和其它指标的数值随epoch变化的景色,假若有验证集的话,也带有了验证集的那几个指标转移景况 
注意: 
要与后来的fit_generator做区别,两个输入x/y分裂。

2卡塔 尔(阿拉伯语:قطر‎匡助向量机基本参数的规定与演习。采纳Epsilon型帮助向量机回归算法,经过每每考试,鲜明拉格朗日乘子上界为5,不敏感函数取值为0.000
01,核函数采纳高斯型,高斯核函数的增长幅度取0.15。

 

4.evaluate 模型评估

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

 

本函数按batch总计在一些输入数据上模型的抽样误差,其参数有:

  • x:输入数据,与fit相符,是numpy array或numpy array的list
  • y:标签,numpy array
  • batch_size:整数,含义同fit的同名参数
  • verbose:含义同fit的同名参数,但一定要取0或1
  • sample_weight:numpy array,含义同fit的同名参数

本函数重返贰个测验绝对误差的标量值(即使模型未有其它评价目标卡塔尔,或三个标量的list(要是模型还恐怕有任何的评论和介绍指标卡塔 尔(阿拉伯语:قطر‎。model.metrics_names将付出list中逐个值的意义。

若无异样表达,以下函数的参数均保持与fit的同名参数相仿的含义 
假设未有新鲜说明,以下函数的verbose参数(假若有卡塔 尔(英语:State of Qatar)均只好取0或1

4 预测与分析

 二.练习样品拼接

5 predict 模型评估

predict(self, x, batch_size=32, verbose=0)
predict_classes(self, x, batch_size=32, verbose=1)
predict_proba(self, x, batch_size=32, verbose=1)

本函数按batch拿到输入数据对应的出口,其参数有:

函数的再次来到值是预测值的numpy array 
predict_classes:本函数按batch产生输入数据的品类预测结果; 
predict_proba:本函数按batch发生输入数据归于各种品类的概率

4.1 三种模型预测技能比较

        
首先设置二个滑行窗口,本次实验员长滑动窗口设置为五10个交易日。每几个演习样品由肆21个延续的交易日组成,各个交易日的数据满含上述的四个特征,即贰个50*7的矩阵,而二个样板的输出则是八个交易日之后的收盘价相比后天(即样品的输入中最终一个交易日)收盘价的上涨或下降低的幅度,设置其上限为0.3,下限为-0.3(当然,一而再八个涨到结束板的大幅会超过0.3,这里将其联合视作0.3)。之所以接收多个交易日之后的上涨或下跌幅作为练习样品的输出,是因为本国股市是T+1操作准绳,当日购入不可卖出,预测的有个别靠后有的可留有操作空间;再有就是一天的拉升/砸盘不经常性太大,不易预测,对某些长时间一点的现象开展张望有着越来越高的稳定。

6 on_batch 、batch的结果,检查

train_on_batch(self, x, y, class_weight=None, sample_weight=None)
test_on_batch(self, x, y, sample_weight=None)
predict_on_batch(self, x)
  • train_on_batch:本函数在一个batch的数量上拓宽二回参数更新,函数重临练习基值误差的标量值或标量值的list,与evaluate的场馆同样。
  • test_on_batch:本函数在三个batch的样品上对模型进行评估,函数的回来与evaluate的意况相像
  • predict_on_batch:本函数在三个batch的样品上对模型进行测量试验,函数重回模型在三个batch上的估摸结果

使用演练停止的三种预测模型仿真预测一九九五-贰零壹零年的山西省木浦有效灌水面积并开展反归风流罗曼蒂克化管理。反归风流倜傥化后的各预测值、预测固有误差的相对值和瞭望舍入相对误差的相对化值见表1。从表1能够见见,补助向量机的各预测值与实际值更为挨近,其猜测抽样误差的相对平均值、预测舍入基值误差的绝对化平均值都远低于BP神经互连网预测结果的应和参数。图第11中学的各预测数据也全部通过了归意气风发化管理,从图第11中学1995-二〇一〇某些也足以看来,扶助向量机的预测值基本和实际值重合在生机勃勃道,而BP神经网络的预测值在部分地点则与实际值相差非常大,表明基于帮衬向量机的预测模型泛化本事越来越强。
利用那三种预测模型分别预测作为查验样品的二零零六年黑龙江省农田有效灌水面积,反归风流倜傥化后的前瞻结果如表2和图1所示。从表2和图1能够看来,基于帮助向量机的预测模型在印证样品处的实在预测精度也远超过BP神经网络,其预测零值误差仅为BP神经互联网预测标称误差的11.8%。

  归意气风发化相关职业:因为神经互连网激活函数的限量,须要在教练前将数据映射到0~1区间。本次考试中,对近八年的数码,获取其每一项特色的最大值与纤维值。设置归风流洒脱化与函数,在样品拼接的还要将数据开展归风度翩翩化。

7 fit_generator

#利用Python的生成器,逐个生成数据的batch并进行训练。
#生成器与模型将并行执行以提高效率。
#例如,该函数允许我们在CPU上进行实时的数据提升,同时在GPU上进行模型训练
# 参考链接:http://keras-cn.readthedocs.io/en/latest/models/sequential/

 

有了该函数,图像分类操练义务变得异常的粗略。

fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_q_size=10, workers=1, pickle_safe=False, initial_epoch=0)

# 案例:
def generate_arrays_from_file(path):
    while 1:
            f = open(path)
            for line in f:
                # create Numpy arrays of input data
                # and labels, from each line in the file
                x, y = process_line(line)
                yield (x, y)
        f.close()

model.fit_generator(generate_arrays_from_file('/my_file.txt'),
        samples_per_epoch=10000, epochs=10)

 

其余的五个帮扶的从头到尾的经过:

evaluate_generator(self, generator, steps, max_q_size=10, workers=1, pickle_safe=False)
predict_generator(self, generator, steps, max_q_size=10, workers=1, pickle_safe=False, verbose=0)

 

evaluate_generator:本函数使用三个生成器作为数据源评估模型,生成器应重返与test_on_batch的输入数据大器晚成致类其余多寡。该函数的参数与fit_generator同名参数含义相近,steps是生成器要赶回数据的轮数。 
predcit_generator:本函数使用三个生成器作为数据源预测模型,生成器应重回与test_on_batch的输入数据风度翩翩致档案的次序的数码。该函数的参数与fit_generator同名参数含义雷同,steps是生成器要回到数据的轮数。

4.2 黑龙江省“十五五”时期农田有效灌水面积的展望与解析

样本 输入的归意气风发化:

案例一:简单的2分类

For a single-input model with 2 classes (binary classification):

from keras.models import Sequential
from keras.layers import Dense, Activation

#模型搭建阶段
model= Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
# Dense(32) is a fully-connected layer with 32 hidden units.
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

其中: 
Sequential()代表类的早先化; 
Dense代表全连接层,那个时候有叁十七个全连接层,最后接relu,输入的是100维度 
model.add,增加新的全连接层, 
compile,跟prototxt同样,一些练习参数,solver.prototxt

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, nb_epoch =10, batch_size=32)

 

前面报过那样的荒唐,是因为版本的主题素材。 版本1.第22中学间是nb_各自授予一定的权重来对多年来的股票价格举行预测,也是本国各市点制定水利发展设计的根本目的之黄金时代。epoch
,而keras2.0是epochs = 10

 error:
    TypeError: Received unknown keyword arguments: {'epochs': 10}

 

其中: 
epoch=batch_size * iteration,10次epoch代表练习十一回训练集

终极代码是基于keras ==1.2

# -*- coding:utf-8 -*-

from keras.models import Sequential
from keras.layers import Dense, Activation

#模型搭建阶段
model= Sequential()#最简单的线性、从头到尾的结构顺序,不分叉
model.add(Dense(32, activation='relu', input_dim=100))
# Dense(32) is a fully-connected layer with 32 hidden units.
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, nb_epoch =10, batch_size=32)

 

 

实则,预测结果是在存活法规的功底上从数据种类的角度打开的前瞻,借使在“十九五”时期,政坛小幅加多水利行业的资金投入,最终的升高状态将会比该预测结果越来越好。

 1 def normalize_oneday(stockN,fdata,day):
 2     max_min = list(max_min_list[stockN])
 3     in_1 = (fdata.ix[day,1]-max_min[1])/(max_min[0]-max_min[1])
 4     in_2 = (fdata.ix[day,2]-max_min[3])/(max_min[2]-max_min[3])
 5     in_3 = (fdata.ix[day,3]-max_min[5])/(max_min[4]-max_min[5])
 6     in_4 = (fdata.ix[day,4]-max_min[7])/(max_min[6]-max_min[7])
 7     in_5 = (fdata.ix[day,5]-max_min[9])/(max_min[8]-max_min[9])
 8     in_6 = (fdata.ix[day,6]-max_min[11])/(max_min[10]-max_min[11])
 9     in_7 = (fdata.ix[day,7]-max_min[13])/(max_min[12]-max_min[13])
10     return [in_1,in_2,in_3,in_4,in_5,in_6,in_7]

案例二:多分类-VGG的卷积神经网络

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD
from keras.utils import np_utils

# Generate dummy data
x_train = np.random.random((100, 100, 100, 3))
# 100张图片,每张100*100*3
y_train = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
# 100*10
x_test = np.random.random((20, 100, 100, 3))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(20, 1)), num_classes=10)
# 20*100

model = Sequential()
# input: 100x100 images with 3 channels -> (100, 100, 3) tensors.
# this applies 32 convolution filters of size 3x3 each.
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)

model.fit(x_train, y_train, batch_size=32, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=32)

 

标准序贯网络,标签的教练形式 
注意: 
此间足够关键的少数,对于自身那样的生手,这一步的成效?

keras.utils.to_categorical

 

特别是多分类时候,笔者事先认为输入的正是一列(100,卡塔 尔(阿拉伯语:قطر‎,可是keras在多分类职分中是不认知这么些的,所以须求再增添这一步,让其转会为Keras认得的多少格式。

 

末尾代码基于Keras==2.0

# -*- coding:utf-8 -*-


import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD
from keras.utils import np_utils

# Generate dummy data
x_train = np.random.random((100, 100, 100, 3))
# 100张图片,每张100*100*3
y_train = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
# 100*10
x_test = np.random.random((20, 100, 100, 3))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(20, 1)), num_classes=10)
# 20*100

model = Sequential()#最简单的线性、从头到尾的结构顺序,不分叉
# input: 100x100 images with 3 channels -> (100, 100, 3) tensors.
# this applies 32 convolution filters of size 3x3 each.
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)

model.fit(x_train, y_train, batch_size=32, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=32)

 

在对田地有效灌水面积实行前瞻时,数据连串预测法比结构式预测法更为轻松易行。在各个数据系列预测方法中,神经网络预测方法和基于扶植向量机的预测方法特别符合农田有效灌水面积的非线性别变化化规律。

样本 输出的归大器晚成化与反归生龙活虎化:

案例三:使用LSTM的行列分类

具体的专门有链接来写:

.


钻探指向性BP神经互连网和支撑向量机两种预测方法实行了相比较解析。理论斟酌声明,基于扶助向量机的张望方法能够制服BP神经网络的浩大短处,具备优质性。

def normalize_raise(volume):
    norm_value = (volume+0.3)/0.6
    if norm_value>1:
        norm_value = 1   #涨跌幅超过30%的都定义为 1或0
    elif norm_value<0:
        norm_value = 0
    return norm_value
def denormalize_raise(value):
    volume = value*0.6-0.3
    return volume

三、Model式模型

出自keras中文文书档案: 
比序贯模型要复杂,可是意义很好,能够同不常候/分品级输入变量,分等第输出想要的模型; 
一句话,只要您的模子不是相近VGG同样一条路走到黑的模子,也许您的模子必要多于三个的输出,那么你总应该接纳函数式模型。

差别之处: 
挥洒结构完全分歧样

以黑龙江省1986-二〇一〇年的农田有效灌溉面积总括数据为基本功,详细阐释了运用二种预测方法创设预测模型的进度,并扩充了采用注解。验证结果证明,基于协助向量机的预测方法具备越来越好的泛化技能,预测精度更加高。最后获得了河北省“十八五”时期农田有效灌注面积的前瞻数据并提议了其发展趋势。

         设置滑动窗口sample_window =
[],每一趟遍历豆蔻梢头行特征数据,归意气风发化后插入窗口末尾,当窗口大春分50时,总计3天后上涨或下落低的幅度,拼接出一个训练样品,并将sample_window中第叁个交易日的值弹出。

函数式模型Kit品质与教练流程

诚如供给: 
1、model.layers,增添层音信;  
2、model.compile,模型练习的BP情势设置; 
3、model.fit,模型锻炼参数设置 + 练习; 
4、evaluate,模型评估; 
5、predict 模型预测

1 normalized_daily_sample = normalize_oneday(stockN_list_str[i],fin_temp,day)
2 # TODO 给样本插入该日数据
3 sample_window.append(normalized_daily_sample)   #存入一个样本list,特征数为7,全部归一化完毕
4 if len(sample_window)==window_len:  # 窗口大小满50
5     #TODO 需要对涨幅进行归一化 暂定 30% TODO
6     raise_3days = normalize_raise(float(fin_temp.ix[day+3,8])/float(fin_temp.ix[day,8])-1.0)
7     samples.append([sample_window,raise_3days])
8     sample_window = sample_window[1:]

1 常用Model属性

model.layers:组成模型图的各个层
model.inputs:模型的输入张量列表
model.outputs:模型的输出张量列表

 

遍历完全部数据行后,得到数百个训练样品。并将锻炼样板转存为numpy.array格式以方便练习。

2 compile 练习形式设置——solver.prototxt

compile(self, optimizer, loss, metrics=None, loss_weights=None, sample_weight_mode=None)

 

本函数编写翻译模型以供练习,参数有

optimizer:优化器,为预订义优化器名或优化器对象,仿照效法优化器 
loss:损失函数,为预约义损失函数名或三个对象函数,参考损失函数 
metrics:列表,包罗评估模型在教练和测验时的属性的目的,标准用法是metrics=[‘accuracy’]设若要在多输出模型中为差异的输出钦定不相同的目标,可像该参数字传送递叁个字典,举个例子metrics={‘ouput_a’:
‘accuracy’} 
sample_weight_mode:倘令你必要定期间步为样品赋权(2D权矩阵卡塔 尔(阿拉伯语:قطر‎,将该值设为“temporal”。默感到“None”,代表按样板赋权(1D权卡塔尔国。 
若果模型有五个出口,能够向该参数字传送入钦赐sample_weight_mode的字典或列表。在下边fit函数的讲授中有有关的参照剧情。

【Tips】假如你只是载入模型并采纳其predict,能够不用进行compile。在Keras中,compile主要产生损失函数和优化器的某个配置,是为教练服务的。predict会在其间实行标识函数的编写翻译专门的学业(通过调用_make_predict_function生成函数卡塔 尔(英语:State of Qatar)

 注:跳点难题,具体分为除权(涨下跌的幅度超过十分之一)与停盘(相邻交易日间距超越10天)。对于跳点难点,大家看清其是或不是发生,风流倜傥旦产生跳点,就清空sample_window,从下贰个交易日重新初叶思量样品输入,以梗塞样板输入中有跳点数据。

3 fit 模型训练参数设置 + 操练

fit(self, x=None, y=None, batch_size=32, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

 

本函数用以练习模型,参数有:

  • x:输入数据。就算模型唯有三个输入,那么x的等级次序是numpy 
    array,假诺模型有七个输入,那么x的类型应当为list,list的因素是对应于各类输入的numpy 
    array。假如模型的种种输入都知名字,则能够流传三个字典,将输入名与其输入数据对应起来。
  • y:标签,numpy array。借使模型有多个出口,能够流传一个numpy 
    array的list。假诺模型的出口拥有名字,则能够流传三个字典,将输盛名与其标签对应起来。
  • batch_size:整数,内定进行梯度下落时每种batch包括的样板数。演习时三个batch的样板会被总括二回梯度下跌,使指标函数优化一步。
  • nb_epoch:整数,练习的轮数,操练多元帅会被遍历nb_epoch次。Keras中nb初叶的变量均为”number
    of”的乐趣
  • verbose:日志呈现,0为不在标准输出流输出日志音信,1为出口进程条记录,2为各样epoch输出风度翩翩行记录
  • callbacks:list,当中的元素是keras.callbacks.Callback的对象。那么些list中的回调函数将会在练习进程中的适当时机被调用,参照他事他说加以考察回调函数
  • validation_split:0~1之间的浮点数,用来钦定练习集的早晚比例数据作为验证集。验证集将不参加练习,并在种种epoch甘休后测验的模子的指标,如损失函数、准确度等。注意,validation_split的划分在shuffle之后,由此只要你的数量笔者是稳步的,须要先手工业打乱再钦赐validation_split,不然大概会合世验证集样板不均匀。
  • validation_data:形式为(X,y)或(X,y,sample_weights卡塔 尔(英语:State of Qatar)的tuple,是点名的验证集。此参数将掩瞒validation_spilt。
  • shuffle:布尔值,表示是或不是在练习进度中各种epoch前随便打乱输入样品的次第。
  • class_weight:字典,将不一样的品类映射为差异的权值,该参数用来在教练进程中调度损失函数(只可以用来演练卡塔尔。该参数在管理非平衡的教练多少(有些类的练习样品数超级少卡塔 尔(英语:State of Qatar)时,能够使得损失函数对样板数不足的数码进一层体贴。
  • sample_weight:权值的numpy 
    array,用于在教练时调度损失函数(仅用于练习卡塔尔国。能够传递二个1D的与范本等长的向量用于对样板实行1对1的加权,可能在濒有时序数据时,传递一个的款式为(samples,sequence_length卡塔 尔(阿拉伯语:قطر‎的矩阵来为各样时刻步上的样品赋区别的权。这种状态下请分明在编写翻译模型时增添了sample_weight_mode=’temporal’。
  • initial_epoch:
    从该参数钦定的epoch早先演习,在一而再再而三以前的练习时有用。

输入数据与分明数额不匹配时会抛出怪诞

fit函数再次来到贰个History的对象,其History.history属性记录了损失函数和别的目标的数值随epoch变化的气象,假诺有验证集的话,也含有了验证集的那一个目标变化情状

1 # 间隔日期大于10天,即day+3大于12天,判断为有停盘,不连续,或者涨跌幅异常(超过10.5%),不能作为训练样本序列, 
2 if int(diff/(24*3600))>12 or abs(raise_value)>10.5:  
3     sample_window = []

4.evaluate,模型评估

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

 

本函数按batch计算在少数输入数据上模型的基值误差,其参数有:

  • x:输入数据,与fit形似,是numpy array或numpy array的list
  • y:标签,numpy array
  • batch_size:整数,含义同fit的同名参数
  • verbose:含义同fit的同名参数,但只好取0或1
  • sample_weight:numpy array,含义同fit的同名参数

本函数再次回到三个测量检验抽样误差的标量值(固然模型未有别的评价目标卡塔尔国,或三个标量的list(如若模型还大概有任何的褒贬目的卡塔尔国。model.metrics_names将付出list中逐豆蔻梢头值的意义。

万风度翩翩未有优异表明,以下函数的参数均保持与fit的同名参数相像的含义 
若无极其表明,以下函数的verbose参数(要是有卡塔尔均只好取0或1

 

5.predict 模子预测

predict(self, x, batch_size=32, verbose=0)

 

本函数按batch获得输入数据对应的输出,其参数有:

函数的重临值是预测值的numpy array

三.搭建立模型型

模型检查 on_batch

train_on_batch(self, x, y, class_weight=None, sample_weight=None)
test_on_batch(self, x, y, sample_weight=None)
predict_on_batch(self, x)

train_on_batch:本函数在一个batch的多寡上举行贰遍参数更新,函数再次来到锻炼测量误差的标量值或标量值的list,与evaluate的境况相近。 

test_on_batch:本函数在叁个batch的样品上对模型进行业评比估,函数的回到与evaluate的情况相通; 
predict_on_batch:本函数在叁个batch的样板上对模型进行测验,函数重回模型在一个batch上的远望结果

        
这里运用keras深度学习框架对模型举办高效搭建。建设构造Sequential模型,向里面增加LSTM层,设定Dropout为0.2,参与Dense层将其维度聚合为1,激活函数使用relu,损失函数定为交叉熵函数。在此之前也应用过古板的sigmoid作为激活函数,但经试验认为效能不及relu。

_generator

fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_q_size=10, workers=1, pickle_safe=False, initial_epoch=0)
evaluate_generator(self, generator, steps, max_q_size=10, workers=1, pickle_safe=False)

www.2979.com , 

1 model = Sequential()
2 model.add(LSTM(128, input_shape=(window_len,7), return_sequences=False))  # TODO: input_shape=(timesteps ,data_dim)
3 model.add(Dropout(0.2))
4 model.add(Dense(1))
5 model.add(Activation('relu'))
6 model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])

案例黄金时代:轻松的单层-全连接网络

from keras.layers import Input, Dense
from keras.models import Model

# This returns a tensor
inputs = Input(shape=(784,))

# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
# 输入inputs,输出x
# (inputs)代表输入
x = Dense(64, activation='relu')(x)
# 输入x,输出x
predictions = Dense(10, activation='softmax')(x)
# 输入x,输出分类

# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(data, labels)  # starts training

 

其中: 
能够观望结构与序贯模型完全不肖似,此中x = Dense(64,
activation=’relu’)(inputs)中:(input)代表输入;x代表输出 
model = Model(inputs=inputs,
outputs=predictions);该句是函数式模型的精粹,能够同一时间输入八个input,然后输出output四个模型

  模型搭建完成,使用在此以前得到的数百个练习样品张开练习,并保存模型。

案例二:录像拍卖

x = Input(shape=(784,))
# This works, and returns the 10-way softmax we defined above.
y = model(x)
# model里面存着权重,然后输入x,输出结果,用来作fine-tuning

# 分类->视频、实时处理
from keras.layers import TimeDistributed

# Input tensor for sequences of 20 timesteps,
# each containing a 784-dimensional vector
input_sequences = Input(shape=(20, 784))
# 20个时间间隔,输入784维度的数据

# This applies our previous model to every timestep in the input sequences.
# the output of the previous model was a 10-way softmax,
# so the output of the layer below will be a sequence of 20 vectors of size 10.
processed_sequences = TimeDistributed(model)(input_sequences)
# Model是已经训练好的

 

其中: 
Model是早已训练好的,以往用来做动迁学习; 
在这之中还可以经过TimeDistributed来进展实时预测; 
TimeDistributed(model)(input_sequences),input_sequences代表连串输入;model代表已演练的模型

1 hist = model.fit(trainX,trainY,batch_size=1,epochs=50)
2 score = model.evaluate(trainX, trainY, batch_size=10)
3 if os.path.exists('./model/'+file_name[:-5]):
4     model.save('./model/'+file_name[:-5]+'/model_%s_%s.h5'%(window_len,date))  # HDF5 保存模型
5 else:
6     os.mkdir('./model/'+file_name[:-5])
7     model.save('./model/'+file_name[:-5]+'/model_%s_%s.h5'%(window_len,date)) 

案例三:双输入、双模子输出:LSTM 时序预测

该案例很好,能够了然到Model的精粹在于他的大肆性,给编译者比较多的造福。

输入: 
资源新闻语言材质;新闻语言材质对应的年月 
输出: 
情报语言材质的测度模型;消息语言质地+对适那时候间的张望模型 
金沙国际唯一官网网址 6

 

模型意气风发:只针对音讯语言质感的LSTM模型

from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model

# Headline input: meant to receive sequences of 100 integers, between 1 and 10000.
# Note that we can name any layer by passing it a "name" argument.
main_input = Input(shape=(100,), dtype='int32', name='main_input')
# 一个100词的BOW序列

# This embedding layer will encode the input sequence
# into a sequence of dense 512-dimensional vectors.
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
# Embedding层,把100维度再encode成512的句向量,10000指的是词典单词总数


# A LSTM will transform the vector sequence into a single vector,
# containing information about the entire sequence
lstm_out = LSTM(32)(x)
# ? 32什么意思?????????????????????

#然后,我们插入一个额外的损失,使得即使在主损失很高的情况下,LSTM和Embedding层也可以平滑的训练。

auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
#再然后,我们将LSTM与额外的输入数据串联起来组成输入,送入模型中:
# 模型一:只针对以上的序列做的预测模型

 

四.功力突显

组成模型:新闻语言材质+时序

# 模型二:组合模型
auxiliary_input = Input(shape=(5,), name='aux_input')  # 新加入的一个Input,5维度
x = keras.layers.concatenate([lstm_out, auxiliary_input])   # 组合起来,对应起来


# We stack a deep densely-connected network on top
# 组合模型的形式
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
# And finally we add the main logistic regression layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)


#最后,我们定义整个2输入,2输出的模型:
model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])
#模型定义完毕,下一步编译模型。
#我们给额外的损失赋0.2的权重。我们可以通过关键字参数loss_weights或loss来为不同的输出设置不同的损失函数或权值。
#这两个参数均可为Python的列表或字典。这里我们给loss传递单个损失函数,这个损失函数会被应用于所有输出上。

 

其中:Model(inputs=[main_input, auxiliary_input],
outputs=[main_output, auxiliary_金沙国际唯一官网网址 ,output])是核心, 
Input八个内容,outputs五个模型

# 训练方式一:两个模型一个loss
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
              loss_weights=[1., 0.2])
#编译完成后,我们通过传递训练数据和目标值训练该模型:

model.fit([headline_data, additional_data], [labels, labels],
          epochs=50, batch_size=32)

# 训练方式二:两个模型,两个Loss
#因为我们输入和输出是被命名过的(在定义时传递了“name”参数),我们也可以用下面的方式编译和训练模型:
model.compile(optimizer='rmsprop',
              loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},
              loss_weights={'main_output': 1., 'aux_output': 0.2})

# And trained it via:
model.fit({'main_input': headline_data, 'aux_input': additional_data},
          {'main_output': labels, 'aux_output': labels},
          epochs=50, batch_size=32)

 

因为输入八个,输出七个模型,所以能够分成设置差异的模子训练参数

  最先的时候,小编对富有的证券的演练样品聚积到一块儿,演习出二个大模型(貌似这时有9万七个演习样板,整整编训练练了一天=,=),之后对各类股票都实行预测,妄想搜索前些天拉长率最高的前5支期货(Futures卡塔 尔(英语:State of Qatar)。后来察觉根本做不到……每支期货(Futures卡塔 尔(阿拉伯语:قطر‎的操作原理都不肖似,使用单个模型不可能有效的把握个人股的沉降趋向。

案例四:分享层:对应涉及、近似性

叁个节点,分成多个支行出去

import keras
from keras.layers import Input, LSTM, Dense
from keras.models import Model

tweet_a = Input(shape=(140, 256))
tweet_b = Input(shape=(140, 256))
#若要对不同的输入共享同一层,就初始化该层一次,然后多次调用它
# 140个单词,每个单词256维度,词向量
# 

# This layer can take as input a matrix
# and will return a vector of size 64
shared_lstm = LSTM(64)
# 返回一个64规模的向量

# When we reuse the same layer instance
# multiple times, the weights of the layer
# are also being reused
# (it is effectively *the same* layer)
encoded_a = shared_lstm(tweet_a)
encoded_b = shared_lstm(tweet_b)

# We can then concatenate the two vectors:
    # 连接两个结果
    # axis=-1?????
merged_vector = keras.layers.concatenate([encoded_a, encoded_b], axis=-1)

# And add a logistic regression on top
predictions = Dense(1, activation='sigmoid')(merged_vector)
# 其中的1 代表什么????

# We define a trainable model linking the
# tweet inputs to the predictions
model = Model(inputs=[tweet_a, tweet_b], outputs=predictions)

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit([data_a, data_b], labels, epochs=10)
# 训练模型,然后预测

 

  之后,小编独自行选购了华夏软件那几个股票(这一个票看起来像庄家主导的这种),对它独自进行解析。使用了一年半的交易数据作为锻练集,共有2玖拾叁个训练样板,锻炼1叁拾五个epoch。最终练习出模型对测量检验集中的伍19个测量检验样品进行表明。预测相对误差如下图。

案例五:收取层节点内容

# 1、单节点
a = Input(shape=(140, 256))
lstm = LSTM(32)
encoded_a = lstm(a)
assert lstm.output == encoded_a
# 抽取获得encoded_a的输出张量

# 2、多节点
a = Input(shape=(140, 256))
b = Input(shape=(140, 256))

lstm = LSTM(32)
encoded_a = lstm(a)
encoded_b = lstm(b)

assert lstm.get_output_at(0) == encoded_a
assert lstm.get_output_at(1) == encoded_b

# 3、图像层节点
# 对于input_shape和output_shape也是一样,如果一个层只有一个节点,
#或所有的节点都有相同的输入或输出shape,
#那么input_shape和output_shape都是没有歧义的,并也只返回一个值。
#但是,例如你把一个相同的Conv2D应用于一个大小为(3,32,32)的数据,
#然后又将其应用于一个(3,64,64)的数据,那么此时该层就具有了多个输入和输出的shape,
#你就需要显式的指定节点的下标,来表明你想取的是哪个了
a = Input(shape=(3, 32, 32))
b = Input(shape=(3, 64, 64))

conv = Conv2D(16, (3, 3), padding='same')
conved_a = conv(a)

# Only one input so far, the following will work:
assert conv.input_shape == (None, 3, 32, 32)

conved_b = conv(b)
# now the `.input_shape` property wouldn't work, but this does:
assert conv.get_input_shape_at(0) == (None, 3, 32, 32)
assert conv.get_input_shape_at(1) == (None, 3, 64, 64)

 

 金沙国际唯一官网网址 7

案例六:视觉问答模型

#这个模型将自然语言的问题和图片分别映射为特征向量,
#将二者合并后训练一个logistic回归层,从一系列可能的回答中挑选一个。
from keras.layers import Conv2D, MaxPooling2D, Flatten
from keras.layers import Input, LSTM, Embedding, Dense
from keras.models import Model, Sequential

# First, let's define a vision model using a Sequential model.
# This model will encode an image into a vector.
vision_model = Sequential()
vision_model.add(Conv2D(64, (3, 3) activation='relu', padding='same', input_shape=(3, 224, 224)))
vision_model.add(Conv2D(64, (3, 3), activation='relu'))
vision_model.add(MaxPooling2D((2, 2)))
vision_model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
vision_model.add(Conv2D(128, (3, 3), activation='relu'))
vision_model.add(MaxPooling2D((2, 2)))
vision_model.add(Conv2D(256, (3, 3), activation='relu', padding='same'))
vision_model.add(Conv2D(256, (3, 3), activation='relu'))
vision_model.add(Conv2D(256, (3, 3), activation='relu'))
vision_model.add(MaxPooling2D((2, 2)))
vision_model.add(Flatten())

# Now let's get a tensor with the output of our vision model:
image_input = Input(shape=(3, 224, 224))
encoded_image = vision_model(image_input)

# Next, let's define a language model to encode the question into a vector.
# Each question will be at most 100 word long,
# and we will index words as integers from 1 to 9999.
question_input = Input(shape=(100,), dtype='int32')
embedded_question = Embedding(input_dim=10000, output_dim=256, input_length=100)(question_input)
encoded_question = LSTM(256)(embedded_question)

# Let's concatenate the question vector and the image vector:
merged = keras.layers.concatenate([encoded_question, encoded_image])

# And let's train a logistic regression over 1000 words on top:
output = Dense(1000, activation='softmax')(merged)

# This is our final model:
vqa_model = Model(inputs=[image_input, question_input], outputs=output)

# The next stage would be training this model on actual data.

 

拉开风姿罗曼蒂克:fine-tuning时怎样加载No_top的权重

假若你需求加载权重到分歧的网络布局(某个层同样卡塔尔中,比如fine-tune或transfer-learning,你可以通过层名字来加载模型: 
model.load_weights(‘my_model_weights.h5’, by_name=True) 
例如:

生机勃勃经原模型为:

    model = Sequential()
    model.add(Dense(2, input_dim=3, name="dense_1"))
    model.add(Dense(3, name="dense_2"))
    ...
    model.save_weights(fname)

# new model
model = Sequential()
model.add(Dense(2, input_dim=3, name="dense_1"))  # will be loaded
model.add(Dense(10, name="new_dense"))  # will not be loaded

# load weights from first model; will only affect the first layer, dense_1.
model.load_weights(fname, by_name=True)

个中前三十八个是练习集中的样书,大家选取其输入部分开展预测,发现预测结果贴合十一分连贯;后六19个是大家测验集的样书,作者对其猜测效果照旧相比满足的,暴跌、猛涨基本都有揣测到,除了第67到第73个点那一波猛降预测的不佳。随后小编动用模型进行模拟交易,设定伊始费用五万元,在预测22日后会上升时购买,预测13日后会下降时卖出,均以收盘价为成交价格,买入时扣除十三分之2.5的薪水。收益曲线如下,浅蓝线条代表按模型进行贸易的收益,蟹青线条代表间接抱有期货的低收入。

金沙国际唯一官网网址 8

  能够见见,模型的预计效果依旧不错的。尤其是最早的20四个点,能够比较准确的避开一波回调下落。

  但本身也知道,对模型进行验证的范本数量依然太少,又过了贰个月,在附加搜聚了贰拾一个交易日的数码之后,笔者又对该样板进行了测量检验。

展望引用误差:

 金沙国际唯一官网网址 9

由上海体育地方能够看出,尾数二十一个交易日的这一波小幅度面,模型并从未能够预测到。

受益曲线:

 金沙国际唯一官网网址 10

  从上海体育地方能够看来,在灰白方框圈出来之处,模型数次揣测会有一波增长幅度,但紧跟着又马上预测股票价格要跌,对股票(stock卡塔 尔(阿拉伯语:قطر‎实行了抛售,错过了那五遍暴涨的机缘;在郎窑红方框圈出的地点,模型四次在极端做出了高精度的前瞻,精准抛售,躲过五回猛跌。

 

透过期货(Futures卡塔 尔(英语:State of Qatar)数量的验证,使用LSTM-卡宴NN来对股票(stock卡塔 尔(阿拉伯语:قطر‎举办展望具备一定的趋向,但效果欠好(假设效果好的话我推测也不会享受到英特网,本人闷声发大财啦,哈哈~~~)。

 

[1]R. Akita, A. Yoshihara, T. Matsubara and K. Uehara, “Deep learning
for stock prediction using numerical and textual information,” 2016
IEEE/ACIS 15th International Conference on Computer and Information
Science (ICIS)
, Okayama, 2016, pp. 1-6.     
()


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图