Keras-为什么我的CNN模型的准确性不受超参数的影响?

Keras-为什么我的CNN模型的准确性不受超参数的影响?,keras,conv-neural-network,keras-layer,grid-search,Keras,Conv Neural Network,Keras Layer,Grid Search,正如标题清楚地描述的,我的简单CNN模型的准确性不受超参数影响,甚至不受层的存在影响,例如Dropout,和MaxPooling。我使用Keras实现了这个模型。这种奇怪情况背后的原因是什么?我在下面添加了代码的相关部分: input_dim = X_train.shape[1] nb_classes = Y_train.shape[1] model = Sequential() model.add(Conv1D(filters=64, kernel_size=3, activation='r

正如标题清楚地描述的,我的简单CNN模型的准确性不受超参数影响,甚至不受层的存在影响,例如
Dropout
,和
MaxPooling
。我使用
Keras
实现了这个模型。这种奇怪情况背后的原因是什么?我在下面添加了代码的相关部分:

input_dim = X_train.shape[1]
nb_classes = Y_train.shape[1]

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(input_dim, 1)))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(40, activation='relu'))
model.add(Dense(nb_classes, activation='softmax'))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
p、 s.输入数据(
X_列
X_测试
)包含由
Word2Vec
复制的向量。输出是二进制的

编辑:您可以在下面找到培训日志示例:

培训日志示例:

Train on 3114 samples, validate on 347 samples
Epoch 1/10
 - 1s - loss: 0.6917 - accuracy: 0.5363 - val_loss: 0.6901 - val_accuracy: 0.5476
Epoch 2/10
 - 1s - loss: 0.6906 - accuracy: 0.5369 - val_loss: 0.6896 - val_accuracy: 0.5476
Epoch 3/10
 - 1s - loss: 0.6908 - accuracy: 0.5369 - val_loss: 0.6895 - val_accuracy: 0.5476
Epoch 4/10
 - 1s - loss: 0.6908 - accuracy: 0.5369 - val_loss: 0.6903 - val_accuracy: 0.5476
Epoch 5/10
 - 1s - loss: 0.6908 - accuracy: 0.5369 - val_loss: 0.6899 - val_accuracy: 0.5476
Epoch 6/10
 - 1s - loss: 0.6909 - accuracy: 0.5369 - val_loss: 0.6901 - val_accuracy: 0.5476
Epoch 7/10
 - 1s - loss: 0.6905 - accuracy: 0.5369 - val_loss: 0.6896 - val_accuracy: 0.5476
Epoch 8/10
 - 1s - loss: 0.6909 - accuracy: 0.5369 - val_loss: 0.6897 - val_accuracy: 0.5476
Epoch 9/10
 - 1s - loss: 0.6905 - accuracy: 0.5369 - val_loss: 0.6892 - val_accuracy: 0.5476
Epoch 10/10
 - 1s - loss: 0.6909 - accuracy: 0.5369 - val_loss: 0.6900 - val_accuracy: 0.5476

我假设你有多类分类,对吗

那么你的损失就不合适了:你应该使用“
分类交叉熵”
“not”
均方误差


另外,尝试添加几个Conv+Drop+MaxPool(3组),以清楚地验证网络的健壮性。

首先,您需要将最后一层更改为

model.add(Dense(1, activation='sigmoid'))
您还需要将损失函数更改为

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

使用
mse
作为多类别分类问题的损失没有错。它仍然是一个有效的损失函数。只是在大多数情况下,
categorical\u crossentropy
的性能更好。精确度仍然是一样的。在这两者之间,我正在处理一个二进制分类问题,因为我的目标类是
0
,和
1
。你是对的,mse不是一个错误的分类,这就是我编辑文本答案的原因。精度仍然保持不变。那么,您的数据集是什么样子的呢?我认为您在数据预处理过程中做错了什么,或者您的X与y无关。我发现你的输入形状(input_dim,1)也不正常,就像你试图把一个单词分成两类中的一类。这真的是你正在做的吗?实际上我正在做的是提取恶意和良性Android应用程序的特征,以便将它们分为两类。这些特征基本上是字符串,我正在构造特征向量。
input_dim
是每个向量的大小。输入数据的形状为
(3451100)
。您可以尝试的第一个解决方案是训练您自己的嵌入,但在这样做之前,需要首先对文本数据进行一些预增强(标记化、柠檬化、转换为索引……)。然后,您可以在keras中使用嵌入层,然后在其上添加LSTM或任何其他reccurent网络。现在我假设你的数据是一个脚本,真的是这样吗?你能不能也给出一些你正在分类的细节?也许是一个你想要的对象的例子classify@TimbusCalin是的,但使用的损失函数是“mse”。然而,准确度没有下降的事实更多地与所使用的数据有关。