没有合适的资源?快使用搜索试试~ 我知道了~
我就废话不多说了,大家还是直接看代码吧~ print(np.shape(X))#(1920, 45, 20) X=sequence.pad_sequences(X, maxlen=100, padding='post') print(np.shape(X))#(1920, 100, 20) model = Sequential() model.add(Masking(mask_value=0,input_shape=(100,20))) model.add(LSTM(128,dropout_W=0.5,dropout_U=0.5)) model.add(Dense(13,activation
资源推荐
资源详情
资源评论

















keras在构建在构建LSTM模型时对变长序列的处理操作模型时对变长序列的处理操作
我就废话不多说了,大家还是直接看代码吧~
print(np.shape(X))#(1920, 45, 20)
X=sequence.pad_sequences(X, maxlen=100, padding='post')
print(np.shape(X))#(1920, 100, 20)
model = Sequential()
model.add(Masking(mask_value=0,input_shape=(100,20)))
model.add(LSTM(128,dropout_W=0.5,dropout_U=0.5))
model.add(Dense(13,activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 用于保存验证集误差最小的参数,当验证集误差减少时,保存下来
checkpointer = ModelCheckpoint(filepath="keras_rnn.hdf5", verbose=1, save_best_only=True, )
history = LossHistory()
result = model.fit(X, Y, batch_size=10,
nb_epoch=500, verbose=1, validation_data=(testX, testY),
callbacks=[checkpointer, history])
model.save('keras_rnn_epochend.hdf5')
补充知识:补充知识:RNN(LSTM)数据形式及数据形式及Padding操作处理变长时序序列操作处理变长时序序列dynamic_rnn
Summary
RNN
样本一样,计算的状态值和输出结构一致,也即是说只要当前时刻的输入值也前一状态值一样,那么其当前状态值和当前输出
结果一致,因为在当前这一轮训练中权重参数和偏置均未更新
RNN的最终状态值与最后一个时刻的输出值一致
输入数据要求格式为,shape=(batch_size, step_time_size, input_size),那么,state的shape=(batch_size, state_size);output
的shape=(batch_size, step_time_size, state_size),并且最后一个有效输出(有效序列长度,不包括padding的部分)与状态值
会一样
LSTM
LSTM与RNN基本一致,不同在于其状态有两个c_state和h_state,它们的shape一样,输出值output的最后一个有效输出与
h_state一致
用变长RNN训练,要求其输入格式仍然要求为shape=(batch_size, step_time_size, input_size),但可指定每一个批次中各个
样本的有效序列长度,这样在有效长度内其状态值和输出值原理不变,但超过有效长度的部分的状态值将不会发生改变,而输
出值都将是shape=(state_size,)的零向量(注:RNN也是这个原理)
需要说明的是,不是因为无效序列长度部分全padding为0而引起输出全为0,状态不变,因为输出值和状态值得计算不仅依赖
当前时刻的输入值,也依赖于上一时刻的状态值。其内部原理是利用一个mask matrix矩阵标记有效部分和无效部分,这样在
无效部分就不用计算了,也就是说,这一部分不会造成反向传播时对参数的更新。当然,如果padding不是零,那么padding
的这部分输出和状态同样与padding为零的结果是一样的
'''
#样本数据为(batch_size,time_step_size, input_size[embedding_size])的形式,其中samples=4,timesteps=3,features=3,其中第二个、第四个样本
是只有一个时间步长和二个时间步长的,这里自动补零
'''
import pandas as pd
import numpy as np
import tensorflow as tf
train_X = np.array([[[0, 1, 2], [9, 8, 7], [3,6,8]],
[[3, 4, 5], [0, 10, 110], [0,0,0]],
[[6, 7, 8], [6, 5, 4], [1,7,4]],
[[9, 0, 1], [3, 7, 4], [0,0,0]],
[[9, 0, 1], [3, 3, 4], [0,0,0]] ])
sequence_length = [3, 1, 3, 2, 2]
资源评论


weixin_38616359
- 粉丝: 8
- 资源: 934
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
