在 Python 中具有恒定精度的 CNN 模型
CNN Model with constant accuracy in Python
我是 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),我无法弄清楚为什么。我想问题一定出在我的代码上,否则每个时期之间的准确性至少会略有不同。
提前感谢您的帮助!
在 1 个单元的密集层上使用 softmax 激活函数没有意义,因为它总是 returns 1.0
的输出
您希望模型的输出概率为类,因此将最终密集层中的单元数设置为您拥有的类个数。
恒定的准确性可能是恒定输出的标志。查看准确性的缺点作为衡量标准。如果 99% 的样本属于相同的 class(例如“pop”),则始终输出“genre is pop”的网络将获得 >99% 的准确度。
我是 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),我无法弄清楚为什么。我想问题一定出在我的代码上,否则每个时期之间的准确性至少会略有不同。
提前感谢您的帮助!
在 1 个单元的密集层上使用 softmax 激活函数没有意义,因为它总是 returns 1.0
您希望模型的输出概率为类,因此将最终密集层中的单元数设置为您拥有的类个数。
恒定的准确性可能是恒定输出的标志。查看准确性的缺点作为衡量标准。如果 99% 的样本属于相同的 class(例如“pop”),则始终输出“genre is pop”的网络将获得 >99% 的准确度。