处理不同输入时间长度的 BiLSTM 神经网络

问题描述 投票:0回答:1

我有一个来自多个患者的数据集。 一位患者的输入是

frequency x time length
。 每个病人的时间长短都不一样

我有什么方法可以训练不同时间长度的网络吗?

我正在使用零填充,它添加零以使所有数组相同。我希望我可以使用更好的方法来训练网络。

我的代码:

name = os.path.join(newdirectory, newsecdir, action)
Xdata_N = np.load(Nx, allow_pickle=True)
Ydata_N = np.load(Ny, allow_pickle=True)
Xdata_PD = np.load(PDx, allow_pickle=True)
Ydata_PD = np.load(PDy, allow_pickle=True)
Xdata_ET = np.load(ETx, allow_pickle=True)
Ydata_ET = np.load(ETy, allow_pickle=True)

# Oversampling
# Avoid data imbalance problem
max_num = max(len(Ydata_N), len(Ydata_PD), len(Ydata_ET))
Xdata = np.concatenate((Xdata_N[np.mod(np.arange(max_num), len(Xdata_N))],
                    Xdata_PD[np.mod(np.arange(max_num), len(Xdata_PD))],
                    Xdata_ET[np.mod(np.arange(max_num), len(Xdata_ET))]), axis=0)
Ydata = np.concatenate((Ydata_N[np.mod(np.arange(max_num), len(Ydata_N))],
                    Ydata_PD[np.mod(np.arange(max_num), len(Ydata_PD))],
                    Ydata_ET[np.mod(np.arange(max_num), len(Ydata_ET))]), axis=0)

print('++++++', Xdata.shape)
length = Xdata.shape[0]
trainlen = round(length*4/5)

trainx = [data for data in Xdata[0:trainlen]]
trainy = [data for data in Ydata[:trainlen]]

testx = [data for data in Xdata[trainlen:]]
testy = [data for data in Ydata[trainlen:]]

nsteps, nfeatures = Xdata[0].shape
# define model
initialLearnRate = 1e-3
opt = Adam(learning_rate=initialLearnRate, clipnorm=1.0)
early_stop = EarlyStopping(monitor='val_loss', patience=6,
                       verbose=0, mode='auto', restore_best_weights=True)

model_checkpoint = ModelCheckpoint(
'best_model.h5', save_best_only=True, monitor='val_loss', mode='min', verbose=0)


model = Sequential()
model.add(BatchNormalization(input_shape=(None, nfeatures)))
model.add(Bidirectional(LSTM(numHiddenUnits, return_sequences=True)))
model.add(Activation('relu'))
model.add(Bidirectional(LSTM(numHiddenUnits, return_sequences=False)))
model.add(BatchNormalization())
model.add(Dropout(dropoutProb))
model.add(Dense(numClasses))
model.add(Dropout(dropoutProb))
model.add(Activation('softmax'))

model.compile(loss='mse', optimizer=opt, metrics=['mse'])
model.fit(trainx, trainy, validation_data=(testx, testy), batch_size=miniBatchSize,                         epochs=maxEpochs,
      callbacks=[early_stop, model_checkpoint], verbose=0, shuffle=True)

testPredict = model.predict(testx)
python deep-learning neural-network time-series lstm
1个回答
0
投票

我正在使用零填充,即添加零以使所有矩阵现在相同,我希望我可以使用更好的方法来训练系统

© www.soinside.com 2019 - 2024. All rights reserved.