浅谈keras 模型用于预测时的注意事项

 更新时间:2020年06月27日 08:56:03   作者:机器AI  
这篇文章主要介绍了浅谈keras 模型用于预测时的注意事项,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

为什么训练误差比测试误差高很多?

一个Keras的模型有两个模式:训练模式测试模式一些正则机制,如Dropout,L1/L2正则项在测试模式下将不被启用。

另外,训练误差是训练数据每个batch的误差的平均。在训练过程中,每个epoch起始时的batch的误差要大一些,而后面的batch的误差要小一些。另一方面,每个epoch结束时计算的测试误差是由模型在epoch结束时的状态决定的,这时候的网络将产生较小的误差。

【Tips】可以通过定义回调函数将每个epoch的训练误差和测试误差并作图,如果训练误差曲线和测试误差曲线之间有很大的空隙,说明你的模型可能有过拟合的问题。当然,这个问题与Keras无关。

在keras中文文档中指出了这一误区,笔者认为产生这一问题的原因在于网络实现的机制。即dropout层有前向实现和反向实现两种方式,这就决定了概率p是在训练时候设置还是测试的时候进行设置

利用预训练的权值进行Fine tune时的注意事项:

不能把自己添加的层进行将随机初始化后直接连接到前面预训练后的网络层

in order to perform fine-tuning, all layers should start with properly trained weights: for instance you should not slap a randomly initialized fully-connected network on top of a pre-trained convolutional base. This is because the large gradient updates triggered by the randomly initialized weights would wreck the learned weights in the convolutional base. In our case this is why we first train the top-level classifier, and only then start fine-tuning convolutional weights alongside it.

we choose to only fine-tune the last convolutional block rather than the entire network in order to prevent overfitting, since the entire network would have a very large entropic capacity and thus a strong tendency to overfit. The features learned by low-level convolutional blocks are more general, less abstract than those found higher-up, so it is sensible to keep the first few blocks fixed (more general features) and only fine-tune the last one (more specialized features).

fine-tuning should be done with a very slow learning rate, and typically with the SGD optimizer rather than an adaptative learning rate optimizer such as RMSProp. This is to make sure that the magnitude of the updates stays very small, so as not to wreck the previously learned features.

补充知识:keras框架中用keras.models.Model做的时候预测数据不是标签的问题

我们发现,在用Sequential去搭建网络的时候,其中有predict和predict_classes两个预测函数,前一个是返回的精度,后面的是返回的具体标签。但是,在使用keras.models.Model去做的时候,就会发现,它只有一个predict函数,没有返回标签的predict_classes函数,所以,针对这个问题,我们将其改写。改写如下:

def my_predict_classes(predict_data):
  if predict_data.shape[-1] > 1:
    return predict_data.argmax(axis=-1)
  else:
    return (predict_data > 0.5).astype('int32')
 
# 这里省略网络搭建部分。。。。
 
model = Model(data_input, label_output)
model.compile(loss='categorical_crossentropy',
       optimizer=keras.optimizers.Nadam(lr=0.002),
       metrics=['accuracy'])
model.summary()
 
y_predict = model.predict(X_test)
y_pre = my_predict_classes(y_predict)

这样,y_pre就是具体的标签了。

以上这篇浅谈keras 模型用于预测时的注意事项就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python用模块zlib压缩与解压字符串和文件的方法

    python用模块zlib压缩与解压字符串和文件的方法

    Python标准模块中,有多个模块用于数据的压缩与解压缩,如zipfile,gzip, bz2等等。这篇文章主要给大家介绍了python如何利用模块zlib压缩与解压字符串和文件的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • python机器学习基础决策树与随机森林概率论

    python机器学习基础决策树与随机森林概率论

    这篇文章主要为大家介绍了python机器学习基础决策树与随机森林概率论详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • python实现画循环圆

    python实现画循环圆

    今天小编就为大家分享一篇python实现画循环圆,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python代码中引用已经写好的模块、方法的两种方式

    Python代码中引用已经写好的模块、方法的两种方式

    这篇文章主要介绍了Python代码中引用已经写好的模块、方法,下面就介绍两种方式,可以简洁明了地调用自己在其他模块写的代码,需要的朋友可以参考下
    2022-07-07
  • python中plt.imshow与cv2.imshow显示颜色问题

    python中plt.imshow与cv2.imshow显示颜色问题

    这篇文章主要介绍了plt.imshow与cv2.imshow显示颜色问题,本文给大家介绍的非常详细,同时给大家提到了cv2.imshow()和plt.imshow()的区别讲解,需要的朋友可以参考下
    2020-07-07
  • python判断字符串的前两个字母是否是"id"的示例代码

    python判断字符串的前两个字母是否是"id"的示例代码

    这篇文章主要介绍了python判断字符串的前两个字母是否是”id",使用 Python 的字符串切片来判断一个字符串的前两个字母是否是 "id",本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Python yield的用法实例分析

    Python yield的用法实例分析

    这篇文章主要介绍了Python yield的用法,结合实例形式分析了Python yield的基本功能、使用方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • Python+tkinter实现动态连接数据库

    Python+tkinter实现动态连接数据库

    在使用 Tkinter (tk) 开发 GUI 程序时,可以通过多种方式让用户自由更改数据库连接地址,本文主要介绍了三种常用方法,感兴趣的小伙伴可以了解下
    2025-03-03
  • 详解python的四种内置数据结构

    详解python的四种内置数据结构

    这篇文章主要介绍了python的四种内置数据结构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 讲解Python3中NumPy数组寻找特定元素下标的两种方法

    讲解Python3中NumPy数组寻找特定元素下标的两种方法

    这篇文章主要介绍了讲解Python3中NumPy数组寻找特定元素下标的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论