代码
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 和氢气。
我该如何解决这个问题。我真的不认为我对 VGG16 这样的数据集有偏见问题(尽管我对这个领域还比较陌生)。
最佳答案
将输出层的激活更改为 sigmoid
来自
top_model.add(Dense(1,activation='softmax'))
到
top_model.add(Dense(1,activation='sigmoid'))
关于python - 精度卡在 50% Keras,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51581521/