【问题标题】:How do you add additional layers to a TensorFlow Neural Network?如何向 TensorFlow 神经网络添加额外的层?
【发布时间】:2022-06-22 21:52:49
【问题描述】:

如何向 TensorFlow 神经网络添加额外的层并知道额外的层不会过拟合???似乎 2 层不会很有帮助,但它确实给了我 91% 的准确率,我想要 100% 的准确率。所以我想添加 5 到 10 个额外的层,并尝试“过度拟合”神经网络。过拟合在训练集上总是能提供 100% 的准确率吗?

神经网络的基本构建块是layer

我正在使用来自https://www.tensorflow.org/tutorials/keras/classification的模型示例

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

model.fit(train_images, train_labels, epochs=10)

该网络的第一层将图像格式从二维数组(28 x 28 像素)转换为一维数组(28 * 28 = 784 像素)。将这一层想象成图像中的像素行拆开并排列起来。该层没有要学习的参数;它只会重新格式化数据。

目前这个例子在像素被展平后,网络由两个tf.keras.layers.Dense层或完全连接的神经层组成。第一个Dense 层有 128 个节点(或神经元)。第二层(也是最后一层)返回一个长度为 10 的数组。

问题:我想先添加一个额外的层,然后过拟合说 5 层。如何手动添加一个附加层并适合该层?我可以指定 5 个附加层而不必指定每一层吗?在给定大小(例如 30x30 像素)的图像数据集上“过度拟合”的典型估计是什么?

添加一个附加层给了我同样的准确性。

Epoch 1/10
1875/1875 [==============================] - 9s 5ms/step - loss: 0.4866 - accuracy: 0.8266
Epoch 2/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.3619 - accuracy: 0.8680
Epoch 3/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.3278 - accuracy: 0.8785
Epoch 4/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.3045 - accuracy: 0.8874
Epoch 5/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.2885 - accuracy: 0.8929
Epoch 6/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.2727 - accuracy: 0.8980
Epoch 7/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.2597 - accuracy: 0.9014
Epoch 8/10
1875/1875 [==============================] - 9s 5ms/step - loss: 0.2475 - accuracy: 0.9061
Epoch 9/10
1875/1875 [==============================] - 9s 5ms/step - loss: 0.2386 - accuracy: 0.9099
Epoch 10/10
1875/1875 [==============================] - 10s 5ms/step - loss: 0.2300 - accuracy: 0.9125

【问题讨论】:

  • 是模型的正确方法 = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128,激活='relu'), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10) ])

标签: tensorflow


【解决方案1】:

您可以按如下方式向神经网络添加层。

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

过拟合

当模型完全适合其训练数据时,就会发生过度拟合。发生这种情况时,不幸的是,该算法无法针对看不见的数据准确执行。例如,如果我们的模型在训练集上看到 95% 的准确率,但在测试集上只有 45% 的准确率,则该模型对其训练数据过度拟合。它并不总是在训练集上提供 100% 的准确率。

可以通过检查准确性和损失等验证指标来识别。当模型受到过度拟合的影响时,验证指标通常会上升,直到它们停滞或开始下降。该模型在上升趋势中寻找合适的契合点,当找到合适的契合点时,趋势开始下降或停滞。更多信息请参考this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2015-10-24
    • 2019-06-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多