python - 精度卡在 50% Keras

标签 python machine-learning keras conv-neural-network pre-trained-model

代码

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 和氢气。

My directory

Results of execution

我该如何解决这个问题。我真的不认为我对 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/

相关文章:

python - 浮点任意精度是否可用?

python - Django IntegerField 返回长

python - 如何使用 pandas 消除该图中的外部值?

azure - 如何查看对预测结果影响最大的列?

python - 如何将多维数据传入xgboost模型

python - 导入pytorch时出现导入错误

python - Keras ModelCheckpoint 在保存模型的同时引入了额外的层

python - SQLAlchemy ORM 从子查询中选择多个实体

R:训练数据集的 k 折交叉验证

neural-network - Keras + 索引错误