[英]Why doesn't my CNN's accuracy/loss change during training?
My goal is to train a convolutional neural network to recognise the images present in the mnist sign language dataset .我的目标是训练一个卷积神经网络来识别mnist 手语数据集中存在的图像。 Here is my attempt to process the data and train the model这是我处理数据和训练模型的尝试
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import cv2
import random
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense
import cv2
import keras
import sys
import tensorflow as tf
from keras import optimizers
import json
train_df = pd.read_csv("data/sign_mnist_train.csv")
test_df = pd.read_csv("data/sign_mnist_test.csv")
X = np.array(train_df.drop(["label"], axis=1))
y = np.array(train_df[["label"]])
X = X.reshape(-1, 28, 28, 1)
X = tf.cast(X, tf.float32)
model = Sequential()
model.add(Conv2D(28, (3,3), activation = 'relu'))
model.add(MaxPooling2D((2,2)))
model.add(Flatten())
model.add(Dense(24, activation = 'softmax'))
model.compile(optimizer='RMSprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(X, y, epochs=10, validation_split=0.2)
and after running this I get this result运行这个之后我得到了这个结果
Epoch 1/10
687/687 [==============================] - 4s 6ms/step - loss: 174.9729 - accuracy: 0.0438 - val_loss: 174.6281 - val_accuracy: 0.0382
Epoch 2/10
687/687 [==============================] - 2s 3ms/step - loss: 174.9779 - accuracy: 0.0433 - val_loss: 174.6281 - val_accuracy: 0.0382
Epoch 3/10
687/687 [==============================] - 2s 3ms/step - loss: 174.9777 - accuracy: 0.0433 - val_loss: 174.6281 - val_accuracy: 0.0382
and this continues for the remaining 7 epochs.这在剩下的 7 个 epoch 中继续。 My model is slightly different from what I have provided (for brevity) but this sequential model has the same issue, which makes me suspect that the issue must come before the model = Sequential()
line.我的模型与我提供的(为简洁起见)略有不同,但这个顺序模型有相同的问题,这让我怀疑问题必须出现在model = Sequential()
行之前。 Furthermore, I have tried countless combinations of optimizers/loss and all those do is make the accuracy/loss converge to slightly different numbers, so I doubt that's the problem.此外,我尝试了无数优化器/损失的组合,所有这些都是使准确度/损失收敛到略有不同的数字,所以我怀疑这就是问题所在。
One of potential is that you use loss='binary_crossentropy'
rather than loss='CategoricalCrossentropy'
.潜力之一是您使用loss='binary_crossentropy'
而不是loss='CategoricalCrossentropy'
。
Besides, you defined the split datasets for training and testing, but you again defined it as model.fit(X, y, epochs=10, validation_split=0.2)
to split datasets with 20% for validation and 80% for training.此外,您定义了用于训练和测试的分割数据集,但您再次将其定义为model.fit(X, y, epochs=10, validation_split=0.2)
以分割数据集,其中 20% 用于验证,80% 用于训练。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.