RNN/LSTM学习笔记

预处理:
data.info() #查看数据的参数,数据的整体状况
data.columns #查看列index
data.head()#查看数据头
data.tail()#查看数据尾
data.drop(columns=[‘name’],inplace=True)%删除name列,inplace=True立即生效
data.name.unique()#返回参数数组中所有不同的值,并按照从小到大排序
data.set_index(‘name’)#设置为索引
data.iloc[20:] #取20行以后的数据
data.iloc[:, :-1] #取所有行,取除了最后一列的所有列
data.iloc[20:].fillna(method=‘ffill’)#前向填充
data.join(pd.get_dummies(data.name))#返回通过指定字符连接序列中元素后生成的新字符串;get_dummies数值编码化,比如把AE、BE数值化为0,1
del date[‘name’]#删除某列
data[‘name’][-1000:].plot() #name列的倒数第1000行绘图
np.random.shuffle(data)#乱序
NaN值处理?
查看NaN有多少个,data[‘name’].isna().sum() #data[’’].isna() 显示有那些是NaN ,sum()相加
1、直接删除,但影响了整个序列
2、填充。(平均,中位,众数,前向填充)

全连接建立:
model=keras.Sequential()
model.add(layers.Flatten(input_shape=(train_x.shape[1:])))
model.add(layers.Dense(32,activation=‘relu’)) %隐藏层,不激活的隐藏层是没意义的。
model.add(layers.Dense(1))#输出层不需要激活
model.compile(optimizer=‘adam’,
loss=‘mse’,
metrics=[‘mae’])#优化函数,损失函数,度量函数(用于回归)方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准
history=model.fit(train_x,train_x,
batch_size=batch_size,
epochs=10,
validation_data=(test_x,test_y)
)

补充:
datatime #输出时间,将多行多列的时间 ,年,月,日,组合成一列
定义函数 data.apply(lambda X: datatime.datetime(year=x[‘year’],
mouth=x[‘mouth’],…),axis=1
)) #axis=1 对行操作
训练数据输入是需要标准化or归一化的。但是目标值(lable)需要标准化吗?不需要,(标准化也可以,但是无意义,可能还会影响结果)

batchsize,epoch解释
全连接接收一个二维的扁平输入
LSTM接收一个三维的输入
LSTM建立 (例如数据为(2132,120,11))#2132个数据120组观测值,每个观测值11个特征
model=kearas.Sequential()
model.add(layers.LSTM(input_shape=(120,11)))
model.add(layers.Dense(1))
model.compile(optimizer=‘adam’,
loss=‘mse’,
metrics=[‘mae’]) #编译模型

LSTM优化
堆叠多层
model=kearas.Sequential()
model.add(layers.LSTM(input_shape=(120,11), return_sequences=True)) #return_sequences=True 序列中的每一次观测都做输出
model.add(layers.LSTM(32,return_sequences=True ))
model.add(layers.LSTM(32))
model.add(layers.Dense(1))

训练中降低学习速率
lr_reduce=keras.callbacks.ReduceLROnPlateau(‘val_loss’,patience=3,factor=0.5,min_lr=0.00001) #参数的意思是指,在3个epoch之内,loss没有减小,则减小学习速率。即原来的学习速率*factor,限制最低学习速率
在训练中使用
history=model.fit(train_x,train_x,
batch_size=batch_size,
epochs=10,
callbacks=[lr_reduce],
validation_data=(test_x,test_y)
)

dropout
model.add(layers.LSTM(64,dropout=0.2,recurrent_dropout=0.5))# 神经元,数据输入时dropout=0.2,循环时dropout.

双向RNN
只需要在建立层前加入
model.add(layers.Bidirectional(layers.LSTM(64,dropout=0.2)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值