CNN 模型的损失收敛性和准确性较差

阿德里安

我已经使用 TF 构建了一个二元分类器,它将 16x16 灰度图像分类为分布为 87-13 的两个类之一。我遇到的问题是模型的对数损失收敛到 ~0.4,这比随机更好,但我无法让它改进。

视觉问题属于视频编码领域,该图像应该提供对该问题的一些理解,其中图像将根据其同质性进行拆分(0/1)或不拆分(0/1)。注意边缘附近的方块更有可能被细分为更小的方块。

在验证模型时(1.1e7 示例,87-13 分布),我无法获得高于 ~50%F1 分数

我的训练数据由 2.2e8 个示例组成,这些示例经过过采样/欠采样以实现 50-50 的分布。我正在使用批量大小为 1024 的大量随机缓冲区(数据未按顺序排列)。使用 Adam 优化,使用默认超参数。

我试图提高性能的事情(测试(结果)):

  • 更大的网络,改变层数,激活,卷积核大小和步幅等(相同的收敛)
  • 密集层之间的辍学(与大网络的性能相同,小网络的性能更差)
  • 其他 Adam 超参数(最终都会导致相同的收敛)
  • 其他优化器(同上)
  • 使用非常小的数据集进行训练以测试收敛性(损失饱和为 0)
  • 正则化输入(无效)
  • 改变批量大小(只影响损失和收敛时间的噪声)

我一直在努力提高性能,我想我已经阅读了我能找到的每一个 SO 问题。任何建议都会有很大帮助。

def cnn_model(features, labels, mode):
#   downsample to 8x8 using 2x2 local averaging
    features_8x8 = tf.nn.avg_pool(
            value=tf.cast(features["x"], tf.float32),
            ksize=[1, 2, 2, 1],
            strides=[1, 2, 2, 1],
            padding="SAME",
            data_format='NHWC'
            )
    conv2d_0 = tf.layers.conv2d(inputs=features_8x8,
                                filters=6,
                                kernel_size=[3, 3],
                                strides=(1, 1),
                                activation=tf.nn.relu,
                                name="conv2d_0")
    pool0 = tf.layers.max_pooling2d(
            inputs=conv2d_0,
            pool_size=(2, 2),
            strides=(2, 2),
            padding="SAME",
            data_format='channels_last'
            )
    conv2d_1 = tf.layers.conv2d(inputs=pool0,
                                filters=16,
                                kernel_size=[3, 3],
                                strides=(3, 3),
                                activation=tf.nn.relu,
                                name="conv2d_1")
    reshape1 = tf.reshape(conv2d_1, [-1, 16])
    dense0 = tf.layers.dense(inputs=reshape1,
                             units=10,
                             activation=tf.nn.relu,
                             name="dense0")
    logits = tf.layers.dense(inputs=dense0,
                             units=1,
                             name="logits")

    # ########################################################

    predictions = {
            "classes": tf.round(tf.nn.sigmoid(logits)),
            "probabilities": tf.nn.sigmoid(logits)
            }

    # ########################################################

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode=mode,
                                          predictions=predictions)

    # ########################################################

    cross_entropy = tf.nn.sigmoid_cross_entropy_with_logits(
            labels=tf.cast(labels['y'], tf.float32),
            logits=logits
            )

    loss = tf.reduce_mean(cross_entropy)

    # ########################################################

    # Configure the Training Op (for TRAIN mdoe)
    if mode == tf.estimator.ModeKeys.TRAIN:
        optimiser = tf.train.AdamOptimizer(learning_rate=0.001,
                                           beta1=0.9,
                                           beta2=0.999,
                                           epsilon=1e-08)
        train_op = optimiser.minimize(
                loss=loss,
                global_step=tf.train.get_global_step())
        return tf.estimator.EstimatorSpec(mode=mode,
                                          loss=loss,
                                          train_op=train_op)
    # Add evalutation metrics (for EVAL mode)
    eval_metric_ops = {
            "accuracy": tf.metrics.accuracy(
                    labels=labels["y"],
                    predictions=predictions["classes"]),
            }
    return tf.estimator.EstimatorSpec(mode=mode,
                                      loss=loss,
                                      eval_metric_ops=eval_metric_ops)
用户3640029

看来你已经做了很多了。我的下一步将是可视化

  • 数据集:人类可以区分类别吗?
  • 权重:它们在训练期间是否收敛/改变
  • 像 VGG 这样的微调模型是如何工作的?

可能,您要求的是非常困难的视力问题。我们可以看到图像或获取数据样本吗?然后,有经验的人可以尝试提出一个(希望)工作的基本模型......

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tensorflow模型的准确性和熊猫数据丢失

来自分类Dev

Chef中收敛性和幂等性的区别

来自分类Dev

如何监控Gensim LDA模型的收敛性?

来自分类Dev

为什么数据增强不能提高CNN中纹理分类的准确性?

来自分类Dev

多次运行会对CNN上的图像分类准确性产生影响吗?

来自分类Dev

训练CNN后准确性低

来自分类Dev

减少CNN模型中的验证损失

来自分类Dev

CNN准确性与损失选择

来自分类Dev

CNN的加载精度和损失时期

来自分类Dev

深度CNN不会学习,准确性只会保持不变

来自分类Dev

While循环和收敛性测试

来自分类Dev

如何提高模型损失和准确性?

来自分类Dev

CNN(VGG-16)对验证准确性的奇怪行为

来自分类Dev

合并不同的CNN模型

来自分类Dev

在训练阶段,我的CNN验证准确性和损失函数的行为怪异

来自分类Dev

Keras的CNN模型的准确性差

来自分类Dev

验证损失和准确性提高

来自分类Dev

在复杂的层次模型中检查收敛性

来自分类Dev

Tensorflow模型的准确性和熊猫数据丢失

来自分类Dev

在Keras中使用CNN模型获得非常差的准确性

来自分类Dev

有多个输出的CNN损失?

来自分类Dev

仅在本地GPU上CNN准确性低

来自分类Dev

如何在Keras中提高CNN分类器的准确性?

来自分类Dev

多次运行会对CNN上的图像分类准确性产生影响吗?

来自分类Dev

提高2D CNN的准确性

来自分类Dev

tflearn(CNN)中的损失增加

来自分类Dev

卷积神经网络 (CNN) 的训练和验证准确性突然下降

来自分类Dev

如何在 CNN 中找到模型的准确性?

来自分类Dev

损失或准确性没有变化