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 = 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: "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 ____________________________