Kreas深度学习之LSTM
作者:互联网
1、使用 Keras Sequential 顺序模型
Sequential官网链接
Sequential模型表面意思是顺序模型,它是多个网络层的线性堆叠,可以构建非常复杂的神经网络,包括全连接神经网络、卷积神经网络(CNN)、循环神经网络(RNN)、等等。这里的Sequential更准确的应该理解为堆叠,通过堆叠许多层,构建出深度神经网络。
用法:你可以通过将定义的各个网络层实例组成的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型。也可以简单地使用 .add() 方法将各层添加到模型中,当然添加是有先后顺序的。
(1)指定输入数据的尺寸:input_shape,传递该参数给第一层。它是一个表示尺寸的元组 (一个整数或 None 的元组,其中 None 表示可能为任何正整数)。在 input_shape 中不包含数据的批量 batch 大小。某些 2维层,例如 Dense,支持通过参数 input_dim 指定输入尺寸,某些 3维 时序层支持 input_dim 和 input_length 参数。
(2)模型编译:compile,在训练模型之前,需要配置学习过程,这是通过 compile 方法完成的。它接收三个参数:
——优化器 optimizer。它可以是现有优化器的字符串标识符,如 rmsprop 或 adagrad
——损失函数 loss,模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如 categorical_crossentropy 或 mse,
——评估标准 metrics。对于任何分类问题,你都希望将其设置为 metrics = [‘accuracy’]
# 均方误差回归问题
model.compile(optimizer='rmsprop', loss='mse')
(3)模型训练:fit, 模型在输入数据和标签的 Numpy 矩阵上进行训练。为了训练一个模型,你通常会使用 fit 函数。
fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1)
参数说明:
x=None, 训练数据
y=None, 训练数据label标签
batch_size=None, 每经过多少个样本sample更新一次权重,defult 32
epochs=1, 训练的轮数epochs
verbose=1, 0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
callbacks=None, list,list中的元素为keras.callbacks.Callback对象,在训练过程中会调用list中的回调函数
validation_split=0., 浮点数0-1,将训练集中的一部分比例作为验证集,然后下面的验证集validation_data将不会起到作用validation_data=None, 验证集
shuffle=True, #布尔值和字符串,如果为布尔值,表示是否在每一次epoch训练前随机打乱输入样本的顺序,如果为"batch",为处理HDF5数据
class_weight=None, dict,分类问题的时候,有的类别可能需要额外关注,分错的时候给的惩罚会比较大,所以权重会调高,体现在损失函数上面
sample_weight=None, array,和输入样本对等长度,对输入的每个特征+个权值,如果是时序的数据,则采用(samples,sequence_length)的矩阵
initial_epoch=0, #如果之前做了训练,则可以从指定的epoch开始训练
steps_per_epoch=None, #将一个epoch分为多少个steps,也就是划分一个batch_size多大,比如steps_per_epoch=10,则就是将训练集分为10份,不能和batch_size共同使用validation_steps=None, 当steps_per_epoch被启用的时候才有用,验证集的batch_size
validation_freq 验证频率,当提供验证数据的时候,如果validation_freq= 8,则表示在验证职权训练8次。
(4)预测
predict:
predict(x, batch_size=None, verbose=0, steps=None, callbacks=None)
生成输入样本的输出预测。计算分批进行。
x:输入数据,作为Numpy数组(如果模型有多个输入,则为Numpy数组列表)。
2、核心网络层:Dense全连接层
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
units: 正整数,输出空间维度
Dense 实现了输出output的操作:
output = activation(dot(input, kernel) + bias),其中 activation 是按逐个元素计算的激活函数,kernel是由网络层创建的权值矩阵,以及 bias 是其创建的偏置向量(只在 use_bias 为 True 时才有用)。
3、循环层LSTM:
keras循环层Recurrnt链接
(1)RNN 循环神经网络层基类
(2)SimpleRNN 全连接的 RNN,其输出将被反馈到输入
(3)GRU 门限循环单元网络(Gated Recurrent Unit)
(4)LSTM 长短期记忆网络层(Long Short-Term Memory)等等。。。
LSTM:
keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
参数
units: 正整数,输出空间的维度。也就是短时记忆为几个单元组成。
activation: 要使用的激活函数如果传入 None,则不使用激活函数
recurrent_activation: 用于循环时间步的激活函数默认:分段线性近似 sigmoid (hard_sigmoid)。如果传入 None,则不使用激活函数
use_bias: 布尔值,该层是否使用偏置向量。
kernel_initializer: kernel 权值矩阵的初始化器,用于输入的线性转换recurrent_initializer: recurrent_kernel 权值矩阵的初始化器,用于循环层状态的线性转换
**bias_initializer:**偏置向量的初始化器
unit_forget_bias: 布尔值。如果为 True,初始化时,将忘记门的偏置加 1。将其设置为 True 同时还会强制 bias_initializer=“zeros”。
kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数
recurrent_regularizer: 运用到 recurrent_kernel 权值矩阵的正则化函数
bias_regularizer: 运用到偏置向量的正则化函数
activity_regularizer: 运用到层输出(它的激活值)的正则化函数
kernel_constraint: 运用到 kernel 权值矩阵的约束函数
bias_constraint: 运用到偏置向量的约束函数
dropout: 在 0 和 1 之间的浮点数。单元的丢弃比例,用于输入的线性转换。
recurrent_dropout: 在 0 和 1 之间的浮点数。单元的丢弃比例,用于循环层状态的线性转换。
implementation: 实现模式,1 或 2。模式 1 将把它的操作结构化为更多的小的点积和加法操作,而模式 2 将把它们分批到更少,更大的操作中。这些模式在不同的硬件和不同的应用中具有不同的性能配置文件。
return_sequences: 布尔值。是返回输出序列中的最后一个输出,还是全部序列。
return_state: 布尔值。除了输出之外是否返回最后一个状态。
go_backwards: 布尔值 (默认 False)。如果为 True,则向后处理输入序列并返回相反的序列。
stateful: 布尔值 (默认 False)。如果为 True,则批次中索引 i 处的每个样品的最后状态将用作下一批次中索引 i 样品的初始状态。
unroll: 布尔值 (默认 False)。如果为 True,则网络将展开,否则将使用符号循环。展开可以加速 RNN,但它往往会占用更多的内存。展开只适用于短序列
目前的问题:预测到底是怎么预测的,我知道了2018年的股票数据,作为样本输入得到一个预测值吗?这有点傻逼吧,既然都知道了还预测个屁,应该拿历史数据进行预测吧,只是根据时间来推测数据这个还听高级的,要不纯属傻逼。而且吧,第一天的值还没预测出来,只是把之后的得到了,有什么用呢。应该整体都出来吧。
标签:kernel,None,regularizer,Kreas,recurrent,bias,深度,LSTM,True 来源: https://blog.csdn.net/qq_38384924/article/details/88914312