繁体   English   中英

为什么我的 CNN 的准确率/损失在训练期间没有变化?

[英]Why doesn't my CNN's accuracy/loss change during training?

我的目标是训练一个卷积神经网络来识别mnist 手语数据集中存在的图像。 这是我处理数据和训练模型的尝试

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)

运行这个之后我得到了这个结果

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

这在剩下的 7 个 epoch 中继续。 我的模型与我提供的(为简洁起见)略有不同,但这个顺序模型有相同的问题,这让我怀疑问题必须出现在model = Sequential()行之前。 此外,我尝试了无数优化器/损失的组合,所有这些都是使准确度/损失收敛到略有不同的数字,所以我怀疑这就是问题所在。

潜力之一是您使用loss='binary_crossentropy'而不是loss='CategoricalCrossentropy'

此外,您定义了用于训练和测试的分割数据集,但您再次将其定义为model.fit(X, y, epochs=10, validation_split=0.2)以分割数据集,其中 20% 用于验证,80% 用于训练。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM