Kears 使用:通过回调函数保存最佳准确率下的模型

版权声明:本博客内容为原创,若要转载,请注明出处!否则禁止转载! https://blog.csdn.net/wardenjohn/article/details/84030248

1:首先,我给我的MixTest文件夹里面分好了类的图片进行重命名(因为分类的时候没有注意导致命名有点不好)


def load_data(path):
    Rename the picture [a tool]
    for eachone in os.listdir(path):
        newname = eachone[7:]
        os.rename(path+"\\"+eachone,path+"\\"+newname)

但是需要注意的是:我们按照类重命名了以后,系统其实会按照图片来排序。这个时候你会看到同一个类的被排序在了一块。这个时候你不要慌张,其实这个顺序是完全不用担心的。我们只是需要得到网络对某一个图片的输出是怎么样的判断标签。这个顺序对网络计算其权重完全是没有任何的影响的

2:我在Keras中使用InceptionV3这个模型进行训练,训练模型的过程啥的我在这里就不详细说了(毕竟这个东西有点像随记那样的东西)

我们在Keras的模型里面是可以通过

H.history["val_acc"]
H.history["val_loss"]

来的得到历史交叉准确率这样的指标

3:

对于每个epoch,我们都会计算一次val_acc和val_loss,我很希望保留下我最高的val_acc的模型,那该怎么办呢?

这个时候我就会使用keras的callback函数

H = model.fit_generator(train_datagen.flow(X_train, Y_train, batch_size=batchsize),
        validation_data=(X_test, Y_test), steps_per_epoch=(X_train.shape[0]) // batchsize,
        epochs=epoch, verbose=1, callbacks=[tb(log_dir='E:\John\log'),
                                            save_function])

上面的参数先查查文档把。这里我就说说我的callbacks

callbacks=[tb(log_dir = 'E\John\log')]

这个是使用tensorboard来可视化训练过程的,后面是tensorboard的log输出文件夹的路径,在网络训练的时候,相对应的训练的状态就会保存在这个文件夹下

打开终端,输入 

tensorboard --log_dir <your name of the log dir> --port <the port for tensorboard>

然后输入终端指示的网址在浏览器中打开,就可以在tensorboard中看到你训练的状态了

save_function:

这是一个类的实例化:

class Save(keras.callbacks.Callback):
    def __init__(self):
        self.max_acc = 0.0

    def on_epoch_begin(self, epoch, logs=None):
        pass

    def on_epoch_end(self, epoch, logs=None):
        self.val_acc = logs["val_acc"]
        if epoch != 0:
            if self.val_acc > self.max_acc and self.val_acc > 0.8:
                model.save("kears_model_"+str(epoch)+ "_acc="+str(self.val_acc)+".h5")
                self.max_acc = self.val_acc

save_function = Save()

这里继承了kears.callbacks.Callback

看看on_epoch_end:

在这个epoch结束的时候,我会得到它的val_acc

当这个val_acc为历史最大值的时候,我就保存这个模型

在训练结束以后,你就挑出acc最大的就好啦(当然,你可以命名为一样的,最后的到的模型就不用挑了,直接就是acc最大的模型了)

猜你喜欢

转载自blog.csdn.net/wardenjohn/article/details/84030248
今日推荐