[LSTM学习笔记2]使用Keras开发LSTM

使用Keras开发LSTM可以分为6步:

  • 定义模型
  • 编译模型
  • 拟合模型
  • 评估模型
  • 使用模型进行预测

1.定义模型

(1)主要使用Sequential()类下的LSTM()和Dense(),如:

layers = [LSTM(2),Dense(1)]  
model = Sequential(layers)

第一个隐层需要定义输入,输入的维度必须是三维的(samples,time steps,features)
可以使用Numpy的reshape函数实现维度转换,如将2D转为3D:
data = data.reshape((data.shape[0], data.shape[1], 1))

(2)最后一层激活函数的选用

  • Regression:线性激活函数,Dense()默认的激活函数。
  • Binary Classification:二分类问题,输出一个值,通常使用sigmoid。
  • Multiclass Classification:多分类问题,使用softmax,输出通常为one-hot形式。

2.编译模型

定义优化算法和损失函数,如:

algorithm = SGD(lr=0.1, momentum=0.3)
model.compile(optimizer=algorithm, loss= mse )
或写在一起: 
model.compile(optimizer= sgd , loss= mean_squared_error , metrics=[ accuracy ])

优化算法在Keras中经常使用的有:

  • SGD
  • Adam
  • RMSprop

损失函数通常为:

  • Regression:均方误差(MSE)
  • Binary Classification:cross_entroy或binary_crossentropy
  • Multiclass Classification:categorical_crossentropy

3.拟合模型

模型训练中通常需要设置的参数是batch_size和epochs,模型将返回训练过程中的模型性能汇总,每个epoch记录一次,如loss和任何编译模型阶段定义的metrics,这些数据可以用于绘图。

history = model.fit(X, y, batch_size=10, epochs=100, verbose=0)

4.评估模型

使用测试评估集在模型上进行评估:
如: loss, accuracy = model.evaluate(X, y, verbose=0)

 

5.使用模型进行预测

使用predicte()函数
predictions = model.predict(X, verbose=0)

为LSTM准备数据的例子

 

  • 1.单特征输入实例:多个时间步的序列,仅一个特征

 

rom numpy import array
data = array([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])
#将一维输入序列转换为keras要求的3维序列(1sample,10time steps,1 feature)
data = data.reshape((1,10,1))
print(data.shape)

输出:

(1, 10, 1)

 

现在数据可以输入LSTM,如:

model = Sequential()
model.add(LSTM(32,input_shape=(10,1)))
  • 对特征输入实例 比如下面的两个并行序列:
    series 1: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
    series 2: 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1

 

from numpy import array
data = array([
    [0.1,1.0],
    [0.2,0.9],
    [0.3,0.8],
    [0.4,0.7],
    [0.5,0.6],
    [0.6,0.5],
    [0.7,0.4],
    [0.8,0.3],
    [0.9,0.2],
    [1.0,0.1]
])
#将数据reshape为1sampe,10time-steps,2features
data = data.reshape(1,10,2)
print(data.shape)

 输出:

(1, 10, 2)

现在数据可以输入LSTM

model = model.Sequential()
model.add(LSTM(32,input_shape=(10,2)))

 

Keras中LSTM的输入小结:

  1. LSTM输入数据必须是三维
  2. 3个输入维度分别是:sample,time steps,features
  3. LSTM输入层通过input_shape参数在第一个隐藏层上定义
  4. input_shape参数的参数是由time steps和features这两个值组成的元组
  5. sample的数量程序认为是1或更多
  6. 使用numpy array中的reshape函数将1D或2D数据转换为LSTM输入要求的3D数据,该函数的参数是新shape组成元组。

I

 

你可能感兴趣的:(Python,Keras)