问题keras使用预训练模型vgg16分类,损失和准确度不变。
细节:使用keras训练一个两类数据,正负比例1:3,在vgg16后添加了几个全链接并初始化了。并且对所有层都允许训练。
但是准确度一直是0.75.
数据预先处理已经检查过格式正确
再将模型中relu改成sigmoid就正常了。
数据处理程序
import os import pickle import numpy as np import DataFile import SelectiveSearch import Generator import IoU import Model_CRNN_VGG16 from keras.preprocessing.image import ImageDataGenerator from keras.callbacks import ModelCheckpoint def data_generator(gen1,gen0): while True: data_pos = next(gen1) data_neg = next(gen0) ret_X = np.vstack((data_pos[0],data_neg[0])) ret_y = np.vstack((data_pos[1],data_neg[1])) index = np.arange(ret_y.shape[0]) np.random.shuffle(index) ret_X = ret_X[index, :, :, :] # X_train是训练集,y_train是训练标签 ret_y = ret_y[index] yield ret_X,ret_y if __name__ == "__main__": type = "train" # 数据生成器,每个mini-batch包含32个正样本(属于VOC 20个类别),96个负样本(background) RESIZE = (224, 224) path = "category_images" categories = os.listdir(path) categories.append('background') print(categories) train_1_datagen = ImageDataGenerator( rescale=1.0/255, #shear_range=0.2, #zoom_range=0.2, horizontal_flip=True) train_1_generator = train_1_datagen.flow_from_directory( 'category_images', target_size=RESIZE, batch_size=32, classes = categories) train_0_datagen = ImageDataGenerator( rescale=1.0 / 255, #shear_range=0.2, #zoom_range=0.2, horizontal_flip=True) train_0_generator = train_0_datagen.flow_from_directory( 'category_background', target_size=RESIZE, batch_size=32*3, classes=categories) generator = data_generator(train_1_generator,train_0_generator) # 创建模型 model = Model_CRNN_VGG16.CRNN_Model(input_shape=(*RESIZE,3)) cnn = model.CNN(len(categories)) if os.path.exists('weights-cnn.hdf5'): cnn.load_weights('weights-cnn.hdf5') if type == "train": checkpoint = ModelCheckpoint('weights-cnn.hdf5',save_weights_only=True) cnn.fit_generator(generator = generator,steps_per_epoch=200,epochs=1000,callbacks=[checkpoint]) else: img = next(generator)[0] result = cnn.predict(img) print(result) # 训练SVM # 非极大值抑制 # 预测
模型程序:
from keras.applications.vgg16 import VGG16 from keras.layers import * from keras.models import Model from keras.optimizers import SGD,Adam class CRNN_Model(): def __init__(self,input_shape,trainable=True): vgg16 = VGG16(include_top=False,weights="imagenet", input_shape=input_shape) for layer in vgg16.layers: layer.trainable = trainable self.base_model = vgg16 def CNN(self,classes): img_input = self.base_model.input x = self.base_model.get_layer('block5_conv3').output x = Flatten(name='crnn_flatten')(x) x = Dense(512,activation='relu', kernel_initializer='he_normal', name='crnn_fc1')(x) x = Dense(512,activation='relu', kernel_initializer='he_normal',name='crnn_fc2')(x) x = Dense(classes, activation='softmax', kernel_initializer='he_normal', name='crnn_predictions')(x) model = Model(img_input,x) sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) adam = Adam() model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy']) model.summary() return model if __name__ == "__main__": pass
补充知识:val_acc一直不变
val_loss一直不变的原因
之前用keras编写了LSTM模型,做图片分类,自己划分了测试集和训练集,但是得到的结果是每个epoch训练的准确率都不变。
探索
我一直以为是我的数据的读取方式不对,我一直在从这方面下手,但是后来我发现根本不是这个原因,也找到了解决方案,具体原因有三点,三点是递进关系。
1.数据集样本各类别数量差距大
如果没有这种情况就看看第二点。
2.训练集和数据集是手动划分的,改为代码自动划分
代码如下:
X_train, X_test,Y_train, Y_test = train_test_split(data, labels, test_size=0.4, random_state=42)```
上述方法要多设置几个epoch,要有耐心的等,如果还是测试的准确率还是不变,那就可能是第二个原因。
3. 训练模型不适用,或者模型参数不恰当,建议调参,或者改算法
如果第一个方法还是不行那就可能是算法不适合这个数据集,可以打印混淆矩阵看一下,是不是分类错误率太高,比如我的数据集,做二分类,结果第二类全分到第一类了。
以上这篇浅谈keras使用预训练模型vgg16分类,损失和准确度不变就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】