我有一个来自多个患者的数据集。 一位患者的输入是
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)
我正在使用零填充,即添加零以使所有矩阵现在相同,我希望我可以使用更好的方法来训练系统