步态分类任务中更换数据集与模型后准确率无变化的问题
步态分类任务准确率异常问题
问题情况
我正在做步态分类任务,用到时序骨骼数据和足底压力数据两类数据。但不管用哪类数据集、哪种模型,准确率都几乎没变化:
- 用骨骼数据搭配GRU模型时,不管设置1层还是8层GRU,准确率始终在15-17之间;
- 用足底压力图像搭配CNN模型时,不管设置1层还是4层卷积层,结果也完全一致。
我已经试过很多方法,包括用留一交叉验证(数据集共1960个样本),还有对数据集做合理的归一化处理,但都没效果。
所用CNN模型代码
CNNBaseline = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, 5, strides=2, name='conv0'), tf.keras.layers.BatchNormalization(axis=2, name='bn0'), tf.keras.layers.AveragePooling2D(pool_size=(4, 4),strides=(1, 1), padding="valid", name='pool0'), tf.keras.layers.Conv2D(28, 5, strides=1, name='conv1'), tf.keras.layers.BatchNormalization(axis=2, name='bn1'), tf.keras.layers.AveragePooling2D(pool_size=(4, 4),strides=(1, 1), padding="valid", name='pool1'), tf.keras.layers.Flatten(), tf.keras.layers.Activation('relu'), tf.keras.layers.Dense(6, activation = "softmax") ]) loss_object = tf.keras.losses.CategoricalCrossentropy(from_logits=True) optimizer = tf.keras.optimizers.AdamW(amsgrad = True) train_loss = tf.keras.metrics.Mean(name='train_loss') train_accuracy = tf.keras.metrics.CategoricalAccuracy(name='train_accuracy') test_loss = tf.keras.metrics.Mean(name='test_loss') test_accuracy = tf.keras.metrics.CategoricalAccuracy(name='test_accuracy') @tf.function def train_step(images, labels, model): with tf.GradientTape() as tape: # training=True is only needed if there are layers with different # behavior during training versus inference (e.g. Dropout). predictions = model(input, training=True) # print(predictions.shape, labels.shape) loss = loss_object(labels, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss(loss) train_accuracy(labels, predictions) @tf.function def test_step(images, labels, model): # training=False is only needed if there are layers with different # behavior during training versus inference (e.g. Dropout). predictions = model(images, training=False) t_loss = loss_object(labels, predictions) test_loss(t_loss) test_accuracy(labels, predictions) EPOCHS = 25 for i, (train_dataset, val_dataset) in enumerate(new_folds): print("--- FOLD {} ---".format(i+1)) for epoch in range(EPOCHS): # Reset the metrics at the start of the next epoch train_loss.reset_states() train_accuracy.reset_states() # test_loss.reset_states() # test_accuracy.reset_states() for input, labels in train_dataset: train_step(input, labels, CNNBaseline) for test_input, test_labels in val_dataset: test_step(test_input, test_labels, CNNBaseline) print( f'Epoch {epoch + 1}, ' f'Loss: {train_loss.result()}, ' f'Accuracy: {train_accuracy.result() * 100}, ' f'Test Loss: {test_loss.result()}, ' f'Test Accuracy: {test_accuracy.result() * 100}' )
训练结果
Epoch 1, Loss: 2.1716630458831787, Accuracy: 16.011903762817383, Test Loss: 1.8004146814346313, Test Accuracy: 20.0 Epoch 2, Loss: 1.8933827877044678, Accuracy: 16.904762268066406, Test Loss: 1.8022382259368896, Test Accuracy: 16.666667938232422 Epoch 3, Loss: 1.853434681892395, Accuracy: 15.892857551574707, Test Loss: 1.7935744524002075, Test Accuracy: 18.61111068725586 Epoch 4, Loss: 1.8187559843063354, Accuracy: 18.095237731933594, Test Loss: 1.789302110671997, Test Accuracy: 18.54166603088379 Epoch 5, Loss: 1.8167860507965088, Accuracy: 16.845237731933594, Test Loss: 1.785824179649353, Test Accuracy: 17.66666603088379 Epoch 6, Loss: 1.8007153272628784, Accuracy: 17.321428298950195, Test Loss: 1.7855454683303833, Test Accuracy: 17.91666603088379 Epoch 7, Loss: 1.798923373222351, Accuracy: 16.7261905670166, Test Loss: 1.7870519161224365, Test Accuracy: 16.666667938232422 Epoch 8, Loss: 1.7977991104125977, Accuracy: 16.7261905670166, Test Loss: 1.7880070209503174, Test Accuracy: 16.5625 Epoch 9, Loss: 1.7937138080596924, Accuracy: 16.904762268066406, Test Loss: 1.78699791431427, Test Accuracy: 16.759260177612305 Epoch 10, Loss: 1.794595718383789, Accuracy: 15.773809432983398, Test Loss: 1.7874552011489868, Test Accuracy: 16.83333396911621 Epoch 11, Loss: 1.7926329374313354, Accuracy: 16.78571319580078, Test Loss: 1.7887686491012573, Test Accuracy: 15.606060981750488 Epoch 12, Loss: 1.792636513710022, Accuracy: 15.059523582458496, Test Loss: 1.7890628576278687, Test Accuracy: 15.06944465637207 Epoch 13, Loss: 1.7926796674728394, Accuracy: 16.7261905670166, Test Loss: 1.789198637008667, Test Accuracy: 14.743590354919434 Epoch 14, Loss: 1.7923105955123901, Accuracy: 16.845237731933594, Test Loss: 1.7894119024276733, Test Accuracy: 14.226190567016602 Epoch 15, Loss: 1.792075514793396, Accuracy: 15.535714149475098, Test Loss: 1.7896616458892822, Test Accuracy: 14.44444465637207 Epoch 16, Loss: 1.7925114631652832, Accuracy: 15.535714149475098, Test Loss: 1.7899030447006226, Test Accuracy: 14.791666030883789 Epoch 17, Loss: 1.7919762134552002, Accuracy: 16.309524536132812, Test Loss: 1.790137529373169, Test Accuracy: 15.098039627075195 Epoch 18, Loss: 1.7920151948928833, Accuracy: 16.011903762817383, Test Loss: 1.790404200553894, Test Accuracy: 14.907407760620117 Epoch 19, Loss: 1.792333960533142, Accuracy: 15.773809432983398, Test Loss: 1.790627360343933, Test Accuracy: 14.561403274536133 Epoch 20, Loss: 1.792126178741455, Accuracy: 17.0238094329834, Test Loss: 1.790829062461853, Test Accuracy: 14.166666984558105 Epoch 21, Loss: 1.7918967008590698, Accuracy: 15.833333015441895, Test Loss: 1.7911324501037598, Test Accuracy: 13.928571701049805 Epoch 22, Loss: 1.792186975479126, Accuracy: 16.19047737121582, Test Loss: 1.791191577911377, Test Accuracy: 14.090909004211426 Epoch 23, Loss: 1.7919899225234985, Accuracy: 15.714285850524902, Test Loss: 1.7912797927856445, Test Accuracy: 14.094202041625977 Epoch 24, Loss: 1.7919201850891113, Accuracy: 17.142858505249023, Test Loss: 1.7914255857467651, Test Accuracy: 13.958333015441895 Epoch 25, Loss: 1.7919764518737793, Accuracy: 15.357142448425293, Test Loss: 1.7914543151855469, Test Accuracy: 13.933333396911621
内容的提问来源于stack exchange,提问作者Eleni Papadopulos
相关产品推荐
相关产品推荐

