Python CNN的准确度不会因多个时代而改变

Python CNN的准确度不会因多个时代而改变,python,machine-learning,keras,deep-learning,conv-neural-network,Python,Machine Learning,Keras,Deep Learning,Conv Neural Network,我正在尝试创建一个CNN,它可以区分有无糖尿病视网膜病变症状的眼睛的黑白照片。当我试着运行我的模型时,精确度一点也没有提高。我试着使用不同的学习速度,但没有效果。因为这是我第一次做CNN,我想我可能在其他地方犯了一个错误。如果您看到我的代码中存在问题,请告诉我,我将非常感谢您的帮助 Train on 980 samples, validate on 327 samples Epoch 1/5 980/980 [==============================] - 777s 792m

我正在尝试创建一个CNN,它可以区分有无糖尿病视网膜病变症状的眼睛的黑白照片。当我试着运行我的模型时,精确度一点也没有提高。我试着使用不同的学习速度,但没有效果。因为这是我第一次做CNN,我想我可能在其他地方犯了一个错误。如果您看到我的代码中存在问题,请告诉我,我将非常感谢您的帮助

Train on 980 samples, validate on 327 samples
Epoch 1/5
980/980 [==============================] - 777s 792ms/step - loss: 8.1986 - accuracy: 0.4653 - val_loss: 8.8154 - val_accuracy: 0.4251
Epoch 2/5
980/980 [==============================] - 666s 679ms/step - loss: 8.1986 - accuracy: 0.4653 - val_loss: 8.8154 - val_accuracy: 0.4251
Epoch 3/5
980/980 [==============================] - 672s 686ms/step - loss: 8.1986 - accuracy: 0.4653 - val_loss: 8.8154 - val_accuracy: 0.4251
这是我的密码:

DATADIR = "C:\\Users.."
CATEGORIES = ["nosymptoms", "symptoms"]
training_data = []
IMG_SIZE = 512
for category in CATEGORIES:
    path = os.path.join(DATADIR, category) #brings us to folder with categories
    class_num = CATEGORIES.index(category)
    for img in os.listdir(path):
        img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
        new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) #img resized and becomes array
        training_data.append([new_array, class_num]) #classification is appended to image 

因为你有两个类,所以把最后一层改为两个神经元

model = Sequential() 
model.add(Convolution2D(32, (3,3),input_shape=(X.shape[1:]),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(16, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(2, activation='softmax'))

from keras.optimizers import SGD
opt = SGD(lr=0.01)
model.compile(loss = "categorical_crossentropy", optimizer = opt, metrics=['accuracy'])
print(model.summary())

model.fit(X, y, batch_size = 16, epochs = 5, validation_split=.25)

你能用一些东西更新你的问题吗。第一,运行15个阶段,并发布输出,而不是3个阶段。第二,你能贴出X和y是什么样子吗?这是因为你使用一个带有一个神经元的softmax,它产生一个恒定的输出,这里有数百个关于同一问题的问题。只需将激活更改为sigmoid。对于二进制标签,可以使用1输出0或1,也可以使用2输出一个hot 01和10,这取决于您的实现。这不是问题所在。同样对于你的答案,你必须使用分类熵来表示损失
model = Sequential()

model.add(Convolution2D(32, (3,3),input_shape=(X.shape[1:]),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(16, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(1, activation='softmax'))

from keras.optimizers import SGD
opt = SGD(lr=0.01)
model.compile(loss = "binary_crossentropy", optimizer = opt, metrics=['accuracy'])
print(model.summary())

model.fit(X, y, batch_size = 16, epochs = 5, validation_split=.25)
model = Sequential() 
model.add(Convolution2D(32, (3,3),input_shape=(X.shape[1:]),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))
model.add(Convolution2D(32, (3,3),activation='relu'))

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(16, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(2, activation='softmax'))

from keras.optimizers import SGD
opt = SGD(lr=0.01)
model.compile(loss = "categorical_crossentropy", optimizer = opt, metrics=['accuracy'])
print(model.summary())

model.fit(X, y, batch_size = 16, epochs = 5, validation_split=.25)