如何解决Keras 中的多步多元时间序列分类
不知道你能不能帮帮我,我有一个3类时间序列分类问题,我需要预测未来最多两步的类。 我用一个热编码器对输出进行了编码,所以我有 3 列 我对输出层的维度有疑问。当我只迈向未来的一步时,我可以使用
"model.add(Dense(3,activation='softmax'))"
以及我工作正常的代码,但是当我有 2 个步骤时,我不确定要使用哪个输出层。
我的训练数据维度如下:
ytrain2 (100861,2,3) xtrain2 (100861,6,9)
from numpy import array
print(xnorm.shape)
Xtrain2,ytrain2 = split_sequence(xnorm,ynorm,2)
print(ytrain2)
Xtestf,ytestf = split_sequence(xtestnorm,ytestnorm,2)
print(ytrain2.shape)
recallV=list()
misclasV=list()
for i in n:
for j in neurons:
from keras.layers import Dense
from keras.models import Sequential
from keras.layers import Dropout
import tensorflow as tf
import keras as ks
n_input = Xtrain2.shape[1] * Xtrain2.shape[2]
ny=ytrain2.shape[1] * ytrain2.shape[2]
X = Xtrain2.reshape(Xtrain2.shape[0],n_input)
ytrain3=ytrain2.reshape(ytrain2.shape[0],ny)
optimizer = ks.optimizers.Adam(lr=0.01)
from keras.callbacks import ReduceLROnPlateau
from keras.callbacks import EarlyStopping
callbackEarlyStop = tf.keras.callbacks.EarlyStopping(monitor='val_loss',patience=15)
reduce_lr = ReduceLROnPlateau(monitor='val_loss',factor=0.95,patience=5,min_lr=0.0000001,verbose=1)
# define model
model = Sequential()
model.add(Dense(j,activation='relu',input_dim=n_input))
model.add(Dropout(0.1))
model.add(Dense(j,activation='relu'))
model.add(Dropout(0.1))
###problem is here##
model.add(Dense(3,activation='softmax'))**
model.compile(optimizer=optimizer,loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(X,ytrain3,epochs=100,batch_size=256,shuffle=False,validation_split=0.2,callbacks=[reduce_lr,callbackEarlyStop],verbose=2)
解决方法
嗨,我找到了答案,问题只是通过使用 Keras 函数式 API 并执行多输出神经网络来解决,代码摘录是:
y1 = ytrain2[:,0].reshape((ytrain2.shape[0],ytrain2.shape[1]))
y2 = ytrain2[:,1].reshape((ytrain2.shape[0],ytrain2.shape[1]))
y3 = ytrain2[:,2].reshape((ytrain2.shape[0],ytrain2.shape[1]))
Input_1= Input(shape=(n_input,))
x = Dense(120,activation='relu')(Input_1)
x= Dropout(0.15)(x)
x = Dense(120,activation='relu')(x)
x= Dropout(0.15)(x)
x = Dense(120,activation='relu')(x)
x= Dropout(0.15)(x)
out1 = Dense(3,activation='softmax')(x)
out2 = Dense(3,activation='softmax')(x)
out3 = Dense(3,activation='softmax')(x)
model = Model(inputs=Input_1,outputs=[out1,out2,out3])
model.compile(optimizer=optimizer,loss='categorical_crossentropy',metrics=rec)
model.fit(X,[y1,y2,y3],epochs=1054,batch_size=1024,shuffle=True,validation_split=0.12,callbacks=[reduce_lr,callbackEarlyStop],verbose=2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。