VGG16 项目概率相同

问题描述

我设计了一个 VGG16 项目来预测猫和狗, 训练数据每张图片8751张,验证数据每张图片3749张。 但是为什么预测各种动物,猫狗的概率都一样,都判断为猫呢? 请查看代码视频和预测过程,能否提供其他信息,谢谢 https://youtu.be/Vfl04Dk31SU

训练代码

import  tensorflow as tf
import os
import  sys
import  warnings
from keras.applications.vgg16 import VGG16
from keras.layers import  Input,Flatten,Dense
from  keras.models import  Model
from  keras.preprocessing.image import  ImageDataGenerator
stderr=sys.stderr
sys.stderr=open(os.devnull,'w')
def nogpu():
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
    os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
    warnings.filterwarnings('ignore')
nogpu.nogpu()
img_width,img_height=224,224
train_data_dir='./sample/train'
validation_data_dir='./sample/valid'
nb_train_samples=1000
nb_validation_samples=400
epochs=50
batch_size=20
input_shape=(img_width,img_height,3)
num_classes=2
model_vgg16_conv=VGG16(weights='imagenet',include_top=False)
model_vgg16_conv.summary()
input=Input(shape=input_shape,name='image_input')
output_vgg16_conv=model_vgg16_conv(input)
x=Flatten(name='flatten')(output_vgg16_conv)
x=Dense(4096,activation='relu',name='fc1')(x)
x=Dense(256,name='fc2')(x)
x=Dense(num_classes,activation='softmax',name='predictions')(x)
model=Model(inputs=input,outputs=x)
model.summary()
model.compile(
    loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy']
)
train_datagen=ImageDataGenerator(
    rotation_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=False
)
train_generator=train_datagen.flow_from_directory(
    train_data_dir,target_size=(img_width,img_height),batch_size=batch_size,shuffle=False,# 抽樣不放回
    class_mode='categorical'
)
train_history=model.fit_generator(
    train_generator,steps_per_epoch=nb_train_samples//batch_size,epochs=epochs
)
model.save('myvgg16.h5')
model.save_weights('myvgg16.weight')
from keras.models import  model_from_json
json_string=model.to_json()
with open('myvgg16.config','w') as text_file:
    text_file.write(json_string)

预测代码

from keras.preprocessing import image
import  numpy as np
#img = image.load_img("cat.3.jpg",target_size=(224,224))
#img = image.load_img("dog.232.jpg",224))
#img = image.load_img("brown-bear.jpg",224))
img = image.load_img("rabbit.jpg",224))
img = np.asarray(img)
img = np.expand_dims(img,axis=0)
from keras.models import load_model
saved_model = load_model("myvgg16.h5")
output = saved_model.predict(img)
print(output)
if output[0][0] > output[0][1]:
    print("cat")
else:
    print('dog')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)