1
$\begingroup$

I am here using ResNet50 to create a regression model. I ran into a problem when I wanted to test a model using other data. The length of the dataset is 2050. Then I separate it into training and testing data. I divide it by 1500 as training data and 500 as test data. At the time of the training process, I had good results and was able to predict quite accurately. but when I want to test it using testing data, the prediction results are bad.

below is the model loss result

enter image description here

the code :

Insole = pd.read_csv('1119_Rwalk40s1_list.txt', header=None, low_memory=False)
SIData =  np.asarray(Insole)

df = pd.read_csv('1119_Rwalk40s1.csv', low_memory=False)
columns = ['Fx','Fy','Fz','Mx','My','Mz']
selected_df = df[columns]
FCDatas = selected_df[:2050]

SmartInsole = np.array(SIData)
FCData = np.array(FCDatas)

xX = SmartInsole
yY = FCData

scaler_x = MinMaxScaler(feature_range=(0, 1))
scaler_x.fit(xX)
xscale = scaler_x.transform(xX)

scaler_y = MinMaxScaler(feature_range=(0, 1))
scaler_y.fit(yY)
yscale = scaler_y.transform(yY)

SIDataPCA = xscale
pca = PCA(n_components=12)
pca.fit(SIDataPCA)
SIdata_pca = pca.transform(SIDataPCA)

#For Training
trainX = SIdata_pca[:1500]
trainY = yscale[:1500]

#For Testing
testX = SIdata_pca[1500]
testY = yscale[1500:]

X_train, X_test, y_train, y_test = train_test_split(trainX, trainY, test_size=0.20, random_state=2)

Below is the my resnet model structure:

Below is identity blok:

def identity_block(input_tensor,units):

x = layers.Dense(units)(input_tensor)
x = layers.Activation('relu')(x)

x = layers.Dense(units)(x)
x = layers.Activation('relu')(x)

x = layers.Dense(units)(x)

x = layers.add([x, input_tensor])
x = layers.Activation('relu')(x)

return x

Below is dens_block:

def dens_block(input_tensor,units):

x = layers.Dense(units)(input_tensor)
x = layers.Activation('relu')(x)

x = layers.Dense(units)(x)
x = layers.Activation('relu')(x)

x = layers.Dense(units)(x)

shortcut = layers.Dense(units)(input_tensor)

x = layers.add([x, shortcut])
x = layers.Activation('relu')(x)
return x

Resnet50 model:

def ResNet50Regression():
Res_input = layers.Input(shape=(12,))
width = 32

x = dens_block(Res_input,width)
x = identity_block(x,width)
x = identity_block(x,width)

x = dens_block(x,width)
x = identity_block(x,width)
x = identity_block(x,width)

x = dens_block(x,width)
x = identity_block(x,width)
x = identity_block(x,width)

x = layers.Dense(6,activation="sigmoid")(x)
model = models.Model(inputs=Res_input, outputs=x)

return model

model = ResNet50Regression()

model.compile(loss='mse', 
              optimizer=Adam(), 
                            metrics=['mse'])

history = model.fit(X_train, y_train, 
                    batch_size=32, 
                                        epochs=50, 
                                        validation_data=(X_test, y_test), 
                                        verbose=2)

model.save('Resnet50-1203.h5')
ypred = model.predict(trainX)


x=[]
colors=['red','green','brown','teal','gray','black','maroon','orange','purple']
colors2=['green','red','orange','black','maroon','teal','blue','gray','brown']
x = np.arange(0,1500)*40/1500 
for i in range(0,6):
    plt.figure(figsize=(15,6))
    plt.plot(x,trainY[0:1500,i],color=colors[i])
    plt.plot(x,ypred[0:1500,i], markerfacecolor='none',color=colors2[i])
    plt.title('Result for ResNet Regression (Training Data)')
    plt.ylabel(columns[i])
    plt.xlabel('Time(s)')
    plt.legend(['FP Data', 'SI Prediction'], loc='best')
    # plt.savefig('Regression Result.png'[i])
    plt.show()

Testing Model using other data code:

new_model = load_model('Resnet50-1203.h5')
model.evaluate(testX, testY)
Test_xX_model = new_model.predict(testX)
x=[]
colors=['red','green','brown','teal','gray','black','maroon','orange','purple']
colors2=['green','red','orange','black','maroon','teal','blue','gray','brown']
x = np.arange(0,550)*40/550 
for i in range(0,6):
    plt.figure(figsize=(15,6))
    plt.plot(x,testY[0:550,i],color=colors[i])
    plt.plot(x,Test_xX_model[0:550,i], markerfacecolor='none',color=colors2[i])
    plt.title('Result for ResNet Regression (Testing Data)')
    plt.ylabel(columns[i])
    plt.xlabel('Time(s)')
    plt.legend(['FP Data', 'SI Prediction'], loc='best')
    # plt.savefig('Regression Result.png'[i])
    plt.show()

1 of traning data predictions results: enter image description here

1 of testing data predictions results: enter image description here

what should i do for this case?

$\endgroup$

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.