zoukankan      html  css  js  c++  java
  • tensorflow2知识总结(杂)---3、如何提高网络的拟合能力

    tensorflow2知识总结(杂)---3、如何提高网络的拟合能力

    一、总结

    一句话总结:

    1、增加层(增加层的效果比增加隐藏神经元的效果好)
    2、增加隐藏神经元个数

    1、什么是网络容量 及相关?

    a、网络容量可以认为与网络中的可训练参数成正比
    b、网络中的神经单元数越多,层数越多,神经网络的拟合能力越强。
    c、但是训练速度、难度越大,越容易产生过拟合。

    2、超参数是什么?

    A、所谓超参数,也就是搭建神经网络中,需要我们自己如选择(不是通过梯度下降算法去优化)的那些参数。
    B、比如,中间层的神经元个数、学习速率

    3、提高网络的拟合能力的两种方法中哪种更好?

    I、单纯的增加神经元个数对于网络性能的提高并不明显,增加层会大大提高网络的拟合能力
    II、这也是为什么现在深度学习的层越来越深的原因

    4、单层的神经元个数 太少或太多会怎样?

    太少:单层的神经元个数,不能太小,太小的话,会造成信息瓶颈,使得模型欠拟合
    太多:过拟合

    5、提高网络的拟合能力 增加层的具体操作?

    直接在隐藏层增加层即可,非常简单,比如:model.add(tf.keras.layers.Dense(128,activation='relu'))
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Flatten(input_shape=(28,28))) 
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    
    #增加两层
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    
    model.add(tf.keras.layers.Dense(10,activation='softmax'))

    二、如何提高网络的拟合能力

    博客对应课程的视频位置:

    1、网络容量

    可以认为与网络中的可训练参数成正比
    网络中的神经单元数越多,层数越多,神经网络的拟合能力越强。
    但是训练速度、难度越大,越容易产生过拟合。


    2、如何选择超参数

    所谓超参数,也就是搭建神经网络中,需要我们自己如选择(不是通过梯度下降算法去优化)的那些参数。
    比如,中间层的神经元个数、学习速率


    3、那么如何提高网络的拟合能力


    一种显然的想法是增大网络容量:
    1.增加层
    2.增加隐藏神经元个数


    这两种方法哪种更好呢?
    单纯的增加神经元个数对于网络性能的提高并不明显,增加层会大大提高网络的拟合能力这也是为什么现在深度学习的层越来越深的原因


    注意:
    单层的神经元个数,不能太小,太小的话,会造成信息瓶颈,使得模型欠拟合


    4、增加层增加网络拟合能力核心代码

    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Flatten(input_shape=(28,28))) 
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    
    #增加两层
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    
    model.add(tf.keras.layers.Dense(10,activation='softmax'))

    原来:

    # 顺序模型
    model = tf.keras.Sequential()
    # 将多维数据(60000, 28, 28)变成一维
    # 把图像扁平化成一个向量
    model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
    # 这里的神经元也不能太多,神经元太多容易产生过拟合
    # 神经元太少,会舍弃很多信息
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    # 输出10个概率值,输出图片属于哪一类
    model.add(tf.keras.layers.Dense(10,activation='softmax'))

    model.summary()
    Model: "sequential"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    flatten (Flatten)            (None, 784)               0         
    _________________________________________________________________
    dense (Dense)                (None, 128)               100480    
    _________________________________________________________________
    dense_1 (Dense)              (None, 10)                1290      
    =================================================================
    Total params: 101,770
    Trainable params: 101,770
    Non-trainable params: 0
    ____________________________

    增加层之后:

    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
    model.add(tf.keras.layers.Dense(128,activation='relu'))

    #增加两层
    model.add(tf.keras.layers.Dense(128,activation='relu'))
    model.add(tf.keras.layers.Dense(128,activation='relu'))

    model.add(tf.keras.layers.Dense(10,activation='softmax'))

    model.summary()
    Model: "sequential"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    flatten (Flatten)            (None, 784)               0         
    _________________________________________________________________
    dense (Dense)                (None, 128)               100480    
    _________________________________________________________________
    dense_1 (Dense)              (None, 128)               16512     
    _________________________________________________________________
    dense_2 (Dense)              (None, 128)               16512     
    _________________________________________________________________
    dense_3 (Dense)              (None, 10)                1290      
    =================================================================
    Total params: 134,794
    Trainable params: 134,794
    Non-trainable params: 0
    ____________________________
     
    参数从101,770 变成了134,794 ,对应的训练准确率也会相应提高
     
     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    Ubuntu Server中怎样卸载keepalived
    Winform中实现ZedGraph滚轮缩放后自动重新加载数据
    Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限
    C#中获取多个对象list中对象共有的属性项
    Windows7中启动Mysql服务时提示:拒绝访问的一种解决方式
    八、子查询实践
    四、bootstrap-Table
    二、sql新增后返回主键|sql 使用 FOR XML PATH实现字符串拼接|sql如果存在就修改不存在就新增
    一、动词、名词、形容词汇位置
    三、TortoiseSVN 单独拉取项目某个文件
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13388877.html
Copyright © 2011-2022 走看看