当前位置: 首页 > 知识库问答 >
问题:

无论学习速度如何,损失都不会改变

公西俊民
2023-03-14

我构建了一个深度学习模型,与VGG网略有相似。我正在使用带有Tensorflow后端的Keras。模型摘要如下:

model = Sequential()
model.add(Conv2D(64, 3, border_mode='same', activation='relu', input_shape=(180,320,3)))
model.add(Conv2D(64, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=2))
model.add(Conv2D(64, 3, border_mode='same', activation='relu'))
model.add(Conv2D(64, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=2))
model.add(Conv2D(128, 3, border_mode='same', activation='relu'))
model.add(Conv2D(128, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=2))
model.add(Conv2D(128, 3, border_mode='same', activation='relu'))
model.add(Conv2D(128, 3, border_mode='same', activation='relu'))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(9,  activation='relu'))

我尝试了优化器(SGD,Adam等),损失(MSE,MAE等),批大小(32和64)的不同组合。我甚至尝试过从0.001到10000的学习率。但是,即使在 20 个 epoch 之后,无论我使用哪种损失函数,验证损失仍然完全相同。训练损失变化不大。我做错了什么?

我的网络应该训练做什么:给定一个输入图像,网络需要预测一组9个真实值,可以从这个图像中导出。

训练期间的终端输出:

    Epoch 1/100
    4800/4800 [==============================] - 96s 20ms/step - loss: 133.6534 - mean_absolute_error: 133.6534 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 2/100
    4800/4800 [==============================] - 49s 10ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 3/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 4/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 5/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 6/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 7/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 8/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 9/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 10/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 11/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 12/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 13/100
    4800/4800 [==============================] - 50s 10ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 14/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 15/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 16/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 17/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 18/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 19/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 20/100
    4800/4800 [==============================] - 51s 11ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744
    Epoch 21/100
    4800/4800 [==============================] - 50s 10ms/step - loss: 132.8033 - mean_absolute_error: 132.8033 - val_loss: 132.3744 - val_mean_absolute_error: 132.3744

共有1个答案

应俭
2023-03-14

relu

不要粗心大意地使用!它有一个没有梯度的恒定零区域。它被卡住是完全正常的。

    < li >最大的错误是在最后一层使用relu。 < ul > < li >如果您想要从0到无穷大的输出,请使用< code>'softplus'。 < li >如果您想要介于0和1之间的值,请使用< code>'sigmoid' < li >如果您想要介于-1和1之间,请使用< code>'tanh'
    < li >选择< code>0.0001及以下。
  • 这也让你有更大的学习率

.

model.add(Conv2D(..... , activation='linear'))
model.add(BatchNormalization())
model.add(Activation('relu'))
 类似资料:
  • 也许这是一个过于笼统的问题,但谁能解释什么会导致卷积神经网络发散? 规格: 我正在使用Tensorflow的iris_training模型和我自己的一些数据,并不断获得 错误:张量流:模型因损失=NaN而发散。 追踪。。。 tensor flow . contrib . learn . python . learn . monitors . nanlosduring training error:

  • 这句话,对吗? 不同分辨率下,无论是px还是pt,都会改变大小 请看原文:https://www.jianshu.com/p/d9a0dae1f0bd 有一点我理解了,不同分辨率下,相同的px,显示效果是不一样的。 但是,这句话,我就不理解:不同分辨率下,相同的pt,显示想过是一样的。 pt是一个绝对单位,它的大小就是 1/72 ,我绝对这句话是错误的?! 不同分辨率下,无论是px还是pt,都会改

  • 问题陈述: 编写一个方法whatTime,它采用int,seconds,表示从某一天午夜开始的秒数,并返回一个格式为“:”的字符串。此处,表示自午夜以来的完整小时数,表示自上一完整小时结束以来的完整分钟数,以及自上一完整分钟结束以来的秒数。和中的每一个都应该是整数,没有额外的前导0。因此,如果秒为0,则应返回“0:0:0”,而如果秒为3661,则应返回“1:1:1” 我的算法: 以下是我的算法对输

  • 问题内容: 我有一个关于精度损失的问题 我的任务是将数字打印为字符串 例如0.2 * 7 = 1.4000000000000001; 0.0000014 / 10 = 1.3999999999999998E-7 如何解决这个问题? UPD :主要问题是 字符串 输出格式。我不担心丢失约0.00000001的值。现在,我将其解析为String.format(“%f”,value),但我认为这不是一个

  • 问题内容: 我刚遇到一个很奇怪的东西。 为什么它会抬高而又改变内部? 问题答案: 正如我在评论中开始提到的那样,实际上是 在原地 修改列表,然后尝试将结果分配给元组中的第一个位置。从数据模型文档中: 调用这些方法以实现增强的算术分配(+ =,-=, =,/ =,// =,%=,* =,<< =,>> =,&=,^ =,| =)。这些方法应尝试就地进行操作(修改self)并返回结果(可以是,但不一定

  • 问题内容: 我正在尝试配置Ehcache(2.5版),使其永远不会忘记项目。我正在以编程方式进行配置,但没有涉及任何配置XML文件。通过设置,我的理解是,只有在我磁盘空间不足或超过(或应用程序终止)的情况下,才可以从缓存中删除项目。但是,此测试程序未显示该行为: 因此,在将100万个元素添加到缓存后(我告诉它会溢出到足够大的数量级的磁盘上)之后,最后我只剩下3276个项目。这是怎么回事 问题答案: