可以认为与网络中的可训练参数成正比。其中网络中的神经单元数越多,层数越多,神经网络的拟合能力越强。但是训练速度、难度越大,越容易产生过拟合。
增大网络容量的方法:(提高网络的拟合能力)
增加神经元的个数增加隐藏层所谓超参数,也就是搭建神经网络中,需要我们自己选择(不是通过梯度下降算法取优化)的那些参数。比如,中间层的神经个数、学习速率等。
那么如在上述提到的方法中如何提高网络的拟合能力:
单纯的增加神经元个数对网络性能的提高并不明显,增加层会大大提高网络的拟合能力,这也是为什么深度学习的层越来越深的原因。
注意:单层的神经元个数,不能太小,太小的话,会造成信息瓶颈,使得模型欠拟合。
在模型中加入多层隐藏层的变化:(以上篇代码为例)
model = tf.keras.Sequential()#建立模型 model.add(tf.keras.layers.Flatten(input_shape=(28,28)))#将图像扁平成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'))#将10个输出改为概率分布 model.summary() Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= flatten_2 (Flatten) (None, 784) 0 _________________________________________________________________ dense_4 (Dense) (None, 128) 100480 _________________________________________________________________ dense_5 (Dense) (None, 128) 16512 _________________________________________________________________ dense_6 (Dense) (None, 128) 16512 ________________________________________________ dense_7 (Dense) (None, 10) 1290 ================================================ Total params: 134,794 Trainable params: 134,794 Non-trainable params: 0 ________________________接下来编译模型:
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['acc']#度量正确率 ) model.fit(train_image,train_lable_onehot,epochs=10) Train on 60000 samples Epoch 1/10 60000/60000 [==============================] - 5s 81us/sample - loss: 0.4918 - acc: 0.8241 Epoch 2/10 60000/60000 [==============================] - 5s 77us/sample - loss: 0.3692 - acc: 0.8632 Epoch 3/10 60000/60000 [==============================] - 4s 68us/sample - loss: 0.3348 - acc: 0.8774 Epoch 4/10 60000/60000 [==============================] - 4s 68us/sample - loss: 0.3111 - acc: 0.8849 Epoch 5/10 60000/60000 [==============================] - 4s 69us/sample - loss: 0.2919 - acc: 0.8902 Epoch 6/10 60000/60000 [==============================] - 4s 71us/sample - loss: 0.2777 - acc: 0.8960 Epoch 7/10 60000/60000 [==============================] - 4s 69us/sample - loss: 0.2658 - acc: 0.9007 Epoch 8/10 60000/60000 [==============================] - 4s 70us/sample - loss: 0.2563 - acc: 0.9037 Epoch 9/10 60000/60000 [==============================] - 4s 69us/sample - loss: 0.2448 - acc: 0.9075 Epoch 10/10 60000/60000 [==============================] - 4s 74us/sample - loss: 0.2357 - acc: 0.9105 Out[30]: <tensorflow.python.keras.callbacks.History at 0x2d026692f98>可以看出,通过增加两层隐藏层,10次epoch的训练,准确率从89%(上篇:笔记:softmax分类)到91%,增加网络拟合能力可以提升在训练数据集正确率。
