我在做一个CNN项目,需要先对标签进行预处理。
图像文件是一个频谱图,每个文件都有一个存储在数组中的 250 个值的标签。它讲述了特定频谱图中存在的一系列音高值。例如,一个标签文件如下所示:
[ 0 0 0 0 0 0 0 0 0 0 0 57 57 57 57 57 57 57 57 58 58 57 57 57
0 0 0 0 0 56 57 57 56 56 56 56 56 56 56 56 56 57 57 58 59 61 62 62
63 64 64 63 64 64 64 64 0 0 0 0 64 64 64 64 63 63 63 63 63 64 63 64
64 64 65 66 66 66 66 66 65 65 66 66 66 66 65 0 0 0 0 65 65 65 66 66
66 66 66 65 65 65 0 0 0 0 64 64 64 64 64 64 64 64 64 64 64 64 64 64
63 0 0 0 0 0 0 0 0 0 0 0 0 0 60 60 60 60 61 61 62 62 62 62
62 62 62 61 0 0 0 62 62 62 62 62 62 62 62 62 62 62 62 60 0 62 61 60
61 61 61 61 61 61 61 61 61 60 0 0 0 0 0 61 60 60 60 61 61 61 61 61
61 0 0 0 0 0 0 59 59 59 59 58 58 59 59 59 59 0 0 0 0 0 0 0
59 59 58 58 59 59 59 59 59 59 0 0 0 0 58 57 57 57 57 57 57 57 57 57
57 57 58 57 0 0 0 0 0 0]
在总结所有标签文件后,我发现这些标签中存在这51 个唯一值。我将这些值存储在一个数组中。
y_train = # y_test also contains these values
[ 0 30 31 32 33 34 35 36 37 38
39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58
59 60 61 62 63 64 65 66 67 68
69 70 71 72 73 74 76 77 81 83
85]
在进行 CNN 计算之前,我需要执行to_categorical
方法来确定类号(在我的情况下为 51)。您可以在此处to_categorical
查看文档。
我已经做到了,但结果是 86,而不是 51。我假设因为我的标签已经是整数格式,并且该方法认为我有 86 个唯一值,范围从 0-85 完整顺序,而实际上我只有 51 个唯一值,范围从 0 到 85,但顺序不完整(请参阅 参考资料y_train
)。
# convert to array first. y_train and y_test are labels for an image X_train and X_test.
y_train = np.array(y_train) # labels for X_train images
y_test = np.array(y_test) # labels for X_test images
# do to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# shape result
y_train: (638, 250, 86) # 638 = total data, 250 = 1 data length, 86 = num_class
y_test: (161, 250, 86) # 161 = total data, 250 = 1 data length, 86 = num_class
然后,我想出了一个想法,将所有唯一值映射到一个新整数中,以使to_categorical
方法认为我只有 51 个类,例如:
0 -> 0
30 -> 1
31 -> 2
32 -> 3
...
85 -> 51
y_train
Python中有没有办法从数组中实现这种映射?如果有,我可以在计算完成后将其恢复为原始值吗?谢谢你。