Python中具有恒定精度的 CNN模型



我是Python的初学者,我有以下问题:

我需要用数据集GTZAN创建一个用于音乐类型识别的CNN,我遵循了在线教程,并提出了以下代码:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D, Input
X = X/255.0
#First Layer
Model = Sequential()
Model.add(Conv2D(64, (3, 3), input_shape = X.shape[1:]))
Model.add(Activation("relu"))
Model.add(MaxPooling2D(pool_size=(2, 2)))
Model.add(Dropout (0.2))
#Second Layer
Model.add(Conv2D(64, (3, 3)))
Model.add(Activation("relu"))
Model.add(MaxPooling2D(pool_size=(2, 2)))
Model.add(Dropout (0.2))
#Third Layer
Model.add(Flatten())
Model.add(Dense(64))
Model.add(Activation("relu"))
Model.add(Dropout (0.2))
#Output Layer
Model.add(Dense(1))
Model.add(Activation("softmax"))
#Compiling the Model
Model.compile(loss="categorical_crossentropy", #Suitable for datasets of 2 or more labels
optimizer="adam",
metrics=['accuracy']) #Calculates how often predictions equal labels.
Model.fit(X, y, batch_size=25, epochs=6, validation_split=0.1)

然而,当我运行模型时,我在所有时代都有恒定的精度(上面的模型为0.1023),我不知道为什么。我想问题一定出在我的代码上,否则每个epoch之间的精度至少会略有不同。

提前感谢您的帮助!

恒定的精度可能是恒定输出的标志。看看精确度作为衡量标准的缺点。如果99%的样本属于同一类(例如"pop"),则总是输出"genre is pop"的网络将获得>99%的准确率。

在1个单元的密集层上使用softmax激活函数是没有意义的,因为它总是返回1.0

的输出你希望你的模型的输出是一个类的概率,所以在最后的密集层中设置单元的数量作为你拥有的类的数量。

最新更新