我怎样才能得到一个类的单一预测与Keras多类序列模型?



我使用Keras库以以下方式构建了一个Multiclass Sequential模型:

model = keras.Sequential([
#input layer
keras.layers.Flatten(input_shape=(inputs.shape[1], inputs.shape[2])),
#hidden layer 1
keras.layers.Dense(512, activation = 'relu', kernel_regularizer=keras.regularizers.l2(0.001)),
keras.layers.Dropout(0.3),
#hidden layer 2
keras.layers.Dense(256, activation = 'relu', kernel_regularizer=keras.regularizers.l2(0.001)),
keras.layers.Dropout(0.3),
#hidden layer 3
keras.layers.Dense(64, activation = 'relu', kernel_regularizer=keras.regularizers.l2(0.001)),
keras.layers.Dropout(0.3),
#output layer
keras.layers.Dense(10, activation = 'softmax')

)

optimizer = keras.optimizers.Adam(learning_rate = 0.0001)
model.compile(optimizer = optimizer,
loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
model.summary()
history = model.fit(inputs_train, targets_train, 
validation_data=(inputs_test, targets_test),
epochs=10,
batch_size=32)

使用GTZAN数据集,通过分析librosa库中的所有歌曲,得到的数据集有:10类:["蓝调","经典","国家","迪斯科","嘻哈","爵士","金属"、"流行","雷鬼","摇滚")每首歌都有:13个功能:我使用librosa.features.mfcc(…), n_mfcc=13,…).

模型工作得很好,但我怎么能预测只有一个类,因为如果我运行模型。output_shape我得到输出是一个数组(None, 10).

,如果我尝试使用数据集中没有的新歌:

predict = model.predict(song)

predict是vector:

[0.10061797 0.10143244 0.10092255 0.10302719 0.0996335  0.10174131 0.09681843 0.09491318 0.09931136 0.10158204]

那么我如何解释这些值呢?或者换句话说:我怎样才能使答案只是他预测的类别,也就是从0到9的一个数字?

该向量表示每个类的概率(如果将它们相加,则得到1)。您可以通过其中最大元素的索引轻松地获得最上面的一个:

predict.index(max(predict))

然后由你决定只取最大值是否足够,或者最好考虑与概率相关的其他因素(我不知道,只是猜测)。

最新更新