Python 当使用10个纪元时,Keras不起作用

Python 当使用10个纪元时,Keras不起作用,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,这是非常奇怪的,但是当我使用10个历元运行我的Keras CNN模型时,每个历元(包括第一个历元)给我一个.333的精度(我有3个分类)。使用任何其他历元似乎都很好,在第一个历元之后给我约.55的精度,并继续增长到约.9的精度。该模型定义如下: import os from keras.models import Sequential from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten, Activatio

这是非常奇怪的,但是当我使用10个历元运行我的Keras CNN模型时,每个历元(包括第一个历元)给我一个.333的精度(我有3个分类)。使用任何其他历元似乎都很好,在第一个历元之后给我约.55的精度,并继续增长到约.9的精度。该模型定义如下:

import os
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten, Activation, GlobalMaxPooling2D, PReLU, LeakyReLU
from keras.layers.core import Flatten, Dense, Dropout
from keras.layers.convolutional import MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator

import matplotlib.pyplot as plt

input_shape = (405, 270, 3)
batch_size = 16
epochs = 15

# training_directory = os.getcwd() + '\DataSubset\TrainImages'
# test_directory = os.getcwd() + '\DataSubset\TestImages'
# num_classes = 70
# train_samples = 27992
# test_samples = 7000

training_directory = os.getcwd() + '\SmallDataSubset\TrainImages'
test_directory = os.getcwd() + '\SmallDataSubset\TestImages'
num_classes = 3
train_samples = 9578
test_samples = 2415
target_shape = (405, 270)

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(training_directory, target_size=target_shape, batch_size=batch_size)

test_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(test_directory, target_size=target_shape,
                                                                        batch_size=batch_size)


def create_short_model():
    model = Sequential()
    model.add(Conv2D(128, (3, 3), padding='same', activation='relu', input_shape=input_shape))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Conv2D(128, (3, 3), padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Conv2D(256, (3, 3), padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Conv2D(256, (3, 3), padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Flatten())
    model.add(Dense(256, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(num_classes, activation='sigmoid'))

    return model


model = create_short_model()

print(model.summary())

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

history = model.fit_generator(train_generator,
                              steps_per_epoch=train_samples // batch_size,
                              epochs=epochs,
                              validation_data=test_generator,
                              validation_steps=test_samples // batch_size)

plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

是否有其他人遇到过此问题/是否有人知道我可能遗漏了什么?

您确定这是可复制的吗?不仅仅是一次不走运的随机数?是的,我已经用3个时代运行了大约10次模型,每次都给出了类似的结果,现在我在10个时代尝试了5次,甚至多次尝试重新启动我的计算机。始终具有.333精度(+/-~.005)。我回到了3个时代,效果很好,尝试了15个时代,效果很好。