精度卡在 50% Keras

Accuracy Stuck at 50% Keras

代码

import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential,Model
from keras.layers import Dropout, Flatten, Dense,Input
from keras import applications
from keras.preprocessing import image
from keras import backend as K
K.set_image_dim_ordering('tf')


# dimensions of our images.
img_width, img_height = 150,150

top_model_weights_path = 'bottleneck_fc_model.h5'
train_data_dir = 'Cats and Dogs Dataset/train'
validation_data_dir = 'Cats and Dogs Dataset/validation'
nb_train_samples = 20000
nb_validation_samples = 5000
epochs = 50
batch_size = 16
input_tensor = Input(shape=(150,150,3))

base_model=applications.VGG16(include_top=False, weights='imagenet',input_tensor=input_tensor)
for layer in base_model.layers:
    layer.trainable = False

top_model=Sequential()
top_model.add(Flatten(input_shape=base_model.output_shape[1:]))
top_model.add(Dense(256,activation="relu"))
top_model.add(Dropout(0.5))
top_model.add(Dense(1,activation='softmax'))
top_model.load_weights(top_model_weights_path)
model = Model(inputs=base_model.input,outputs=top_model(base_model.output))


datagen = ImageDataGenerator(rescale=1. / 255)

train_data = datagen.flow_from_directory(train_data_dir,target_size=(img_width, img_height),batch_size=batch_size,classes=['dogs', 'cats'],class_mode="binary",shuffle=False)


validation_data = datagen.flow_from_directory(validation_data_dir,target_size=(img_width, img_height),classes=['dogs', 'cats'], batch_size=batch_size,class_mode="binary",shuffle=False)


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

model.fit_generator(train_data, steps_per_epoch=nb_train_samples//batch_size, epochs=epochs,validation_data=validation_data, shuffle=False,verbose=

我已经使用 keras(使用 VGG16 网络学习传输)在猫狗数据集 (https://www.kaggle.com/c/dogs-vs-cats/data) 上实现了图像分类器。代码运行没有错误,但在大约一半的时期内准确率停留在 0.0%,在一半之后它增加到 50% 的准确率。我正在使用带氢气的 Atom。

我该如何解决 this.I 我真的不认为我对这样的 VGG16 数据集有偏见问题(尽管我对这个领域比较陌生)。

将输出层的激活更改为 sigmoid

来自

top_model.add(Dense(1,activation='softmax')) 

top_model.add(Dense(1,activation='sigmoid'))
  • 改变激活函数是一个很好的步骤,同时注意您使用的数据集的大小。
  • 如果小则减小批量大小,减小批量大小为我解决了:)

我想我的测试集太小了,无法将大批量输入 CNN。